1. 문제
입력을 두 번 받고 끝낸다.
총 네 번 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 가 두 번 발생한다.
sub_400826 함수를 실행시키는 것이 목적일 것이다.
2. 문제 해결 과정
1 (v3이 가르키는 힙영역) | malloc(8) 할당한 주소가 담김 |
malloc(8) 실제 주소 | |
2 (v4가 가르키는 힙영역) | malloc(8) 할당한 주소가 담김 |
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 |