상세 컨텐츠

본문 제목

[Def Camp 2016] Warm Heap

SYSTEM HACKING/CTF, etc

by koharin 2020. 1. 22. 23:29

본문

728x90
반응형

# 보호기법 

 

 

# pseudo code

 

main 함수 :

 

 

flag 함수 : 

 

 

# process

 

main 함수의 코드를 따라가서 heap 상태를 확인한다.

 

 

v3 값을 1로 만든다고 했으니 1 값을 가지는 부분이 v3 일 것이다. 그럼 v3+1 에 malloc 한 heap의 주소 값을 적으니까 0xbe5030이 두 번째 malloc 한 청크 주소. 바로 뒤의 0x0 + 0x21(size) + data(0x10) 에 해당한다.

그 뒤에 2 값이 적혀있는 부분은 v4 이다. v4 + 1에는 세 번째 malloc한 청크의 주소가 적혀있다.

 그리고 바로 뒤에 해당 청크가 있다.

 

자, 이제 다음 단계를 확인하기 위해 main함수를 다시 보자.

fgets 함수로 변수 s에 0x1000 바이트 입력받고, v3+1에 strcpy 함수로 복사한다.

이때, 할당한 데이터 영역 크기는 0x10바이트뿐인데 0x1000바이트나 복사할 수 있으니 heap overflow가 발생한다.

 

두 번째 fgets, strcpy 함수로 v4+1에 복사할 때도 마찬가지이다.

 

근데, 첫 번째 복사 때 아예 세 번째 청크 주소가 적힌 v4+1 값을 원하는 주소로 바꾼다면,

두 번째 strcpy 때 v4+1에 복사할 때는 원하는 값을 원하는 주소에 적을 수 있다.

 

그럼 v4+1 값을 exit@got로 바꾸고, 두 번째 입력 때 flag 함수 주소를 준다면, exit@got에 flag 함수 주소가 적힌다.

 

exit(1) 때 flag 함수가 실행될 수 있는 것이다.

 

v4+1이 두 번째 청크의 데이터 영역으로부터 40바이트 거리이므로 40바이트의 더미를 준 후 exit@got로 payload를 준다.

 

 

exit@got가 flag 함수 주소 0x400826으로 덮힌 것을 확인할 수 있다.

 

 

 

 

728x90
반응형

'SYSTEM HACKING > CTF, etc' 카테고리의 다른 글

[picoCTF 2018] echooo  (0) 2020.01.29
[TUCTF 2018] Ehh  (0) 2020.01.29
[HITCON-Training] lab14 : magicheap  (0) 2020.01.12
[Insomni'hack 2017] Wheel of Robots  (0) 2020.01.10
[HITCON 2016] SleepyHolder  (0) 2020.01.08

관련글 더보기