목록전체보기 (11)
binee::
defcon ctf는 언제나 어려웠는데, 이번에도 어렵게 느껴졌다. 그렇게 꼬아놓지도 않았는데, 엄청 고생한 거 같다. baby-re는 최근에 애용하고 있는 z3를 잘 이용하면 풀 수 있는 문제이다. 풀고나서 보면 정말 간단한 문제이다. 총 13번의 입력을 받는다. 그리고 결과 값으로 wrong 또는 키값을 출력하는데, 키값을 출력하는 조건을 확인하는 CheckSolution함수가 IDA로 디 컴파일이 안 된다. 오류 메시지는 function frame is wrong이라고 뜬다. 그래서 graph view 모드로 확인해보니까 뭔가 엄청 길다... 그런데 핸드레이 못할 만큼 긴 것은 아닌 거 같아서 핸드레이로 풀려고 했는데. 중간에 쓰레기 값때문인 것으로 추측하고 해서 제거를 시도했다. 아래 처럼 쓰레기..
TU CTF 2016라고 처음 참가해보는 대회인데,개인적으로 실력에 알맞았던 대회였다.딱 대학교 동아리가 참가하기 좋은 난이도 였던 것 같다. CTF 준비하는 팀원들도 적당한 난이도에 재미를 느끼면서 풀었던 것 같다.배점이 큰 500점 2문제를 모두 풀어서 만족스러운 대회였다. 팀원들이 맘잡고 했으면 10위권 안에 들었을거 같은데,끝까지 하지 않았던 점이 아쉽다... 위에는 푼 문제들이고, 나는 pwn과 rev만 풀었다.pwn과 rev 문제 중에서 영양가 있는 문제만 풀이를 쓸 예정이다. 먼저 Wo0부터 문제 풀이를 할건데,Wo0는 총 3문제로 나뉘어져있다.동일 소스코드지만, 취약점이 발생하는 소스가 조금씩 다르다.점수가 올라 갈수록 exploit 하기 쉬운 취약점을 수정하여,다른 취약점을 활용해야하는 ..
낮은 스코어 답게 쉽게 풀었지만,환경변수 debug를 이용하지 않았으면 빨리 풀지 못 했을 거 같기도 하다.use after free 문제이다. Binary 분석 unix_time_formatter 바이너리를 확인 해보면 unix_time_formatter: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=5afd38988c61546c0035e236ce938af6181e85a6, stripped 64bit elf 파일이고 특이한 점은 없다. Program Logic 분석. 아래는 main함수의 hex-xay 결과다. 위 그림처..
plaid CTF를 3년만에 다시하게 되었다. 3년전에는 pwnable 문제를 하나도 못 건드렸는데 이번 대회는 혼자서 pwnable 두 문제 푼 것에 만족한다. fixed point 문제도 접근 방법은 맞았는데 끈기있게 하지 않은 게 잘 못이었던 것 같다. butterfly 문제는 감탄하면서 풀었다. 보통 buffer oveflow를 할 경우 ebp나 esp를 변조하거나 OOB를 사용하는 것이 일반적이다. 그런데 butterfly는 코드영역의 값을 수정해서 esp를 조작하는 아이디어를 낼 줄은 몰랐다. 덕분에 6시간 동안 hex-ray코드만 보다가 어셈블리 코드에서 코드영역의 점프문 값을 수정하려고 하다가 add esp, 48을 수정하면 eip를 변조 할 수 있다는 것을 뒤 늦게 알아버려서 정말 늦게 ..
pwn3는 마지막 문제인 만큼 시간이 많이 걸린 문제였다.보통 CTF에서 낮은 난이도나 중간 정도 난이도 문제로 이런 문제를 많이 내는데,IDA pro Hax-Ray가 해석을 잘 못해서 좀 귀찮았던 케이스였다. 푸는 동안 2016 codegate watermalon 과 유사하다고 느꼈고watermelon과 좀 다른 차이점은 문제가 좀 지저분하게 냈다.강제로 취약점을 만들려고 지저분하게 만든 거 같았다.덕분에 알고리즘 로직을 이해하는데 3시간은 쓴거 같다. Binary 분석 pwn3 바이너리를 확인 해보면 pwn3: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.24, Bui..
pwn2는 remote buffer overflow 정석 문제였다.개인적으로 remote buffer overflow 연습용 문제로 딱인 것 같다.이 문제도 마찬가지로 워밍업으로 가볍게 풀었다. Binary 분석 pwn2 바이너리를 확인 해보면 pwn2: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=4b6d53bc9aca0e73953173f153dc75bd540d6a48, not stripped 위와 같이 32bit elf 파일이고, stack canary가 없는 것을 확인 할 수 있다.이 문제도 마찬가지로 buf..
4박5일동안 진행하는 sCTF에서 pwnable 문제가 총 3개가 나왔다.난이도는 상당히 쉬운 편이었고, 독창성이 있거나 기발한 문제는 없었다.pwnable에 기본기만 가지고 있다면 시간을 투자하여 충분히 풀 수 있는 문제들이었다. pwn1은 창의적이고 기발한 아이디어를 가진 문제는 아니었다.가볍게 워밍업으로 푸는 문제로 풀이도 가볍게 쓰려고 한다. Binary 분석 pwn1 바이너리를 확인 해보면 pwn1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=4b1df4d30f1d6b75666c64bed078473a4a..
리얼 버그헌팅에서 발생 가능성이 0%에 가까워서 고대 유물이 되버린 FSB기법이라고 하여취약점 공부를 시작했을 당시 무시하고 넘어갔었다. 물론 리얼 버그헌팅을 할 때 FSB를 찾을 수 없겠지만, CTF에서는 당골로 나오는 기법이므로 CTF를 준비하는 사람이라면 필수로 공부해야한다. 대회 당시에 FSB에 대해서 대략적인 개념만 알고 있어서, stack canary 우회 할 때나 써야지 하고 막연하게만 생각하고 있었다.그래서 FSB를 이용하면 기본적으로 dtors영역을 사용하는 것을 모르고 있었다.hackerschool 홈페이지에 FSB자료를 찾아보면 FSB를 활용하는 가장 기초적인 방법이 dtors영역을 수정해서 프로그램이 종료 될 때 해당 dtors영역에 있는 주소를 참조해서 실행한다는 문서가 널리고 널..
codegate 2016 manager 문제인데, 대회 당시 확인도 안해본 문제였다.해당 문제를 봤더라도 배경지식이 부족해서 풀지 못 했을 것 같다. 이 문제를 풀기위해서는 OS Command Injection과 Reverse Connection의기초 지식을 가지고 있어야 한다. 저 두 가지만 알고 있으면 exploit 과정은 쉽다. Binary 분석 manager 바이너리를 확인 해보면 manager: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=a4698eb00a40f6bd349108bb366744948db63d06, ..
2016 Codegate 대회 당시에 old school에 올인하는 바람에 재대로 보지도 못했던 문제인데,대회 끝나고 확인 해보니 취약점도 쉽게 찾을 수 있고, exploit 과정 중 어려운 점도 없는 문제였다. 다음 대회 때는 포기 할 건 빨리 포기하고 풀 수 있는 문제에 전념해야 될 것 같다. pwnable 시작하면서 leak을 이용해서 문제를 푸는 방법은 알고 있었지만,실제로 직접 leak을 해서 offset을 구한 것은 처음이여서 대회 당시에 잡았다 해도쉽게 풀지 못 했을지도 모른다. 따라서 이번 writeup을 작성하면서, leak에 대한 개념도 완전히 잡을 수 있었고, leak을 통해 얻은 주소로 offset을 구하는 여러 방법에 대해서도 알 수 있었다. 요근래 CTF 관련 writeup을 보..