WAR GAME/pwnable.xyz

[pwnable.xyz] Jmp table풀이 (OOB)

jir4vvit 2021. 6. 1. 21:48
문제 풀이 환경 : ubuntu 18.04
사용 툴 : IDA 7.5 pro

int. . ..  OOB . . . 


Analysis

보호 기법 확인

Execution

이런식으로 원하는 크기만큼 malloc이 가능하고, free도 가능하길래 처음엔 uaf를 의심했었다.

Code

main

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!