-
level 14. 풀이System hacking training/Hackerschool F.T.Z 2017. 11. 12. 18:29
엄청난 뻘짓끝에 F.T.Z level 14도 풀이를 했습니다.level14 풀이를 해보았습니다.
로그인 후 level15에 실행 권한이 주어진 파일을 찾은 모습입니다.
간단히 ls -al 명령어로 찾을 수 있습니다.
이번에도 변태같은 attackme가 공격을 바라며 기다리고 있네요 ㅎ
힌트 파일을 열어 힌트를 확인 해 보니..
char buf[20]; 으로 20 byte 크기의 배열이 존재합니다.
하지만 크기에 맞지 않게 fgets() 함수에서는 45 byte 를 입력받고 있는 모습입니다.
따라서 버퍼오버플로우 취약점이 존재하는 것을 확인 할 수 있습니다.
또한 if 문의 조건으로 check 이라는 int 형 변수에 0xdeadbeef 라는 문자가 존재한다면 쉘을 실행 시켜 주네요. ㅎ
저 if 문의 조건만 만족시키면 될것같습니다. ㅎㅎ
하지만!!
우리는 실제로 버퍼를 얼마나 할당 되었는지 확인할 필요가 있죠?
int 형으로 선언된 check의 위치를 알아야 거기에 0xdeadbeef 라는 문자열을 넣고,
쉘을 실행시킬 수 있기 때문입니다.
여기서 이전의 방법과 동일하게 tmp 디렉터리로 attackme라는 파일을 복사해주었고
gdb로 disas main을 해보았습니다.
여기서 buf는 ebp-56 의 위치에 있고, check 은 ebp-16의 위치에 있는것을 확인 할 수 있었는데요
이는 lea eax, [ebp-56] 과
cmp DWORD PTR [ebp-16], 0xdeadbeef 에서 확인할 수 있었습니다.
(부가설명)
lea 명령으로 ebp-56 의 주소를 eax 에 저장합니다.
또, 바로 밑에 push를 해주고 fgets() 를 불러오는 것을 보면 buf의 시작은 ebp-56이라는것을 알 수 있겠죠 !
그리고
cmp(비교 명령어) 명령으로 ebp-16 부터 비교하는 것을 보면 check 이라는 변수는
ebp-16에 위치한다는 것을 알 수 있습니다.
그렇다면 공격 코드를 작성할때
"A"*40+"deadbeef" 로 작성해주면 될것같습니다.
여기서 deadbeef 는 그대로 보내면 안된다는거... ㅎ
이제 공격을 해보면 !!!
level15의 권한으로 쉘이 실행되는것을 확인할 수 있습니다 ! ㅎ
level15의 password는 guess what 이네요 :)
이상 level 15 풀이를 마칩니다.
반응형'System hacking training > Hackerschool F.T.Z' 카테고리의 다른 글
level 16. 풀이 (0) 2017.12.03 level 15. 풀이 (2) 2017.11.26 level13. 풀이 (0) 2017.11.05 level12. 풀이 (0) 2017.10.23 level 11. 풀이 (0) 2017.10.15