본문 바로가기
반응형

FTZ22

FTZ Level 15 Level 15에 접속하여 파일과 힌트를 봅니다. 14와 똑같은데 단한가지 다른게 포인터 변수 check입니다. 포인터를 사용했기 때문에 check에는 deadbeef가 있는 주소를 넣어주면 된다고 생각합니다. 우선 gdb를 뜯어보면 Level14와 메모리 구조는 똑같습니다. 여기서 main+32를 살펴보면 cmpl어셈블리 명령어를 사용하여 eax값을 비교 하고 있습니다. 이 프로그램은 0xdeadbeef가 하드코딩 되어있어 프로그램 속에 내제 되어 있습니다. 그러므로 내제되어있는 0xdeadbeef값의 주소를 찾으면 되는 것이지요 gdb에서 x/x를 이용하여 주소를 찾아줍니다. 찾으니 0x080484b2가 나오네요 Level14에서 사용했던 코드에서 Check부분의 값만 바꿔 줍니다. (python -.. 2021. 8. 9.
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.
반응형