-
0x24.SSG - fortune_cookie0x.CTF 2018. 11. 8. 18:02
0x24.SSG - fortune_cookie 파일 & 소스 : https://github.com/pwnwiz/CTF/blob/master/fortune_cookie seed와 관련된 문제를 풀어보고 싶어서 선택한 바이너리였다. 이 문제를 풀면서 srand와 rand를 예측하기 위해 ctypes를 써보았고 시드 값이 잘 안맞아서 고생을 좀 했다. 해당 바이너리를 보도록 하자. main 함수가 실행되면 v11이 저장되고 v10에 카나리가 저장되고, loadkey() 함수가 호출되고 seed를 time(0) 값으로 srand로 생성한다. loadkey() 함수는 /home/fortune_cookie/flag로부터 flag를 읽어와 전역변수 key에다가 저장한다. main 함수의 다음 부분에서는 while 문..
-
0x23.0ctf 2018 - blackhole0x.CTF 2018. 11. 6. 20:50
0x23.0ctf 2018 - blackhole 파일 & 소스 : https://github.com/pwnwiz/CTF/tree/master/blackhole return to CSU 기법을 공부하기 위해 잡은 바이너리인데 배보다 배꼽이 더 컸던 문제였다. 사실 csu 기법자체는 이해하는데 몇 분이 채 걸리지 않았지만 처음으로 mprotect도 사용해보고 seccomp 환경에서 쉘 코드도 제작해보았다. 쉘 코드의 위치로 rip를 잡는 것 까지는 금방했는데 쉘 코드를 어떻게 해야할지 몰라서 고민고민하다가 결국 인터넷에서 해당 부분을 참조해서 성공하였다. csu 기법 자체는 간단한데 init 부분에 다음과 같은 코드가 존재한다. 해당 부분은 연속적으로 pop을 6번 수행하며 그 후 ret한다. 위 부분만을 ..
-
0x06.Mac Nox 에뮬레이터 구동실패 해결방법0x.꿀팁모음 2018. 11. 1. 14:22
0x06.Mac Nox 에뮬레이터 구동실패 해결방법 Mac을 Mojave로 업데이트 하면서 Nox가 실행이 안되는 고초를 겪었다. 이는 Nox Emulator를 설치할 때 같이 설치가 되는 VirtualBox 버전에 대한 문제가 생겨 99%까지 진행한 뒤에 구동 오류가 발생하는 것 같다. 여러가지 삽질을 해보니 다음의 방법으로 해결이 되었다. 1. 최신 버전의 VirtualBox 설치2. VirtualBox app 실행3. Nox 실행 최신 버전의 VirtualBox를 설치하더라도 바로 Nox Player를 실행시키면 구동에 실패한다. Virtual Box 프로세스를 실행시키고 Nox Player.app을 실행하면 구동이 되더라.
-
0x22.CODEGATE 2015 - yocto0x.CTF 2018. 10. 31. 17:33
0x22.CODEGATE 2015 - yocto 파일 & 소스 : https://github.com/pwnwiz/CTF/tree/master/yocto 프로젝트를 진행하다보니 linux에 대한 감을 잃는 것 같아 RTDL을 공부할 겸 잡아본 바이너리 였다. RTDL이라는 명칭이 정확한 것은 아니나 eip를 dynamic linker로 re-direct 시킴으로 써 특정 문자열로부터 library의 주소를 얻어와 익스플로잇을 하는 과정을 통칭하는 것으로 return to dl_runtime_resolve라고 칭하기도 한다. dynamic linked 된 바이너리가 실제 함수의 주소를 가져오는 과정을 setvbuf() 함수를 통해 따라가보자. setvbuf의 주소인 0x80482d0으로 들어가면 jmp, p..
-
0x00.Android Rooting Check0x.Android 2018. 10. 12. 15:55
0x00.Android Rooting Check 안드로이드 프로젝트를 진행하면서 여러 어플을 까보다 보면 공통적인 루틴이 여러개가 존재한다. 그 중에 하나가 바로 사용자의 안드로이드 폰이 루팅이 되었는지 여부를 체크하는 부분이다. 사실상 rooting이라는 과정은 su 파일을 시스템에 추가하는 기능이다. 루팅을 통해 root 권한을 유저가 사용할 수 있도록 하는 작업인데 금융 어플과 같이 보안에 민감한 어플들은 side-effect를 우려하여 루팅 여부에 대한 검증 루틴을 추가하여 조금이라도 risk를 줄이고자 하기에 해당 부분에 대한 체크가 이루어질 수 밖에 없다. 한 어플의 rooting 체크 루틴인데 PATH를 기준으로 ":" 로 slicing을 진행하며 su 파일의 존재여부를 확인하는 방식이다. ..
-
CHAPTER 3.Viva_La_Vida HowToSolve0x.STORY_TELLER/HowToSolve 2018. 9. 3. 18:52
CHAPTER 3.Viva_La_Vida HowToSolve 파일 & 소스 : https://github.com/pwnwiz/STORY_TELLER/tree/master/STORY_0x02 글로벌 포인터로 청크들을 관리하는 청크의 주소를 보면 0x603100인데, root_cavalry청크에 대한 정보가 차례대로 저장되어 있음을 알 수 있다. 0x603130의 주소는 global_cavalry 청크인데 들어가보면 첫 번째 root와 knight1 등에 대한 구조체의 주소를 관리해주는 청크이다. root_cavalry의 첫번째 포인터를 참조해보면 name에 대한 정보가 들어가있고, 그 다음에 salary에 입력한 값이 들어가있으며, smallbin(0x100)을 할당한 영역이 차례대로 들어가있다. 이곳을 ..
-
CHAPTER 3.Viva_La_Vida MakingFilm0x.STORY_TELLER/MakingFilm 2018. 9. 3. 18:49
CHAPTER 3.Viva_La_Vida MakingFilm BoB7기 내부 CTF 문제로 제작한 heap overflow 문제이다. 워낙 잘하는 사람이 많기 때문에 어떤 방식으로 제작할까를 고민해보다가 여러 구조체를 겹쳐 할당하여 포인터 형식으로 참조하도록 설계하였고, 그 과정에서 unsorted bin과 fastbin을 활용하여 prev_inuse flag를 해제하는 것과, double free를 통한 consolidate, overflow를 통한 prev_size 오버라이트, uaf를 통한 fake chunk 생성을 통한 unlink로 구조체를 덮어서 got_overwring를 통하여 릭 및 익스가 가능하다. 글로벌 변수는 다음과 같이 구성되어있다. cavalry는 기사의 name, salary, ..
-
0x21.teamsik 2016 - StrangeCalculator0x.CTF 2018. 9. 3. 18:42
0x21.teamsik 2016 - StrangeCalculator 파일 & 소스 : https://team-sik.org/ahe16-challenges/ 안드로이드 관련 플젝을 진행하기에 앞서 CTF 문제 하나를 풀어보았다. 메니페스토를 통해 activity는 하나이고, MainActivity부터 분석을 시작하면 된다는 사실을 알 수 있다. 파일의 구조는 다음과 같다. MainActivity, Parser, R 클래스가 존재하는데 그 중에 MainActivity를 들어가보았다. 해당 부분을 보면 사용자로부터 입력받은 값이 v2변수라는 것을 알 수 있는데, 그 값은 Parser에서 eval을 수행한다. Parser를 확인해보았더니, 입력값에 대한 검증 작업을 수행하는데, v2 > 100일 경우에 2가지를..