목록분류 전체보기 (101)
ipwn
제목대로 일단 본선에 진출했다. 예선 결과가 많이 아쉽긴 했지만, 그래도 본선 메일이 날라오니 기분이 엄청 좋아졌다. 아마 이제 곧 페이스북에 공지가 될 것 같다. 덩달아 영재원도 같은 날 합격했다고 공지돼서 기분이 엄청 좋았다. 본선에서 수상하는 건 많이 어렵겠지만, 한 문제라도 풀 수 있도록 노력해야겠다. 일단 앞으로는 학교 내신도 챙기고, 해킹 공부도 틈틈히 할 수 있도록 해봐야겠다. (이 기세를 몰아 공부를 열심히 해서 BOB도 되면 엄청 좋겠다.)
드디어 코드게이트 2018이 진행됐다. 결론만 말하자면, 공식적으로는 아직 본선 확정 안나서 모르겠지만 순위권에 오르지 못했다. 즉 예선 탈락이다. (추가 합격이 난다면 모르는 얘기겠지만) 결과가 이렇게 나서 솔직히 나 자신에게 좀 화도 많이 났다. 동점자가 많아서 빨리 풀었으면 충분히 20등대 초반으로 본선 가는 상황에서 쓰잘대기 없는 걸 하느라 7시간을 날려먹기도 했고 대회 끝나고 한 문제 더 풀었는데 일찍 풀었으면 10등대 초반으로 본선이었는데 푼 시간이 딱 9시 10분인 것도 그랬고.. 푼 문제는 겨우 2문제이다..ㅠㅠ 그러니까 결국에는 모든게 내 실력이 부족한 탓이다... 포너블 문제 최대 난이도가 ROP였다고 들었는데, (사실인지는 모르겠음) ROP만 주구장창 공부해놓고 왜 제일 쉬운 문제에서..
이번에 풀 wargame은 FTZ이다. 사실 이전에 썼어야 했는데 하다보니 그냥저냥 Lord Of Bufferoveflow로 바로 넘어가버려서 이제야 쓴다. 이전 level들은 trainer level에서 배운 내용을 복습하는 느낌이기에 바로 level11부터 시작하도록 하겠다. 일단 FTZ의 환경은 기본적으로 LOB와 다르게 ASLR이 걸려있다. 즉 메모리 일부 값들이 프로그램 매 실행시마다 어지럽게 바뀔 것이다. 일단 접속을 해보도록 하겠다. ID : level11 PASSWORD : what!@#$?[level11@ftz level11]$ ls -ltotal 28-rwsr-x--- 1 level12 level11 13733 Mar 8 2003 attackme-rw-r----- 1 root level..
이번에 푼 문제는 luckyzzang 문제다. 바로 보호기법부터 확인해보겠다. NX는 걸려있지만 canary는 걸려있지 않다. 그렇다면 IDA로 한 번 분석해보겠다. port 7777번으로 nc를 열어준다. (ssh 포트를 7777로 바꿨었는데 이거 때문에 다시 바꿨다...) 한 번 접속해서 뭐하는 프로그램인지 알아보자. MSG를 입력하고 바로 끝을 낸다. 간단한 ROP문제일듯 하다. 다시 분석해보도록 하겠다. 연결이 성공적으로 된다면, Client has connected successfully :)라는 문자열을 바이너리를 실행한 화면에 띄워준다. 그리고 여기서 BOF가 터지는 것을 알 수 있는데 v2 % 100의 값이 적당히 커줘야 성공적으로 ROP를 실행할 수 있을 것이다. 최대 0x401 + 10..
이번에 풀 문제는 CODEGATE 2014 출제 문제인 nuclear이다. 난이도는 생각보다 크게 어려운 편은 아니었던 것 같다. 가장 먼저 이 문제를 풀기 위해서는 THIS_IS_NOT_KEY_JUST_PASSCODE파일이 필요하다. 파일 안의 내용은 대충 친구한테 적어달라고 했다. 바로 보호기법을 확인해보자. NX가 걸려있지만 canary가 걸려있지않다! 귀찮게 leak하는 과정을 거칠 필요가 없어진 것 같다!! IDA로 분석해보자. 일단 포트는 1129로 실행된다. 한 번 바이너리를 실행시켜 보겠다. ??? 뭐 하는 프로그램인지 도무지 모르겠다. 한 번 IDA로 분석해보겠다. 123456789101112131415161718192021222324252627282930313233343536373839..
이번 문제는 CODEGATE 2017에 나왔던 babyMISC문제이다. github.com/ctfs에서 찾아보니 pwn분야에 들어가있었는데 그냥 말그대로 MISC인 것 같다. 난이도도 생각보다 꽤 쉬웠다. 바로 IDA로 코드를 분석해보겠다. main함수에서 stage별로 함수를 호출하는 것 같다. 바로 함수들을 첫 스테이지부터 확인해보겠다. 일단 s의 문자열은 bash64로 encoding이 되어있고, scanf으로 입력을 받는다. 그리고 입력받은 문자열과 s는 달라야하고, 둘의 길이는 같아야 한다. 이건 base64 충돌을 이용하면 간단히 해결할 수 있는 문제이다. 맨 마지막 g부분을 h~j로 바꿔주거나, =부분을 A로 바꿔주면 스테이지가 통과된다. 2스테이지는 input을 두 개 입력받는다. 첫 번째..
이번에 푼 문제는 CODEGATE 2014에 나왔던 문제인 angry_doraemon이다. checksec를 이용해서 바이너리에 어떤 보호기법이 걸려있는지 확인하겠다. NX와 canary가 있는 것을 확인할 수 있다. 이제 바로 IDA로 분석하겠다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061void __cdecl __noreturn main(){ int optval; // [esp+28h] [ebp-C8h] socklen_t addr_len; // [esp+2Ch] [ebp-C4h] int v2; // [esp+30h] [ebp-C0h] int ..
이번에 푼 문제는 babypwn 문제이다. 작년 CODEGATE 2017에 출제됐던 문제이다. 여담이지만 이번 CODEGATE본선에 꼭 진출하고싶다.. 늦은 감이 없지않아 있긴 하지만.. 아무튼 IDA로 바로 babypwn 바이너리를 분석해보겠다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657unsigned int __cdecl main(int a1, char **a2){ socklen_t addr_len; // [esp+20h] [ebp-30h] int optval; // [esp+24h] [ebp-2Ch] int v5; // [esp+28h] [ebp-28h]..
이번에 풀 문제는 rop입문으로 유명한 PlaidCTF의 ropasaurusrex이다. 이 문제는 말그대로 rop로 해결하는 문제이다. 일단 어떤 행동을 하는 binary인지 확인해보자. 123pwndbg@ubuntu:~/tmp$ ./ropasaurusrex asdfghjklWIN 실행하니 갑자기 내가 이겼다고 한다. 음 감이 안온다. 한 번 ida로 까보자. 알고보니 어떤 함수를 실행시키고 그냥 win을 출력해주는 코드였다. 그럼 저 함수에 취약점이 있을 것이다. 한 번 저 함수를 살펴보도록 하겠다. 보아하니 buf공간이 0x88의 크기만큼 할당이 되어있는데, 0x100만큼의 입력을 받는다. 여기서 Buffer Overflow가 발생한다는 것을 알 수 있다. 그렇다면 공간은 | buffer(136) |..
이번 단계는 마지막 전의 단계 nightmare단계이다. 바로 복사본을 만들고 파일들을 살펴보겠다. 12345[nightmare@localhost nightmare]$ ls -ltotal 36-rwsr-sr-x 1 nightmar nightmar 13398 Jan 18 07:49 xaviu1-rwsr-sr-x 1 xavius xavius 13398 Mar 30 2010 xavius-rw-r--r-- 1 root root 1019 Mar 30 2010 xavius.c cs 생각보다 colorscripter이 훨씬 편한 것 같다. bash도 지원해줄줄은 몰랐다. 아무튼 xavius 파일과 xavius.c 코드가 있다. 코드를 읽어보겠다. 123456789101112131415161718192021222324..