목록CTF's/CODEGATE (11)
ipwn
올 해 코게 예선 포너블 문제 중 하나다. 트릭?이라면 트릭이고..아니라면 아니고 일단 라이브러리 내부 분석을 해 봐야 풀 수 있는 문제다. Mitigation[*] '/home/agh04140/pwn/codegate/2019/aeiou/aeiou' Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x400000) pie 빼고 다 걸려있다. Analyzingvoid __fastcall main(__int64 a1, char **a2, char **a3){ int v3; // [rsp+4h] [rbp-Ch] unsigned __int64 v4; // [rsp+8h] [rbp-8h] v4 = __re..
rtdl 정리할 겸 yocto 라업 써야겠다. 갑자기 든 생각인데 왜 티스토리는 md를 지원 안할까... 컬러스크립트 쓰기 싫은데.. 좀 공부하고 github.io로 갈아타야지 무튼 라업 읽기전에 읽어야 할 문서 2개 땅땅 (got에 왜 libc 주소가 있을까요~~?~를 알자) https://bpsecblog.wordpress.com/2016/03/07/about_got_plt_1/https://bpsecblog.wordpress.com/2016/03/09/about_got_plt_2/ 굳 Mitigation[*] '/home/agh04140/pwn/codegate/2015/yocto/yocto' Arch: i386-32-little RELRO: No RELRO Stack: No canary found ..
보호기법 다 걸려있다. 분석 void __cdecl alloc(){ signed int i; // [rsp+4h] [rbp-102Ch] heap *ptr; // [rsp+8h] [rbp-1028h] char *alloc_buf; // [rsp+10h] [rbp-1020h] size_t nbytes; // [rsp+18h] [rbp-1018h] size_t read_buf_len; // [rsp+18h] [rbp-1018h] char read_buf[4096]; // [rsp+20h] [rbp-1010h] unsigned __int64 v6; // [rsp+1028h] [rbp-8h] v6 = __readfsqword(0x28u); ptr = malloc(0x20uLL); printf("- size : "..
이 문제는 진짜 진짜 진짜 진자(진자운동 아님ㅎ)쉽다. int __cdecl main(){ int result; // eax int buf; // [esp+0h] [ebp-18h] void *ptr; // [esp+4h] [ebp-14h] int v3; // [esp+8h] [ebp-10h] unsigned int v4; // [esp+Ch] [ebp-Ch] v4 = __readgsdword(0x14u); ptr = 0; v3 = 0; setvbuf(stdout, 0, 1, 0); while ( 1 ) { sub_8048624(); puts("your choice:"); read(0, &buf, 4u); result = buf; switch ( buf ) { case 1: if ( ptr ) { puts..
이번에 푼 문제는 betting문제이다. codegate본선 가서 풀었던 문제인데 예선의 베라보다 쉽다. 왠지 엄청 어려울줄 알고 한 문제라도 풀면 기적이라 생각하고 풀었었다 암튼 분석을 해보자. 보아하니 64bit바이너리에, 카나리, NX가 걸려있다. int __cdecl main(int argc, const char **argv, const char **envp){ unsigned int v3; // eax unsigned int v4; // eax unsigned int v6; // [rsp+4h] [rbp-6Ch] int v7; // [rsp+8h] [rbp-68h] int v8; // [rsp+Ch] [rbp-64h] int v9; // [rsp+10h] [rbp-60h] int v10; // ..
이번에 푼 문제는 bugbug이다. 오랜만에 ctf문제 exploit해서 기분 좋다. 암튼 바로 시작하겠다. 후 쓰다보니 라업 쓰는게 문제 푸는 것 보다 더 어렵다. NX가 걸려있고 나머지는 아무것도 걸려있지 않다. 이제 ida로 까보자. int __cdecl main(){ unsigned int v0; // eax unsigned int v1; // eax int result; // eax int v3[6]; // [esp+4h] [ebp-A4h] int v4[6]; // [esp+1Ch] [ebp-8Ch] char buf; // [esp+34h] [ebp-74h] unsigned int ptr; // [esp+98h] [ebp-10h] FILE *stream; // [esp+9Ch] [ebp-Ch] ..
이번에 작성할 Writeup은 코게 2018에 나온 BaskinRobins31이다. 그냥 되게 간단히 풀리는 문제였다. 64bit이며, NX가 걸려있다. int __cdecl main(int argc, const char **argv, const char **envp){ unsigned int v3; // eax unsigned int v5; // [rsp+8h] [rbp-8h] _BOOL4 v6; // [rsp+Ch] [rbp-4h] setvbuf(stdout, 0LL, 2, 0LL); setvbuf(stdin, 0LL, 2, 0LL); v3 = time(0LL); srand(v3); v5 = 31; v6 = 0; puts("### This game is similar to the BaskinRobin..
이번에 풀 문제는 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 ..