워게임

    HackCTF - Simple_Overflow_ver_2

    HackCTF - Simple_Overflow_ver_2

    이번에는 simple overflow ver 2를 풀어볼 것이다. 먼저 프로그램을 실행해보자. 위처럼 데이터를 입력하고 어디에 값이 들어가는지 출력한다. 그리고 다시 하면 buf가 초기화되고 다시 값을 똑같은 위치에 입력한다. 그러면 먼저 main을 디스어셈블 해보자. Dump of assembler code for function main: 0x0804852d :push ebp 0x0804852e :mov ebp,esp 0x08048530 :push ebx 0x08048531 :sub esp,0x98 0x08048537 :mov eax,ds:0x804a040 0x0804853c :mov DWORD PTR [esp+0xc],0x0 0x08048544 :mov DWORD PTR [esp+0x8],0x2 0..

    HackCTF - BOF_PIE

    HackCTF - BOF_PIE

    오늘은 bof_pie문제를 풀어볼 것이다. 먼저 checksec로 파일을 확인해보자. 제목에 맞게 pie가 적용되어있다. 이번에는 어떤 함수가 있는지 살펴보자.(gdb, info func) All defined functions: Non-debugging symbols: 0x00000640 _init 0x00000680 printf@plt 0x00000690 fgets@plt 0x000006a0 fclose@plt 0x000006b0 perror@plt 0x000006c0 puts@plt 0x000006d0 __libc_start_main@plt 0x000006e0 setvbuf@plt 0x000006f0 fopen@plt 0x00000700 __isoc99_scanf@plt 0x00000720 _sta..

    HackCTF - x64 Simple_size_BOF

    HackCTF - x64 Simple_size_BOF

    오늘은 hackctf의 x64 simple size bof 문제를 풀어볼 것이다. 처음에는 왜 제목이 이런지 이해를 못했는데 디컴파일후 그 이유를 알게 되었다. 일단 먼저 프로그램을 실행해보자. 그냥 자살방지 문제라고 하고 buf의 주소를 준다. 이제 디컴파일을 해보자. 아래처럼 나온다. 크기가 27952인 buf를 받는다.ㅋㅋㅋ 그러면 스택은 아래와 같다. buf(v4) : 27952 sfp : 8 ret : 8 nop을 27960 - 23 byte 하고 shellcode(23byte)를 주고 buf의 주소를 넣으면 쉘 획득에 성공할 것이다. shellcode(23byte)(64bit) \x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\..

    HackCTF - x64 Buffer Overflow(writeup)

    HackCTF - x64 Buffer Overflow(writeup)

    이번에는 hackCTF에 기본적인 64비트 BOF문제를 풀어볼 것이다. 일단 문제 파일에 실행 권한을 주고 실행해보자. 위처럼 AAAA를 넣었을때 Hello AAAA라고 나오는 것을 알 수 있다. 이번에는 checksec로 확인해보자. Arch: amd64-64-little RELRO: Full RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000) 결과를 보면 NX bit가 적용되어 있다. 그러면 쉘코드를 넣는 게 불가능하다. 이제 무슨 함수들이 있는지 확인해보자. gdb를 이용한다. (gdb) info func All defined functions: Non-debugging symbols: 0x00000000004004b0 _init ..

    HackCTF - 내 버퍼가 흘러넘친다!!!!(writeup)

    HackCTF - 내 버퍼가 흘러넘친다!!!!(writeup)

    오늘은 hackctf의 pwn문제인 "내 버퍼가 흘러넘친다!!!"를 풀어볼 것이다. 문제 파일에는 prob1이라는 바이너리가 있었다. 먼저 프로그램에 실행 권한을 주고 실행해보자. 위처럼 Name : , input : 이렇게 두 개 입력을 받는다. 인자를 두 개 받아서 name에는 shellcode, input의 return address를 name시작 주소로 돌리면 된다고 생각했다. 일단 먼저 main을 디스 어셈을 해보자. (gdb) disas main Dump of assembler code for function main: 0x080484cb :push ebp 0x080484cc :mov ebp,esp 0x080484ce :sub esp,0x14 0x080484d1 :mov eax,ds:0x804..

    Dreamhack - basic_exploitation_000 (writeup)

    Dreamhack - basic_exploitation_000 (writeup)

    오늘은 Ret Address Overwrite 취약점을 가진 basic_exploitation_000 문제를 풀어볼것이다. 문제 파일은 basic_exploitation_000, basic_exploitation_000.c가 있다. basic_exploitation_000.c를 한번 살펴보자. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } int main(int..

    Dreamhack - basic_rop_x86 (Write up)

    Dreamhack - basic_rop_x86 (Write up)

    오늘은 드림핵의 basic_rop_x86 문제를 풀어볼 것이다. 일단 아래는 문제 코드이다. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } int main(int argc, char *argv[]) { char buf[0x40] = {}; initialize(); read(0, buf, 0x400); write(1, buf, sizeof(buf)); return..

    Webhacking.kr - 26번 문제

    Webhacking.kr - 26번 문제

    오늘은 webhacking.kr의 26번 문제를 풀어보겠다. 일단 사이트로 접속해보자. 이렇게 사이트가 나오고 view source라는 링크가 있다. 이 링크로 들어가보자. php부분을 보면, id를 get 방식으로 받고 값이 admin이면 해결되는 문제이다. 그러면 get방식으로 값을 보내보자. 밑에 처럼 값을 넣어준다. https://webhacking.kr/challenge/web-11/?id=admin 하지만 no!라고 뜬다. 다시 php를 확인하면 preg_match 부분을 보면 값이 admin이면 no라고 뜨게 필터링 되어있다. 그러면 php는 url을 자동으로 decode하기 때문에 url encoding하면 되는데 php코드에서 한 번 urldecode를 한다. 그래서 admin을 두번 u..