본문 바로가기
반응형

LOB20

LOB Level20 xavius 마지막 xavius 로 접속합니다. 우선 소스코드를 보면 40바이트 buffer가 선언되어있고 6666포트를 여네요 그리고 recv(client_fd, buffer, 256,0) 에서 40바이트 buffer에 256바이트를 저장하네요?? 으잉? 오버플로우가 일어나는 코드네요. 우선 페이로드를 생각해보면 buffer 40 + ebf 4 + ret 4 + shellcode 입니다. 하지만 여기서 정확한 ret를 알수 없기 때문에 브루트 포싱해줍니다. 그런데 알고보니 로컬에서 사용하는 쉘코드와 원격으로 사용하는 쉘코드가 다릅니다. 원격으로 공격할때 로컬에서 쓰는 쉘코드는 동작하지 않습니다. 그 이유는 네트워크를 통해 쉘을 활성화 시켜 주어야 하기 때문입니다. 그래서 포트 바인딩 쉘코드를 사용할 건데 포트 바인.. 2021. 8. 10.
LOB Level 19 nightmare nightmare -> xavius 로 접속합니다. 소스코드를 보는데 뭐 다막아놨어요 우선 계속 strcpy 가 나오다가 갑자기 fgets가 나온 것에 의문이 듭니다. char *fgets(char *s, int size, FILE *stream); 이소스에서는 fgets(buffer, 256, stdin)이라고 되어있는데 여기서 stdin이 뭔지 궁금해서 검색해보면 stdin이란, 표준입력 파일 스트림으로 표준 입력을 이야기할 때 흔히 '버퍼'를 이야기한다고 합니다. 그렇다면 fgets로 입력받은 값들이 stdin에 저장되는 것 같습니다. 제대로 알아보기 위해 gdb로 보면 fgets (main+21)에 break 를 걸고 stdin을 보면 0x00000000 이군요... 여기서 이게 아닌가 싶었는데 .. 2021. 8. 10.
LOB Level 18 succubus succubus -> nightmare 로 접속합니다. plt라는 힌트와 함께 흠? ret 부분에 strcpy 의 주소가 들어가야 하네요 우선 plt에 대해서 공부하면 PLT(Procedure Linkage Table) PLT는 일종의 실제 호출 코드를 담고 있는 테이블로써 이 내용 참조를 통해 _dl_runtime_resolve가 수행되고, 실제 시스템 라이브러리 호출이 이루어지게 됩니다.. GOT(Global Offset Table) GOT는 PLT가 참조하는 테이블로써 프로시져들의 주소를 가지고 있습니다. PLT가 어떤 외부 프로시져를 호출할 때 이 GOT를 참조해서 해당 주소로 점프하게 됩니다. 한마디로 strcpy가 실행되는 것 같습니다. strcpy 구조 char * strcpy ( char .. 2021. 8. 10.
LOB Level 17 zombie_assassin zombie_assassin -> succubus 로 접속합니다. (소스코드가 길어서 캡처 말고 복붙 했습니다.) /* 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) { if(check != 4) exit(0); printf("welcome to the MO!\n"); // olleh! system(cmd); } void YUT(void) { if(check != 3) exit(0); printf("welcome to the YUT!\n"); c.. 2021. 8. 10.
LOB Level 16 assassin assassin -> zombie_assassin 으로 접속합니다. 힌트로 FEBP가 나왔네요 FEBP란 Fake EBP의 약자입니다. fake ebp -> ebp 속이기 이 기법은 ret까지만 덮을 수 있고, 특정한 영역에 대해 필터링 해놓았을 때, (스택 주소 \xbf, 라이브러리주소 \x40 등) 공격할 방법이 없어보일 때 사용하면 된다네요. 공격방법은 Fake EBP는 말그대로 EBP를 속이는 기법이다. 해당기법은 RET까지 덮을수있다. leave - mov esp,ebp, pop ebp 명령을 가지고있다. esp에 ebp가 들어가고, ebp가 pop이된다. 처음에 ret명령이 실행될떄 pop eip 실행되고, leave,ret주소를 넣었기때문에 다시 되돌아간다. mov esp,ebp , pop .. 2021. 8. 10.
LOB Level 15 giant giant -> assassin 으로 접속합니다. 스택도 안되고 RTL도 안된답니다. 흑.... 그럼 다른 방법을 사용합시다. Ret Sled 스택영역을 ret를 덮어씌울 수 없으므로, ret영역에 ret 명령의 주소를 쓰는 것이다. dummy+&ret+&shellcode+shellcode esp 가 ret를 가리키고 정상적인 ret가 수행되면서 esp+4 ret명령이 한번 더 실행되며 shellcode의 주소로 점프 shellcode 실행 한마디로 ret영역에 ret명령 주소를 씌이면 그 다음 주소로 간다는 거네요 그럼 그 다음 주소에 system() 의 주소를 넣으면 되겠네요 44byte dummy + 4byte RET + system() ADDR + 4byte dummy + /bin/sh ADDR .. 2021. 8. 10.
반응형