문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro |
int. . .. OOB . . .
Analysis
보호 기법 확인
Execution
이런식으로 원하는 크기만큼 malloc이 가능하고, free도 가능하길래 처음엔 uaf를 의심했었다.
Code
v3이 int이고.. if문에서 v3 <= 4이런식으로 거른 후에 vtable[v3] 을 실행시킨다.
한번 실행을 해보고 uaf를 의심하며 코드를 살펴봤었다.
한 번 malloc을 하고 free도 잘해준다. free하고 나서 heap_buffer를 1로 채워준다.
read나 write할 때도 heap_buffer가 1이면 free되었다는 의미로 예외처리를 잘 해줬었다.
Exploit Scenario
1. do_malloc 함수에서 size를 입력할 때, _ 함수 주소를 넣어준다.
2. vtable[-2]를 실행시킨다.
인덱스 변수가 int라서 vtable 범위 외에도 접근이 가능하다. (OOB)
size로 flag를 열어주는 함수인 _함수 주소를 주었다.
그리고 이때 스택상황을 살펴보면 아래와 같다.
vatable에 인덱스 0~4에 해당하는 함수 주소가 잘 저장되어 있다.
그리고 -2 인덱스 위치에 _ 함수 주소도 있다.
여기서 실행시키고 싶은 번호를 -2로 주면 _함수가 잘 실행될 것이다.
Get Flag!
'WAR GAME > pwnable.xyz' 카테고리의 다른 글
[pwnable.xyz] badayum 풀이 (pie leak, canary leak) (0) | 2021.06.02 |
---|---|
[pwnable.xyz] Dirty Turtle 풀이 (*) (0) | 2021.06.01 |
[pwnable.xyz] strcat 풀이 (OOB) (0) | 2021.05.29 |
[pwnable.xyz] strcat 풀이 (Double Staged FSB) (0) | 2021.05.25 |
[pwnable.xyz] Game 풀이 (strlen) (0) | 2021.05.22 |