ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • level 11. 풀이
    System hacking training/Hackerschool F.T.Z 2017. 10. 15. 03:13

    오랜만에 F.T.Z를 풀었습니다.


    bof에 대한 개념부족, gdb 사용법, 쉘코딩에 대한 학습이 부족하여 풀이를 이제서야 하게되었네요ㅠ. 

    (3주전 풀이를 보고 풀어보았는데 이해가 가지 않아서 다시 풀이합니다.)


    level11의 풀이를 시작합니다.



    attackme의 소스인듯 합니다.

    로그인 후 hint를 열어본 결과 여기엔 취약점이 두개가 있더군요.


    1. 버퍼오버플로우 취약점

    2. 포맷스트링 취약점


    저는 버퍼오버플로우 취약점에 대해 공부를 하였으니 이 취약점을 갖고 문제를 풀었습니다.



    일단!


    프로그램을 실행시켜보니 segmentation fault를 출력하고, 인자로 문자열을 넘겨 주면 그대로 출력을 해주네요!


    아직 얕은 수준의 지식이지만 달고나님의 문서를 보고 공부한 결과

    ret주소를 찾아야한다는 것을 알게 되었습니다.


    그 ret주소를 찾기 위해 gdb를 이용해 열어 보았습니다. 



    hint 와는 다르게 버퍼에 16진수로 108바이트를 주고 dummy 도 8바이트 들어가 있네요~!


    그리하여 main에 break point를 주고 "A"를 300개 넣어보았는데..

    재수없게 Operation not permitted가 뜨더군요.


    당황하지 않고 tmp 디렉토리에 cp 명령어를 이용하여 그대로 복사를 해주었습니다. 

    Operation not permitted 가 뜬다면 tmp를 이용하면 됩니다.



    그리고 다시 gdb를 이용하여 "A"를 300개 넣어보았습니다.



    16진수로 들어가기 때문에 \x41이 300개 들어가 있는것을 볼 수 있었고,

    ret 주소를 0xbffffb30으로 잡고 공격을 시도해 보았습니다. 



    아 여기서 25 byte의 쉘 코드를 사용했습니다. 쉘코드는 google에서 가져왔습니다.

    어느 블로그였는데 기억이 안나네요..ㅎ(댓글남겨주시면 출처 남기겠습니다.)


    \x90 의 nop 코드를 이용하여 아무 명령도 주지않고 실행 흐름을 넘깁니다. 

    여기서 제가 243개의 nop코드를 준것은 저희가 채워야 할 버퍼의 크기 때문입니다. 


    앞서 말씀드린바와 같이 이 프로그램에는 총 버퍼가 dummy를 포함하여 272 byte를 할당해 주었습니다.


    272 byte에서 25 byte의 쉘 코드가 들어갈 버퍼를 제외하고, 제일 마지막 ret주소가 들어갈 4 byte를 제외하면


    243 byte를 채워줘야하기 때문에 nop코드를 243개 넣어주었습니다.


    그리고 25 byte의 쉘코드 뒤에 ret주소를 리틀엔디언 방식으로 넣어주었습니다.


    왜 이렇게 하는지에 대해서는 달고나님의 문서에 잘 정리되어 있습니다.


    아무튼 이렇게 쉘을 얻어냈습니다. 


    다시 level11 디렉토리로 돌아와서



    쉘을 얻어내는데 성공을 했습니다.


    level12의 password는 it is like this 입니다. 


    이상 풀이를 마치겠습니다.













    반응형

    'System hacking training > Hackerschool F.T.Z' 카테고리의 다른 글

    level13. 풀이  (0) 2017.11.05
    level12. 풀이  (0) 2017.10.23
    level 1~10. 풀이(pdf)  (0) 2017.09.14
    hackerschool trainer6~10  (0) 2017.08.27
    hackerschool trainer1~5  (0) 2017.08.27
Designed by Tistory.