본문 바로가기

System Hacking/CTF

B-Sides Vancouver 2015 - Ownable 400


왜 Ownable 이라고 되있는건지는 모르겠다

NX만 적용되어있다.



Character를 재설정하는 과정에서, read_data 함수 내부에서 오버플로가 발생한다.


하지만 아래와 같이 \n, \x0 ~ \x1f, \x7f 은 필터링 되는 부분이므로 이부분을 피해서 입력이 가능하다.


필터링을 우회하는 부분은 이부분을 통해 해결헀다.

먼저 위 그림(Generate_dungeon함수 내부)에 보면, 던전의 레벨을 입력하는 부분이 있는데

unsigned __int8 자료형인 v6 변수에 입력을 받는다, 하지만 다음 조건절에서는 (char)형으로 형변환되므로

255(0xFF)를 입력해주면 조건절을 통과할수 있다.

그리고 mmap을 통해 할당되는 메모리는 0x2015000 + 255 * 0x1000 이 된다. 


0x2015000 ~ 0x226A000 까지 범위가 되므로 필터링되는 범위를 벗어날 수 있다.

게다가 이부분에 대한 권한은 7로 rwx, 읽기, 쓰기, 실행 권한까지 모두 설정된다.


이부분에 쉘코드와, 쉘코드의 주소를 올려두고 아까봐둔 오버플로가 발생하는 함수를 이용하여

오버플로를 발생시키고 진행시켜보면 시작함수로 보이는 함수의 에필로그가 보인다.

일반적인 함수의 에필로그 과정과는 다르게 생겼다.



쉘코드를 통하여 공격할 것이므로 ret를 조작하기 위한 값을보면


mov ecx, [ebp-4]    -> lea esp, [ecx-4]     ->   ret로 이어진다.

일종의 더블포인터와 비슷하게 진행된다.

그러므로 쉘코드를 올릴때 쉘코드도 같이 올려둔 후에 익스플로잇








wby-23859086c3e87a4beb04b4f920b7ed49d407326e.idb


wby-23859086c3e87a4beb04b4f920b7ed49d407326e


'System Hacking > CTF' 카테고리의 다른 글

CodeGate 2015 Quals - Sokoban  (1) 2015.05.15
Codegate 2015 - Bookstore  (2) 2015.03.21
Codegate 2015 푼거 + 풀다만거 정리  (0) 2015.03.16
CSAW 2014 pwn_500 xorcise  (0) 2015.01.07
[CodeGate_2013] pwn500 kpop_music  (0) 2015.01.05