반응형 pwnable63 FTZ Level 14 Level14에 들어가서 파일들과 hint를 봅니다. 코드를 해석하면 이번 문제는 쉬운 문제인 것 같습니다. check의 위치를 찾아서 check값이 deadbeat가 되면 자동으로 15레벨의 쉘을 띄어줍니다. 프로그램 가지고 메모리 구조를 생각해 보면 RET4 SFP4 dummy? int crap4 dummy? int check4 dummy? buf20 이렇게 됩니다. main+3을 보면 총 56byte가 할당되는 것을 확인 할 수 있습니다. 그렇다면 20Byte(Buf) + Dummy + 4byte(Check) + Dummy + 4byte(crap) + Dummy = 56Byte 가 되는 것입니다. 여기서 Buf와 Check사이의 거리를 알아내어 Check에 deadbeef값을 넣어주면 됩니다. 이때.. 2021. 8. 9. FTZ Level 13 Level 13에 접속하여 파일과 힌트를 봅니다. 이번에도 attackme를 이용하는 것입니다. 소스를 보면 long형 변수 1개와 char형 배열 하나가 선언되어있습니다. 그리고 long I 의 값이 변하면 프로그램이 꺼집니다. 그러므로 I의 초기값을 유지해야합니다. 소스만 보고 스택구조를 보면 RET4 SFP4 DUMMY? I4 DUMMY? BUF1024 형태가 됩니다. 이를 gdb로 뜯어보면 main+3을 보면 (0x418) 1048바이트가 할당된 것을 볼 수 있습니다. 그렇다면 BUF(1024byte) + DUMMY(?) + I (4byte) + DUBBY = 1048Byte 입니다. 더미의 합은 20 byte가 되어야합니다. 4 + 16, 8 + 12, 12 + 8, 16+ 4 중 하나가 됩니다.. 2021. 8. 9. FTZ Level 12 Level 12에 접속하여 파일들을보면 Level 11과 똑같다 hint파일을 보면 11과 같이 256바이트를 할당한 변수를 생성하고 있다. 다른점은 strcpy함수가 아닌 gets함수를 사용한다는 것이다. gdb로 뜯어보면 구조는 Level11과 같다 RET4byte SFP4byte DUMMY8byte STACK256byte 그래서 Level11과 똑같이 풀었는데 안된다 ㅋㅋㅋㅋㅋㅋ 가만 생각해보니 gets 함수라서 그렇다. "|"와 cat을 사용하여 값을 넘겨주면 해결된다. (eggshell과 getenv 사용) (python -c 'print "A"*268+"\xbc\xf2\xff\xbf"';cat)|./attackme 그럼 Level 13의 권한을 획득한다. 2021. 8. 9. FTZ Level 11 Level 11부터는 어느 정도 공부가 필요한 것 같아서 달고나 BOF문서를 공부하고 풀었습니다. 우선 Level11에 접속하여 hint를 보면 256바이트의 배열이 생성되는 것과 strcpy함수를 볼수 있습니다. 이 프로그램을 gdb로 뜯어보면 main+3 에서 0x108만큼 할당을 하는 것을 볼 수 있습니다. 그리고 main+48에서 strcpy를 호출하고 있구요 (취약점 발생부분) 그럼 main+53에 break를 걸어줍니다. 여기서 메모리 구조를 보면 ret4byte SFP4byte dummy8byte stack256byte 로서 총 272바이트가 됩니다. 그렇다면 NOP + 쉘코드 (268byte) + RET (4byte) 형태가 되어야 겠지요. 그런데.... 안되네요. setUID 문제라고 하.. 2021. 8. 9. FTZ Level 10 Level10 으로 접속하여 힌트를 보면 여기서 공유메모리와, key_t의 값 7530이 핵심 포인트이다. 우선 공유메모리에 대해서 알아보면 프로세스들은 원래 자신에게 할당된 메모리만 사용할 수 있는데, 프로그램 특성상 여러 프로세스들이 특정 메모리 영역을 공유할 때가 있는데 이것을 공유메모리라고 한다. 공유메모리는 알았고 key_t 값 7530이 있다. 이것을 보고 유추할 수 있는게 프로그램을 작성하여 key_t값을 활용하여 해당 공유 메모리를 통해 level11의 비밀번호를 가져오는 것이라고 알수 있다. 우선 공유 메모리와 관련된 내용을 구글링 해보았다. 대표적으로 shmget, shmat함수가 있다. shmget함수로 key 값을 사용해 원하는 공유 메모리에 요청을 하고 shmat함수로 해당 메모리.. 2021. 8. 6. FTZ Level 9 ftz level9으로 접속한다. 접속해서 hint를 보면 bof의 소스가 나온다. 살펴보면 buf2 배열의 처음 2개가 go면 /bin/bash를 실행해준다다 find명령어를 사용해 살펴보면 /usr/bin/bof의 suid는 level10이다. 그럼 level10의 쉘을 띄어준다는 소리다. 여기서 볼수 있느게 buf를 fgets로 받아주는데 이미 buf는 10개의 크기로 정의 되어있다. buf 를 초과하는 정보는 buf2에 쌓일 것이다. 0~9까지가 buf의 크기이다. buf2까지의 공간은 abcdef 즉 5이다. 이렇게 level10의 쉘을 실행한 후, my-pass를 입력하여 level 10의 패스워드를 알아내면 된다. 2021. 8. 6. 이전 1 ··· 6 7 8 9 10 11 다음 반응형