ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • level12. 풀이
    System hacking training/Hackerschool F.T.Z 2017. 10. 23. 22:35

    해커스쿨 F.T.Z level12 풀이입니다.



    ls -al 로 디렉터리와 파일을 보니 11번과 같이 attackme에 setuid가 걸린것을 확인 할 수 있습니다.



    힌트 내용은 이러합니다. 


    11번의 소스코드와 유사합니다만 이 문제에서는 포맷스트링에 대한 취약점은 없어보입니다.


    get()의 취약점을 이용하여 공격을 하면 될것같습니다. 

    get()는 문자열의 수를 제한하지 않아 버퍼오버플로우 공격의 대상이 되는 함수입니다.


    이런 취약점으로 문제를 풀어보았습니다. 


    11의 풀이와 마찬가지로 cp 명령어를 이용하여 tmp 디렉토리에 attackme 실행파일을 복사해줍니다. 


    이는 level12의 디렉토리에서 gdb 사용을 제한한것에 대한 대비책입니다. 


    복사된 파일을 gdb를 통해 분석해보았습니다. 



    힌트 내용과는 달리 이번에도 버퍼크기가 0x108 즉 10진수로 264임을 확인할 수 있었고,

    추가적으로 dummy 가 0x8로 총 버퍼의 크기는 272 바이트임을 확인 할 수 있었습니다 .


    저번 풀이와는 다르게 저는 이번에


    환경변수를 이용하게 되었습니다. 


    여기서 환경변수란

    컴퓨터 시스템의 전체적인 규모에서 어떤 값을 저장해놓고, 참조하는것을 의미합니다.


    저는 이 환경변수에 쉘코드를 넣어 실행을 하였습니다.


    저번풀이보다 저는 이 방법이 더 괜찮다고 생각하는데요


    그 이유는 쉘코드의 길이를 생각하지 않아도 환경변수의 주소를 ret주소로 바꿔 실행을 해주면 쉽게 쉘을 얻을 수 있기 때문입니다.

    (문제풀이를 통해 얻은 지식입니다.)



    export fkillrra=`python -c 'print "\x90"*90+ "\x31\xc0\x31\xd2\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80"'`


    환경변수의 내용은 이러합니다.


    export 명령어를 통해 환경변수를 등록해줍니다.


    그리고 쉘코드를 삽입해 주었습니다.


    \x90을 넣어주는 이유에 대해서는 나중에 좀 더 자세히 설명을 드리겠습니다.



    또한 이 환경변수의 주소를 구하기 위해 ad 라는 실행파일을 만들어주었습니다.


    ad.c는 ad의 소스코드이며, 간단한 소스코드임을 확인할 수 있습니다.


    getenv()를 이용하여 이전의 등록해 주었던 fkillrra 이름의 환경변수 주소를 출력해주는 소스코드입니다.



    tmp에 있는 ad를 실행해보면 쉘코드가 있는 fkillrra의 환경변수의 주소가 출력됩니다. 


    환경변수의 주소는 보시다시피 0xbffffc17이며 페이로드를 작성할때 제일 마지막에 넣어주면 될듯합니다.



    cat을 이용하여 attackme를 실행하고 입력을 받을때 쉘코드를 넣어주도록 하였습니다.


    이로써 쉘을 얻었고, level13의 password is "have no clue" 네요 ㅎ


    이상 level12의 풀이를 마칩니다.





     


     










    반응형

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

    level 14. 풀이  (0) 2017.11.12
    level13. 풀이  (0) 2017.11.05
    level 11. 풀이  (0) 2017.10.15
    level 1~10. 풀이(pdf)  (0) 2017.09.14
    hackerschool trainer6~10  (0) 2017.08.27
Designed by Tistory.