话说跪求关注博客 40aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0W2M7%4c8%4K9h3&6Y4i4K6u0W2L8h3f1`.
一个简单的缓冲区溢题目,程序由go 语言编写而成,所以并不能直接F5去分析。
程序的main_memcpy存在漏洞,可发生栈溢出
main_memcpy
在调试的过程中,我们会发现一个不一样的地方正常,我们都是rip储存着返回地址,而这确实rsp存储的,这就意味着函数入口时的rsp指向retn地址,下面跟着参数
另外还有一个问题,如果是只是单纯的"A"*192+p64(ret)程序是会报错的,在call main_memcpy结束后,我们可以看到有两条汇编
"A"*192+p64(ret)
call main_memcpy
有两条栈操作,对象分别是name的字符串以及一个name的长度,于是我们构造一个payload = "B" * 104 + p64(0x0000000000599940) + p64(0x200) + "D" * 8
payload = "B" * 104 + p64(0x0000000000599940) + p64(0x200) + "D" * 8
那么剩下的事情只要构造 rop-chain就行了
思路如下,构造一个read 读入 /bin/sh , 读入地址在bss上,然后构造 execve 去执行 /bin/sh
[培训]科锐软件逆向54期预科班、正式班开始火爆招生报名啦!!!
holing 师傅有题目吗
joshuahxl 补充一下,其实这个程序是可以反编译的,问题只是在变量长度的预设上,可以在Option->Compiler将sizeof(int)设置为4就可以了。
返無歸一 哇好厉害,你怎麽知道可以这样设置的