본문으로 바로가기

Hacklu 2014 oreo Write Up

category 해킹/Write Up 2017. 5. 3. 19:33

0. Introduce

정말 일주일은 잡은 문제인거같다.. 취약점은 찾았는데 공격할 수 있는 아이디가없어서 결국에는 라업을 검색해봤는데 라업도 많이없고 조금 다른내용을 다루는 라업이 대부분이라 풀기 너무 힘들었지만 결국에 메모리를 계속 보다가 찾아냈다.. 덕분에 house_of_spirit의 개념이나 이용에대해서 자세히 알게되었다.


1. Binary

32bit 바이너리에 카나리와 NX가 걸려있다. 사실 스택을 건드릴 일이 없어서 보호기법은 상관이 없다.


메뉴는 다음과 같다.

1) Add new rifle

- malloc 56byte

- malloc pointer + 25 지점부터 이름을 입력받음 (56byte)

- mllaoc pointer 지점부터 설명을 입력받음 (56byte)

- 이전 malloc pointer를 malloc pointer + 52부분에 넣음


2) Show added rifles

- malloc pointer + 52를 기준으로 현재 라이플과 이전 라이플들의 이름과 설명 출력


3) Order selected rifles

- malloc pointer + 52를 기준으로 현재 라이플과 이전 라이플 청크 전부 free


4) Leave a Message with your Order

- bss에있는 0x0804A2A8에 128바이트 입력받음.


5) Show current stats

- free한 횟수와 add한 횟수 그리고 leave a message안에 내용을 출력함.


6) Exit!

- return 으로 나감.


2. Vulnerability

- 라이플을 추가할 때 이름을 입력받는 부분을 보면 25지점부터 56바이트 입력받으므로 heap overflow가 발생한다.

- heap overflow가 발생해 malloc pointer + 52값을 수정할 수 있으므로 수정하고 2번메뉴로 원하는 모든 메모리에 값을 leak할 수 있다.


3. Exploit

( 변수 이름들은 임의로 설정함 )

메모리 주소를 알며, 자유롭게 입력할 수 있고, 그 메모리주소를 해제(free)할 수 있으면 house_of_spirit의 조건이 성립한다. 

이 바이너리에 경우 leave_msg_val에 86바이트를 자유롭게 쓸 수있다. 그러므로 house_of_spirit을 이용하면 leave_msg_val로 malloc할당을 할 수 있다. 하지만 그렇게 해도 할 수 있는것이 없다. 그래서 처음에는 got부분에 chunk크기가 될만한 메모리값들을 찾아보다가 결국 못찾고 계속 계속 보다가 new_count값을 확인하였다. 

new_count는 새롭게 라이플을 추가할때마다 값이 증가하는데, 이것을 현재 함수에서 할당하는 청크크기(0x38)만큼 증가하게 시키고 leave_msg_val 부분을 입력해서 조작된 청크의 다음청크가 있는것처럼 조작해준다. 그런 다음 heap overflow로 malloc pointer + 52를 new_count로 바꿔주고 free해주면 free가 성공적으로되서 다음 malloc을 할 때는 new_count + 0x4부분부터 쓸 수 있게된다.

그렇다면 leave_msg_val의 포인터를 put_got로 바꾸고 put_got를 leak한 libc_base를 기준으로 one_shot가젯을 찾아서 쉘을 획득했다.

실제 CTF에서 libc가 주어지지 않았더라도 libc의 특정주소 두개를 leak할 수 있으니 libc를 알아내서 one_shot가젯을 쓸 수 있을 것 이다. 뿐만 아니라 system_address를 got에 overwrite해서 풀 수도 있다.


 Full Exploit Code

(https://github.com/LYoungJoo/CTF-Write-Up/blob/master/2014_Hacklu%20Write%20Up/oreo.py)


'해킹 > Write Up' 카테고리의 다른 글

Pwnabletw hacknote Write Up  (0) 2017.05.12
Codegate 2017 petshop write up  (0) 2017.05.07
DEFCONCTF Qualifier 2017 Write Up  (0) 2017.05.02
Pwnabletw orw Write Up  (0) 2017.04.05
Pwnabletw start Write Up  (0) 2017.04.04