ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • level13. 풀이
    System hacking training/Hackerschool F.T.Z 2017. 11. 5. 22:17

    해커스쿨 F.T.Z level 13을 풀이해 보았습니다.



    로그인 후 힌트를 열어본 화면입니다.


    attackme에 대한 소스코드인것 같습니다. 


    char 형으로 buf[1024] 만큼 버퍼를 할당해주었고, long 형 i 에 1234567이 들어가 있는것을 알 수 있었습니다.


    또한 입력값을 buf에 복사해주는 strcpy 함수가 보이네요.


    이 함수는 버퍼오버플로우 공격에 취약합니다.


    입력값의 길이를 지정하지 않아, 입력값을 그대로 복사해서 만일 buf 크기 즉, 1024 보다 큰 길이의 입력값이 들어온다면


    엉뚱한 것들을 건드려서 프로그래머의 의도와는 다르게 작동할 수 있습니다.


    또한 setreuid()를 호출하여 '특권'을 주는것을 볼 수 있습니다. 


    하지만


    이전과는 다르게 if문을 이용하여 i에 0x1234567이 들어있지 않느다면 Warnig: Buffer Overflow!!! 라는 문자열을 출력하여


    버퍼오버플로우 공격에 대한 방어가 되어있는것을 볼 수 있습니다.


    이러한 것을 스택가드라고 하더군요(별로 좋지 않은 방법인것 같습니다ㅎ).


    문자열을 버퍼가 넘치게 넣는다면 i에 들어있는 0x1234567 값도 변경되어서 공격에 실패할 것입니다.


    그렇다면 어떻게 공격해야 할까요...?


    i의 위치를 찾아서 페이로드를 작성할때 리틀엔디언 방식으로 1234567을 그대로 전달해 준다면


    스택가드에도 걸리지 않고 쉘을 얻을 수 있을것 같습니다.


    그대로 공격을 해보겠습니다.


    일단 실제 버퍼를 얼마나 할당하였는지 확인하기 위해 cp 명령어로 tmp 디렉토리에 attackme 파일을 복사해 줍니다.


    그리고 gdb를 이용하여 열어보니...



    실제로 0x418(16진수) -> 1048(10진수) 바이트의 공간이 할당되어 있는것을 확인 할 수 있었습니다.


    여기서 break point를 cmp 즉, 문자열을 비교하는 함수에 걸고 A를 4개 넣어 보았습니다.


    이는 실제 1234567이 어느 주소에 들어가 있는지 확인을 하기 위함입니다.



    41(대문자 A)가 들어가 있는것을 볼 수 있었고,



    0x01234567 도 확인할 수 있었습니다.


    이제 대충 짐작이 갑니다.


    위치를 계산해보면 처음 위치(41414141이 들어가 있는곳)에서 1038만큼 뒤에 0x1234567 이 있었습니다.


    또 그 뒤에 16byte의 dummy(8) + sfp(4) + ret(4) 가 위치해 있었습니다.


    저번 풀이 방법과 동일하게 ret 주소를 쉘코드가 위치한 환경변수의 주소로 바꿔주면


    쉘을 얻을 수 있을것같습니다.


    저번과 동일하게 export 명령어를 이용하여 환경변수를 등록해주고,


    getenv() 함수를 이용한 간단한 c언어 프로그램을 이용하여 환경변수의 주소를 가져오겠습니다.


    [ad.c 소스코드]


    ad.c 라는 소스코드를 gcc로 컴파일해 준 후



    이와 같이 환경변수의 주소를 확인하여 페이로드를 작성해 준 뒤 level13의 권한을 획득할 수 있었습니다.


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










    반응형

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

    level 15. 풀이  (2) 2017.11.26
    level 14. 풀이  (0) 2017.11.12
    level12. 풀이  (0) 2017.10.23
    level 11. 풀이  (0) 2017.10.15
    level 1~10. 풀이(pdf)  (0) 2017.09.14
Designed by Tistory.