ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • level19
    war game Write up/ FTZ 2018. 11. 18. 00:12


    이번 문제는 이전 문제들과 다른 문제이다.



    문제의 코드를 보면 setreuid()함수가 존재하지 않는다는 것을 볼 수 있다.


    즉, 직접 setreuid()를 넣어줘야 하는데 직접 쉘을 짜도 되고 아니면 에그쉘을 통해서 풀 수 있는 문제이다.


    먼저 쉘 코드를 만들기 전에 gdb로 attackme를 분석해보자.


    총 스택 길이는 40byte로 

    buf가 20byte이니 더미값은 20byte이다,

    그림으로 보면 


    이다.



    이 문제는 bash drop privileges policy 을 활용한 문제인것 같다..

    ----------------------------------------------------------------------------------

    RedHat 7.0 이후 버전부터 bash drop privileges policy가 적용되었다고 한다.


    Drop privileges policy 란?


    --> 원래 SETUID가 걸린 파일은 실행 시 해당 파일의 소유자 권한으로 실행되지만 bash shell 을 실행 할 때는 user permission으로 실행이된다. 즉, EUID(Effective UDI)가 아닌 RUID(Real UID)로 실행된다는 것이다. 

    SetUID가 걸린 binary를 이용한 Elevation of authority 취약점을 막아보고자 적용한 정책이라고 할 수 있다.

    그러나 setreuid()함수를 이용하면 이를 우회가능하다.


    -----------------------------------------------------------------------------------


    shell code 를 만들기에 앞서 level20 의 ruid 와 euid를 필요로 하기 때문에 

    /etc/passwd file을 확인하여 확인한다.


    level20:x:3100:3100::/home/level20:/bin/bash


    따라서 setreuid(3100, 3100) 이다.


    level20 uid -> 3100


    또한 setreuid의 system call num을 알아야하는데

    이는 C header 파일인 unistd에 정의 되어있다.


    #define __NR_setreuid            70


    따라서 shell code를 만들기전에 해야 할 일들은 모두 끝이났다.


    level20 uid ->3100

    setreuid system call num -> 70


    각 값들을 16진수로 바꾸어주면


    각각 0xC1C    , 0x46


    와 같다.


    이제 쉘을 짜보자


    주석으로 설명을 해놓았으니 생략하고



    --> "\x31\xc0\xb0\x46\x66\xbb\x1c\x0c\x66\xb9\x1c\x0c\xcd\x80"

    --> 총 14byte이다.







    짜잔,,, 풀었다.. 풀어버렸다.,..


    'war game Write up > FTZ' 카테고리의 다른 글

    level20  (0) 2018.11.18
    level18  (0) 2018.11.16
    level17  (0) 2018.11.14
    level 16  (0) 2018.11.14
    level15  (0) 2018.11.14
Designed by Tistory.