전체 글 289

LOB Level 17 (zombie_assassin)

succubus.c를 열어봅시다. /* The Lord of the BOF : The Fellowship of the BOF - succubus - calling functions continuously */ #include #include #include // the inspector int check = 0; void MO(char *cmd) // check가 4라면 system(cmd) 실행 { if(check != 4) exit(0); printf("welcome to the MO!\n"); // olleh! system(cmd); } void YUT(void) // check가 3이라면 check를 4로 올림. { if(check != 3) exit(0); printf("welcome to th..

LOB Level 16 (assassin)

좀비 어쎄신.! 소스를 보면.. 저번 문제와 같이 스택,라이브러리 영역을 못쓴다. 거기에 쁠라스로 strcpy 대신 strncpy를 사용하여 RET 위로 못쓴다. 에헤이. RET위로 못쓰니까 생각나는게 Fake EBP 인데. 마침 주석에 FEBP 라고 나와 있네;; 그럼 고민없이 Fake EBP를 써서 문제를 풀어보자. 페이로드를 짜보면 스택을 초기화 시키는 코드가 존재하지 않으므로 그냥 스택 상에 shellcode를 올리도록 하겠다. 페이로드는 이렇게 구성된다. [shellcode 주소][shellcode] [nop 20] [shellcode주소 -4의 주소] [leave-ret 가젯] [assassin@localhost assassin]$ cp zombie_assassin zombie_assassim..

LOB Level 15 (giant)

assasin.c 를 열어보자. 이건 또 뭐하는 놈인가. no stack, no RTL? 일단 스택, 라이브러리 영역으로 eip를 돌릴 수가 없다. 에헤이.. 그럼 도대체 어디다가 하란 말이오... 코드영역(텍스트 영역)이 남아 있는데.. 코드영역을 활용해서 공격을 할 수 있을지 생각해보자. 어셈블리 코드는 코드영역 상에 있는 주소 그 위치에 있다. gdb돌리면 나옴 명령어 별로 그 주소를 가젯이라고 한다. RET 가젯을 이용하면 되지 않을까. 이것에 대해서 선행으로 미리 공부를 한 적이 있어서 쉽게 생각할 수 있었다. RET가젯은 gdb로 쉽게 알 수 있다. RET가젯을 RET자리에 올리고 RTL을 해보자. "/bin/sh"의 주소는 접때 구해놓은 것을 쓰겠다. ----> 0x400fbff9​ 페이로드..

LOB Level 14 (bugbear)

giant.c를 열어봅시다. 이번에도 주석에 친절하게 RTL이라고 미리 설명해주고 있다. 근데 뭔가 코드가 좀 더럽?네.. 슥슥 읽어보는거 보다 코드 해석부터 좀 할 필요가 있는듯 하다. --------------------------------------------------------------------------------------------------------- fp = popen("/usr/bin/ldd /home/giant/assassin | /bin/grep libc | /bin/awk '{print $4}'", "r"); fgets(buffer, 255, fp); sscanf(buffer, "(%x)", &lib_addr); fclose(fp); fp = popen("/usr/bin/..

LOB Level 13 (darkknight)

이번 문제는 버그베어!? bugbear.c를 열어보겠음. if(argv[1][47] == '\xbf') { printf("stack betrayed you!!\n"); exit(0) } 이 부분을 봅시다. ?? 지금 까지 있던 문제들은 모두 스택 영역에서만 코드를 실행할 수 있도록 했는데 이건 정반대로 스택 영역에서 코드 실행을 금지시키고 있다. NX-bit 옵션을 준다는 얘기. 즉 RTL(Return-to-Libc)를 사용해야 된다는 말. 코드 상단에 주석에도 친절하게도 RTL 이라고 해뒀네. 포스팅을 읽고 왔다고 가정하고 문제 풀이를 진행하겠다. 일단 우리가 구해야 하는건 1. 라이브러리의 SYSTEM함수 주소 2. SYSTEM 함수 내부의 "/bin/sh" 문자열 위치 를 알아야 한다. 먼저 시스템..

반응형