Defcon에 있는 pwnable 영역의 문제들은 대회 이후에 꼭 풀어보고자 하였으나실력 부족이 처참히 느껴져 천천히 풀어보기로 했었는데 지금부터 하나씩 다시 풀어보려고한다. peropdo라는 문제였는데 statically linked 바이너리에 stripped라 분석하는데 힘이 들었다.예전에 한번 봤던 write-up 에서 open함수를 srop를 이용하여 exploit 했던 것이 기억나 그쪽으로 방향을 잡아서 풀어보았다.방향성을 미리 잡고 풀게된 문제지만 여러모로 배우게 된 것이 많은 문제인 것 같다. 우선 바이너리의 보호기법을 체크해보았다.보시다싶이, NX말고는 바이너리 자체에는 보호기법이 걸려있지 않다.서버의 ASLR + NX니까 보호기법자체는 별로 문제가 되지 않을 것같다. 32bit binar..
[ 발영어 연습 -_- ㅋㅋ ] This is interesting Reversing Challenge.Now i describe why it is interesting. This binary is 32-bit ELF format, and dynamically linked.And this binary is upx-packed.So i unpacked it -> [ upx -d move ] While i analyze this binary, i found a something interesting.It use movfuscator( some obfuscator ). What is the movfuscator? You can get more informations in here : https://github..
cgc라는 영역에 흥미가 생겨서 조금씩 공부를 해볼려 한다.SECUINSDIE CTF 2016에 나왔던 cykor_00002라는 문제이다. cgc파일은 일반적인 unix환경에서는 동작하지 않으며, file 명령어를 통해 볼려해도 data라고만 나오는데식별불가능한 헤더를 가지고있어서 그렇다. vagrant라는 것을 통해 cgc를 구동할 수 있는 환경을 만들어주어야 한다.또한 서버에 PoV( Proof of Vuln )을 xml로 전송해주어야 하는데, 현재는 서버가 닫혀있어서 플래그를 보지는 못한다. 바이너리를 동작시켜보면 일단 name을 받아주고 어떤 메세지를 입력받고 끝난다.SIGSEGV는 보통은 입력버퍼의 문제에서 발생하니까 입력받는 어딘가가 취약할 가능성이 높다.일단 바이너리를 분석해보자. 보면 알 ..
SECUINSIDE CTF ohce Write-up 어떤 식으로 컴파일하면 저렇게 함수가 구성이 되는진 모르겠지만...보통 main을 부르기전인 init과정의 _start 함수부분이 사실상 main함수의 역할을 하도록 만들어진 바이너리이다. 실행시켜보면 사실 크게 별거는 없다. [ Binary Protection Check ] 아무런 보호기법이 걸려있지않다.그러면 server의 ASLR이 아마 전부일 것이다.Shellcode를 통해 문제를 풀어야할 가능성이 크다. 메뉴가 3개 존재하는데, 1번은 있는 그대로 write함수를 통해 출력해주고 2번은 내가 넣은 문자를 거꾸로 돌려서 write함수를 통해 출력해준다. 그리고 3번은 exit함수를 통해 종료한다. Binary Ninja라는 static analy..
다른 문제들 풀다가 멘탈이 나가서 이 문제도 풀지는 못했었다.이상한 곳만 패치해서 돌려주고..... 저녁겸 야식으로 치킨시켜놓고 같이 푸시던 형은 치킨이 오실때까지 이거 게임 순수하게 플레이하셨다. ( 15분넘게 살아있으니까 이젠 죽기 아깝다고... ) 치킨먹으면서 죽지않고 점수를 따게 만들면 안될까? 라고 생각은 했는데체력도 바닥나고 아무 생각을 할 수가 없어서 생각만 했다;; 그리고 분석하기 전에 처음에 그냥 딱 플레이했을 때, stage 어느정도선에서 스스로 죽어줘야하는 줄 알았다.한 stage 10 정도면 충분하지 않을까 생각해봤지만 ㅋㅋㅋ 아니더라 ㅋㅋ 플레이해보니 일단 속도가 너무 답답해서...속도를 패치해주기도하고...먹이 나오는곳이 답답해서 먹이 나오는 위치를 패치해주기도 했는데.... 오..
대회 중에는 못풀었다.멍청하게 z3 solver를 이용하여 수식을 풀어주면 되는데인간의 머리로 이걸 역연산을 왜 할려했을까?.... 하다 안되서 자기전엔 9자리 key를 브포걸어놓고 잤다...... ㅋㅋㅋㅋㅋㅋㅋ 우선 zip파일로 나오며 prob와 encrypt라는 파일이 2개 있다.prob는 실행바이너리이고 encrypt는 암호화된 값이 있으며 이진수로 구성되어 있다. 바이너리를 실행시켜보면? input값을 받는데, 내 input을 확인하라고 한다.바이너리를 ida로 열어서 분석해보자. 처음 부분에서 input을 받는데길이가 9글자인 key값이여야 한다.key값은 현재 모르는 상태이고 9글자 key를 일단 아무거나 입력하면 length를 입력받는다.일단 위의 소스를 보면 알 수 있듯이, 길이는 200보..
apk 리버싱은 처음이다....자바조차 모르는 나에게 좋은 시작점이 될련지.....어쨋건, food.apk라는 파일이 하나 주어지는데, apktool로 풀어주게되면 xml파일을 볼 수 있다.어떤 퍼미션을 요구하는지나, mainActivity가 어디인지를 알 수 있기 때문에 매우 중요한 파일이다. 위의 사진을 보아하니 FoodActivity가 Main지점이란 것을 알 수 있다.그러면 이제 zip형태로 apk파일을 압축을 풀어주고, dex파일을 jar로 변환하여 소스를 분석해봐야 한다. 정말 별거 없이 cook라는 이름의 라이브러리를 로딩한다.아마 lib폴더 내의 native-library인거 같은데 lib폴더에 들어가보면armeabi, x86이라는 이름으로 2개의 폴더가 있고각각에 libcook.so라는 ..
angr연습 겸 이번 codegate예선에 나온 간단하지만 귀찮은 easy crack101이라는 문제를 풀어봤습니다. 문제 이름 값을 하는거 같네요정말로 101개의 바이너리가 있습니다.바이너리는 전부 동일하게 argv[1]을 필요로하며, 이것이 key값으로 사용됩니다.알맞은 key값을 넣을경우, 성공이라고 출력해줍니다.다양한 풀이가 있지만, 저는 angr를 통해 풀건데, 동시에 오랜만에 쉘 스크립트도 같이 사용해볼겁니다. 101개의 바이너리가 같은 동작을 하지만, 전부 같은 주소에서 동작하는건 아니기때문에angr의 explore모듈의 find값을 각각 찾아줘야합니다. 그래서 성공기점에 있는 분기문중 하나인 jmp인스트럭션을 기준으로 101개의 바이너리의 주소를 구했습니다. [+] for file in $..
AEG구현에 관심이 많은 나는... 이에 대한 파이썬 모듈 중 하나인 angr를 접하였다.symbolic execution에 특화된 파이썬 모듈이다.엄밀히 말하자면 CTF문제 풀이에 특화된 모듈인거 같다.끝까지 파해쳐보고자 일단 기본적인 사용원리나 기능들을 익힐겸githup에 모아둔 예제들을 바탕으로 하나씩 연습해본당.우선, 바이너리를 실행시켜보면 아래와 같다. argv[1]이 필요하며, 일정한 값이랑 맞지 않으면, 에러메세지를 뿜어준다. IDA로 열어보았더니 그냥 함수들이 많다.argv[1]의 값을 0x43바이트만큼 strncpy로 복사를 하고이에 대하여 아마도 검증하는 함수들로 구성이 되어 있을것이다. 문자열 검색을 하였을 시, 성공 시 보여주는 메세지가 있었으며, xref로 따라가보니 맨 마지막 함..
CodePatch와 함수복구 알고리즘, IDApython 등등....여러모로 공부할게 많은 문제인거 같아서 포스팅겸 정리해본당.그리고 실제 대회에선 대회서버와의 통신을 통해 flag를 얻는 것 같다.지나간 ctf문제를 풀어보는 건 개인공부를 위함이므로.... pass우선 함수의 시작부분이다 symbol이 strip된 상태이기때문에 임의로 main이라고 이름을 지어줬다.윈도우에서 IDA분석하고 맥 docker상에서 돌려서 실행사진은 없지만...Key1: 이라고 나오면서 Key1 값을 받고해당 값이아니면 Failed라고 보내주며 종료된다.일단, 타고들어가서 어떤식으로 진행되는지 보자. 처음에 역시 Key1을 printf함수를 통해 출력해주며, 출력버퍼를 비우고 fgets함수로 사용자 입력을 stdin으로 받..