ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.