profile image

L o a d i n g . . .

article thumbnail image
Published 2021. 5. 8. 16:20

1. 문제

문제 보호기법 확인

 

바이너리 실행

입력을 두 번 받고 끝낸다.

 

ida 로 까본 모습이다.

총 네 번 malloc 을 할당한다.

1. v3에 16 공간 할당

2. v3+1에 8 공간 할당

3. v4에 16 공간 할당

4. v4+1에 8 공간 할당

5. s라는 변수에 최대 0x1000의 크기의 값을 입력받고 v3+1에 저장

6. s라는 변수에 최대 0x1000의 크기의 값을 입력받고 v4+1에 저장

 

이 부분에서 strcpy 시 overflow 가 두 번 발생한다.

 

 

flag 파일을 읽어주는 sub_400826 함수 발견

sub_400826 함수를 실행시키는 것이 목적일 것이다.

 

 

2. 문제 해결 과정

메모리 구조는 위와 같다.

 

1 (v3이 가르키는 힙영역) malloc(8) 할당한 주소가 담김
   
malloc(8) 실제 주소  
   
2 (v4가 가르키는 힙영역) malloc(8) 할당한 주소가 담김

 

AAAA, BBBB 를 입력한 후의 메모리 모습

v4+1에 입력을 받으니 v4+1이 가르키는 0x602070 주소의 값이 바뀌는 걸 알 수 있음.

-> 원하는 주소의 값을 변경할 수 있을 것

-> got_overwrite 가능

 

우선 bof 를 통해 v4+1 에 exit_got 주소를 쓰고, fgets 입력 시 sub_400826 함수 주소를 입력하면 될 것 같음.

 

페이로는 다음과 같을 것이다.

"A"*dummy + exit_got 주소
sub_400826 주소
"A"*40 + 0x601068
0x400826

 

 

3. 익스플로잇

익스플로잇 코드

 

 

성공적으로 플래그를 획득하였다!!

'Wargame > HackCTF' 카테고리의 다른 글

[HackCTF] Unexploitable #1  (0) 2021.05.23
[HackCTF] UAF  (0) 2021.05.08
[HackCTF] Look at me (sysrop)  (0) 2021.04.23
[HackCTF] SysROP  (0) 2021.04.23
[HackCTF] ROP  (0) 2021.04.20
복사했습니다!