ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • level 19. 풀이
    System hacking training/Hackerschool F.T.Z 2018. 1. 6. 20:52

    all clear 까지 얼마 안남았네용 ㅎ


    풀이 시작합니다.



    로그인 후 힌트파일을 열어보면 이와 같은 소스코드가 출력됩니다.


    기존 문제와 다른 부분은 setreuid()함수가 없는것입니다.


    하지만 ls -al attackme 로 attackme의 권한을 확인해 보면



    이렇게 setuid가 걸려있는것을 확인 할 수 있습니다.


    또한 gets()함수에서 문자열의 길이를 지정하지 않는점을 이용하여 bof 공격을 할 수 있습니다.



    스택구조를 확인하기 위해 gdb로 disassemble 해보면


    힌트파일의 소스코드와는 다른 40을 할당한것을 알 수 있습니다.


    dummy 값이 20이 들어간것이죠.


    이제 공격 시나리오를 생각해보면


    의미 없는 값을 40바이트로 dummy와 버퍼를 덮어고, SFP 를 4바이트로 덮고, 마지막 RET에 쉘코드의 주소로 덮어주면 될것같습니다.


    하지만 여기서 주의할 점이 있죠.


    아까도 말씀드렸듯이 setreuid()가 없기때문에 쉘코드에 이를 포함 시켜줘야한다는점입니다.


    저는 그 쉘코드를 구글에서 가져왔습니다 :)


    그 쉘코드를 환경변수로 등록하고, 그 환경변수의 주소를 알아내어 RET에 덮어주면 성공합니다.



    쉘코드를 fkillrra 라는 이름으로 환경변수로 만들어주고..



    tmp 디렉토리로 이동하여 fkillrra라는 이름의 환경변수 주소를 구하는 프로그램을 만들어줍니다.



    fkillrra 환경변수의 주소를 알아내고..



    페이로드를 A*40 (buf[20]+dummy(20)) + SFP (4) + RET (환경변수 주소)


    이렇게 작성해주면 쉘을 level20으로 띄울 수 있습니다.


    이상 풀이를 마칩니다.







    반응형

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

    level 20. 풀이  (1) 2018.01.20
    level 18. 풀이  (0) 2017.12.24
    level 17. 풀이  (0) 2017.12.03
    level 16. 풀이  (0) 2017.12.03
    level 15. 풀이  (2) 2017.11.26
Designed by Tistory.