FTZ 14레벨입니다.
문제가 뭔가 이상해졌군요...
crap check buf를 선언하고, fgets을 통해 받아온 뒤 check가 0xdeadbeef라면 쉘을 실행한다네요.
fgets의 문자열 길이를 검사하지 않는 취약점을 이용해서 버퍼 오버플로우를 일으키라는 것 같습니다.
힌트에서 포멧스트링또한 학습한다는데... 그건 나중의 문제인것 같네요 ㅎㅅㅎ
암튼 gdb로 확인을 해줍시다.
cp 명령어를 통해 tmp 폴더로 이동시켜주고 gdb attackme 실행시켜줍니다.
intel 방식으로 안바꿨는데... 지금까진 별 문제 없었는데 이제 조금씩 어려워지네요...
AT&T 방식은 어려우니 Intel 방식으로 바꿔줍시다.
set disassembly-flavor intel
이렇게 입력해주고 다시 보면?
짠!
좀 더 알아보기 편해졌습니다.
이제 분석을 진행해봅시다~
먼저 0x38만큼 메모리 할당하고 또 0x04만큼 할당합니다.
0x38은 56이기 때문에 총 60만큼 할당한 것이네요 ㅎㅎ
더이상 뭐 빼고 한것이 없기 때문에 메모리 할당은 이정도만 보고 밑으로 내려오면?
여기가 아주 중요한 부분입니다.
ebp-56 위치의 주소값을 eax에 담고 이를 push한다는 거죠.
push를 한 것은 call 할때의 인자로 들어가므로 fgets의 인자로 ebp-56이 들어가게 됩니다.
이게 어떤 의미인지 대충 알겠죠? ebp-56부터 데이터가 입력된다는거죠.
프로그램을 실행할 때 fgets를 통해 입력받는데, 그 입력값이 저 부분부터 입력이 된다는거에요.
그리고 다음을 보면?
이 부분이 바로 코드에서 if 구문입니다. 만약 ebp-16의 부분이 0xdeadbeef라면 이라는 것이죠.
이제 우리는 문제를 다 풀었습니다!
ebp-56부터 입력받는데, ebp-16에서 비교를 한답니다!
그러면?
fgets 부분에서 40바이트를 채우고 0xdeadbeef를 채우면? 된다는거죠!
따란
성공했습니다!
fgets로 받기 때문에 저렇게 파이프라인을 통해 실행해야한다는거! 아시죠?
끄읕!
'Hacking-기초 > [PWN] FTZ' 카테고리의 다른 글
Free Training Zone (16) level16 → level17 (0) | 2020.07.23 |
---|---|
Free Training Zone (15) level15 → level16 (0) | 2020.07.23 |
Free Training Zone (13) level13 → level14 (0) | 2020.07.21 |
Free Training Zone (12) level12 → level13 (0) | 2020.07.21 |
Free Training Zone (11) level11 → level12 (0) | 2020.07.20 |