y0u_bat
[Defcon 2014] Babyfirst heap 본문
1. 보호기법
2. Double Free bug + heap Overflow
v10 = randrange(0x200,0x500)
랜덤한 크기로 malloc 하다, 11번째에 260 size로 malloc 하는것을 볼 수 있다.
v9 = get_my_line(&v8,0x1000)
최대 0x1000만큼 입력 할 수 있는것을 볼 수 있다.
이부분에서 heap overflow가 발생한다.
그리고 마지막부분에 연속적으로 free 하는 것을 볼수있다.
연속적으로 free 하므로, 병합하면서 unlink가 호출되는데, 이부분에서 double free bug 취약점이 일어난다.
이전청크가 free되어 prev_inuse가 0으로 세팅되어 있는 상태에서 현재 청크를 free 하면, 병합하게 된다.
malloc(260)한 부분에 입력이 가능하며, heap overflow를 일으킬수도 있다.
jmp 0x44 + \x90*80 + shellcode + "A"\*(260-len(payload))
이런식으로 구성한다음, 뒤 malloc chunk의 PREV_INUSE를 1로 세팅하고, fd를 printf_got-8 bk를 malloc(260) heap_ptr로 두면 printf_got가 heap_ptr로 Overwrite 할수있다.
그후에 printf가 호출하기 때문에, 쉘코드가 실행되어 쉘을 획득 할 수 있게 된다.
3. Exploit.py
'CTF' 카테고리의 다른 글
Christmas - who is solo? (5) | 2017.01.12 |
---|---|
. (0) | 2017.01.10 |
[HolyShield] diary - 400pt (0) | 2017.01.08 |
[HITCON] Secret Holder (0) | 2016.11.24 |
[BCTF] BCloud (0) | 2016.11.18 |
Comments