0x.CTF
-
0x30.HITB-XCTF 2018 - gundam0x.CTF 2019. 4. 17. 02:08
파일 & 소스 : https://github.com/pwnwiz/CTF/tree/master/gundam pwnwiz/CTF CTF. Contribute to pwnwiz/CTF development by creating an account on GitHub. github.com 해당 문제는 tcache가 적용된 버전이기 때문에 Ubuntu 18.04에서 익스를 진행하였다. 순서는 간단하게 tcache를 채우고 libc를 leak한 뒤, hook을 덮는 방식으로 진행하였다. tcache는 보안이 아닌 성능을 위하여 구현되었기 때문에 로직상 취약점이 존재하는데 free여부를 확인하지 않는다는 점이다. 이 점을 악용하면 double free등을 통하여 heap을 leak하거나 tcache의 smallbin ..
-
0x29.CODEGATE 2017 - dart-master0x.CTF 2018. 12. 27. 23:16
0x29.CODEGATE 2017 - dart-master 파일 & 소스 : https://github.com/pwnwiz/CTF/tree/master/dart-master 취약점을 찾고도 익스부분때문에 후.. ㅋㅋㅋ 어쨌든 이제야 라업을 쓰게 된다. 그리고 이 말은 즉슨, SSG 워게임을 올클했다는 것을 의미한다. 처음 바이너리가 시작되면 ID와 PASSWORD를 입력받고, 다음의 4가지 옵션중 하나를 입력받는 부분으로 진입을 하게 된다. 그리고 해당 부분이 실행되기 전에 아래의 함수가 호출이 된다. 해당 함수를 보면 vtable을 구성하는 부분인 것같은데 해당 부분을 따라 들어가면 다음의 함수 주소들이 존재한다. 그리고 해당 함수들의 위치는 특정 함수들을 호출할 때 offset으로 사용된다. 즉, 위..
-
0x28.BoB ctf - FMbug0x.CTF 2018. 12. 15. 19:56
0x28.BoB ctf - FMbug 파일 & 소스 : https://github.com/pwnwiz/CTF/tree/master/FMbug 플젝이 끝난 오늘, 자다가 팀원 한놈에게 전화를 받았는데 자꾸 디버거가 안붙는다고 도와달라고 해서 갑자기 받아서 테스트하다가 걍 푼 문제이다. 바이너리는 간단하다 seed를 v6에 저장하고 input을 3번받으며 find key이후 마지막으로 read로 입력을 받고 해당 값이 동일하면 system(/bin/sh)를 호출한다. 하지만 뭐 어셈단위로 보면 ctypes를 사용하여 추측을 해서 값을 때려넣어도 결국 lea와 mov로 값을 가져오기 때문에 해당 부분에 대한 변조만으로는 익스를 하기 어렵다. 그래서 포맷스트링 취약점이 있길래 그걸로 got overwrite를 ..
-
0x27.Whitehat Quals 2017 - hacking_team_manager0x.CTF 2018. 11. 29. 17:19
0x27.Whitehat Quals 2017 - hacking_team_manager 파일 & 소스 : https://github.com/pwnwiz/CTF/tree/master/hacking_team_manager 동아리 내부 워게임에 C++ 문제는 나중에 풀려고 미루고 미루고 또 미루다가 이제는 풀어야된다 싶어서 잡은 바이너리였다. 역시 C++은 분석이 너무 싫다. 바이너리가 생각보다 커서 꽤 오랜 시간을 분석에 할애하였다. Main 함수를 보면 메뉴가 1,2,3이 존재하고 메뉴를 호출하기 전에 sub_12D0가 호출이 된다. 해당 부분에서는 큰 구조체에다가 다음의 문자열을 가리키는 포인터를 담는다. 그리고 사용자에 대한 nick_name과 team_name에 대한 정보를 입력받고 al+328의 위치..
-
0x26.WITHCON 2017 - combination0x.CTF 2018. 11. 22. 00:29
0x26.WITHCON 2017 - combination 파일 & 소스 : https://github.com/pwnwiz/CTF/tree/master/combination 멋모르고 풀 때 엄청 어려웠던 문제, 지금 보니 정석 처럼 오히려 잘 보이던 문제. 푸는 방식이 꽤 존재하는데 그 중에서 출제자 형의 의도인 house_of_einherjar로 풀어보기로 하였다. 사실 기억에 의하면 바이너리가 c++인 줄 알았는데 다행히 c여서 금방 분석이 가능했다. 바이너리는 PIE가 걸려있고, NX, ASLR이 다 걸려있다. 어쨋든.. 메인 함수를 보면 1,2,3,4,5 및 46 옵션이 존재한다. 가장 먼저 malloc 옵션을 들어가면 사용자로부터 size값을 입력받는데 그 크기는 144 ~ 512 사이이다. 해당..
-
0x25.SSG - easy_linux_reversing0x.CTF 2018. 11. 9. 20:34
0x25.SSG - easy_linux_reversing 파일 & 소스 : https://github.com/pwnwiz/CTF/tree/master/easy_linux_reversing 포너블만 풀다가 쉬어갈겸 잡았다가 하드코딩하면서 한 글자를 빠뜨려 꽤 오랜시간 의미없는 삽질을 했던 문제이다. 문제는 간단하다. 사용자로부터 입력을 받고 해당 입력의 길이에 따라 인코딩 루틴을 진행한다. 사용자로부터 입력받는 문자열과 길이에 따라 값이 변경되니 decode_it.txt의 문자의 개수만큼 for문을 돌리며 s[i]을 역연산 하는 방식으로 진행하였다. 익스플로잇 코드v8 = ['C', 'f', 'D', 'Z', 'q', 'B', 'r', 'p', 'R', 'W', 'j', '1', 'z'] test = [2..
-
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한다. 위 부분만을 ..