探讨主流内存保护机制下的缓冲区溢出攻击可行形式-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

探讨主流内存保护机制下的缓冲区溢出攻击可行形式

2016-06-06 13:59:16 1503 1
void foo(char *data){
    char name[10];

    printf("%p\n%p\n%p\n%p\n");//打印当前程序栈内存
    strcpy(name, data);//覆盖返回地址
}

void hack(void){
    puts("another place");
}

int main(){
    char buf[10];
    char buf2[10];

    scanf("%s", buf);
    foo(buf);

    return 0;
}

以上是经典的缓冲区溢出攻击,当buf中输入超过10(16)字节,将会覆盖buf2中的内容;如果写入更多字节数,可以改变寄存器中保存的地址,使得被调用函数执行完成后返回到另一个函数的入口地址。

问题:
当前保护机制下,只能覆盖buf2中内容,但是即便跳过很长的内存保护的区域依然找不到记录被调函数返回地址的位置。1.在linux下不采用任何内存保护方法编译源代码的方法?2.关于现在内存保护机制下缓冲区溢出攻击的可能形式。

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:28:28

    Stack protector 的实现是在在栈上放一个canary随机值,在函数调用完成后,检查这个值是否原样,如果不是原样则证明栈被破坏了。

    你的原代码是有问题的。如果你输入的东西溢出了缓冲区,那么它就会覆盖scanf的返回地址,那么就无法正确返回,也就不能调用foo了。
    我猜你想要的是这样:

    void foo(char *data){
    scanf("%s", data);
    printf("%pn%pn%pn%pn%pn%pn%pn%pn%pn%pn%pn%pn%pn%pn%pn%pn");
    }
    int main(){
    char buf[10];
    char buf2[10];
    foo(buf);
    return 0;
    }

    有些常识需要知道,不是你输入超出20个字符长度就一定能将返回地址覆盖。局部变量在栈上的分配,并不是紧凑的,通常情况下都会进行align,并且按16字节对齐。

    所以,如果你输入很多字符(超过64?),你是能得到segment fault的。
    但你没有办法改正确返回地址,一个是因为ALSR,Address space layout randomization,另一个是因为canary本身是随机值,你也无法覆盖正确,最终逃不过检查。

    所以,你只能搞出segmentfault的效果,却并不能覆盖返回地址还能让代码继续正常运行。

    1.在linux下不采用任何内存保护方法编译源代码的方法?
    GCC有一个-fno-stack-protector参数。默认情况下stack-protector是启用的,GCC检测到函数参数类型为char *,并且没有限定长度时,它就会在函数调用前,在栈上放一个canary。

    0 0
相关问答

0

回答

请问下,mysql数据,出现重复消费,需要怎么处理

2022-07-12 16:02:58 150浏览量 回答数 0

1

回答

在发送RST段关闭连接时,缓冲区的数据如何处理?

2022-05-10 18:17:13 79浏览量 回答数 1

1

回答

java程序和vsftpd在同一台机器上传文件失败,文件大小为0

2021-10-19 09:39:41 378浏览量 回答数 1

1

回答

备案域名已经认证 而且备案主体和域名持有者一直 为什么还无法备案

2018-12-10 13:35:46 318浏览量 回答数 1

1

回答

急!请大神帮我下,ECS创建网站后二级域名检测 显示未压缩 求 解 附图

2018-06-10 19:34:49 2477浏览量 回答数 1

3

回答

用.tech域名,指向国内的主机,做企业管网,不能备案,会有何风险?

2017-01-14 14:33:02 2140浏览量 回答数 3

2

回答

域名选择信息保护后怎样恢复信息公开?

2016-12-22 22:13:30 1513浏览量 回答数 2

1

回答

学生 机认证失败

2016-09-03 18:09:42 1467浏览量 回答数 1

1

回答

域名注册后发现已经备案,但是主体信息不是我的,现在如何处理?

2016-08-15 16:49:58 2423浏览量 回答数 1

0

回答

小辣椒LAI2恢复出厂设置后,内存卡显示U盘模式下无法浏览文件列表

2013-04-15 17:15:23 5445浏览量 回答数 0
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载