본문 바로가기
반응형

pwnable63

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.
LOB Level 14 bugbear bugbear -> giant 로 접속합니다. 우선 코드를 보는데 rtl을 system함수가 아닌 execve를 사용해서 풀어야하는 문제입니다. 우선 execve함수의 주소를 찾아냅니다. execve를 사용하여 bin/sh를 띄우려면 execve("/bin/sh", {"/bin/sh", 0}, 0) 형태가 되어야 합니다.... 우선 null값의 주소를 구합니다. 0xbffffffc 입니다. (모두 0 이네요 ㅎㅎ) 그런데 bin/sh와 0을 같이 넣어주어야 합니다. 여기서 저는 argv[0]을 생각했습니다. 바로 파일명을 심볼릭 함수로 주어서 넣는 거죠 ㅎㅎ 파일명은 0xbffffff5부터 시작하네요. 아마 실제 파일로 하면 약간의 차이가 있을거라고 예상합니다. bin/sh의 주소를 찾기위해 코딩을 하고.. 2021. 8. 10.
LOB Level 13 darkknight darkknight -> bugbear 로 접속합니다. 힌트에 RTL 1이라고 되어있네요 RTL을 구글링해서 공부햇습니다. RTL이란 return to library의 줄임말로 리턴주소에 공유라이브리러리의 시스템함수의 주소를 덮고 인자로 "/bin/sh"을 주소를 넣어주는 방식입니다. - 쉘코드 없이 공격이 가능합니다. - 시스템함수의 인자는 +8 위치에 넣어줘야 합니다. 즉 공격을 할때 공유라이브러리의 시스템함수를 호출하고 (4) 더미값 (4) 그리고 인자값을 넣어주는 것입니다. (실제로 시스템 함수를 호출하는 코드를 작성하여 분석해보면 알 수 있습니다.) RTL공격 코드는 버퍼값 + 시스템함수 주소(4) + 더미값(4) + /bin/sh 주소 입니다. 우선 시스템함수의 주소를 알기위해 bugbear를.. 2021. 8. 10.
LOB Level 12 golem golem -> darknight 로 접속합니다. 코드를 살펴보면... strncpy(buffer, src, 41); 40바이트만 할당되어 있는데 1바이트 더 주어지네요. 1바이트의 오버플로우를 해야할듯 합니다. 위에 힌트내용에 FPO를 검색해보니 Frame Pointer Overwriting 이라는 Fake Ebp의 하위 개념인 공격 기법이 있었습니다. 자세한 내용 참고 - http://s2kiess.blog.me/220070346721 gdb로 분석해보면 서브함수의 leave에 브레이크를 걸고 r `python -c 'print "A"*40 + "B"'` 로 실행하여 보면 0xbffffa42를 보면 뒤에 1바이트가 B로 된걸 알수 있습니다. 버퍼 앞에는 버퍼를 가르키는 0xbffffa74가 들어있습니.. 2021. 8. 10.
반응형