ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Study] ze0rtps CTF 2021 infected Writeup
    CTF/zer0pts CTF 2021 2021. 3. 9. 22:52

     

    문제 서버에 접근하면 아래와같은 안내문이 출력된다. ????에 해당하는 네자리 문자열을 요구하는듯 하다.

    주어진 pow.py를 실행시키면 Suffix, Hash 를 요구하는데 각각에 sha256() 안에 ????를 제외한 부분과 뒤의 해쉬값을 입력해주면 네자리 문자열을 출력해준다. 이를 입력하면 쉘에 접근이 가능하다.

     

     

    플래그 획득을 위해서는 /root에 접근해야 하는데, 권한이 없다.

    또 하나의 주어진 파일의 이름이 backdoor이므로 이와 관련성을 찾아보았다.

    backdoor이름으로 파일 검색을 해보니, /dev/backdoor 라는 device가 존재한다.

    해당 디바이는 character device임을 알 수 있었다.

    (character device란, 버퍼 캐시등을 이용하지 않고 데이터를 읽고 쓰는 디바이스이다.)

    pr0gr4m.tistory.com/entry/Linux-Kernel-5-Character-Device-Driver

     

    [Linux Kernel 5] Character Device Driver

    Character Device Driver는 유저 프로세스로부터 직접 (버퍼 캐시 등을 사용하지 않고) 데이터를 읽고 쓰는 디바이스 드라이버다. 이 외에 블록 디바이스, 네트워크 디바이스 드라이버는 추후 포스팅

    pr0gr4m.tistory.com

    이제, 주어진 backdoor파일을 분석해보자.

    가장 핵심 로직이다.

    문자열을 : 단위로 나누어 s1, file, nptr 로 구분하고 s1이 b4ckd00r일 경우 nptr의 값으로 file에 chmod 명령을 수행한다.

    echo 'b4ckd00r:FILE:4095' > /dev/backdoor 와 같이 사용 가능하다. (4095는 전체 권한) 

     

    echo 'b4ckd00r:/root/*:4095' > /dev/backdoor 등으로 /root/ 디렉토리나 /root 안에 있는 파일의 권한을 직접 수정하려고 시도하였으나 잘 되지 않았다.(FILE에 정확한 경로와파일명을 입력해야 작동하는것으로 추정된다.) 

     

    따라서 sudo를 통해 권한을 부여받아서 직접 /root 에 접근해보기로 하였다.

    권한 획득 시나리오는 다음과 같다.

    1. /etc/passwd 권한을 전체 권한으로 수정한다. (내용 수정을 위해)

    2. /etc/passwd에 sudo라는 계정을 추가한다. (/etc/sudoers 설정이 유효하려면 /etc/passwd에 존재하는 계정이어야 한다.)

    3. 패스워드를 모르므로 /etc/sudoers 파일 수정을 통해 패스워드를 묻지 않도록 설정한다.

    4. 제한없이 sudo를 사용할수있으므로 플래그를 획득한다.

     

    이를 실제 수행해보았다.

    /etc/passwd 권한 수정
    /etc/passwd에 sudo 계정 추가
    /etc/sudores 권한 수정
    패스워드 없이 sudo 사용 가능하도록 설정
    권한 문제로 sudo실행 시 에러가 발생하여 원래 권한으로 되돌린 후 실행
    플래그 획득

    FLAG = zer0pts{exCUSE_m3_bu7_d0_u_m1nd_0p3n1ng_7h3_b4ckd00r?}

     

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

     

    리버싱 실력보다도 리눅스에 대한 이해도가 부족해서 해결하지 못했던 문제라 아쉬움이 남았다.

     

    * character device는 문자열을 통해 버퍼캐시 없이 데이터를 읽고 쓰도록 하는 디바이스이다

    * echo '~~~' > /dev/~ 를 통해 전달 할 수 있다.

    * /etc/sudoers 파일을 통해 sudo관련 설정을 제어할수 있다.

    * /etc/sudoers 수정 시 /etc/passwd에 존재하는 계정이어야지 유효하다.

    * [ 사용자명 ALL=NOPASSWD: ALL ] 설정을 통해 패스워드 없이 sudo를 사용할 수 있게 설정 가능하다.

    * sudo -i 를 통해 현재사용자가 sudo에 login 가능하다.

    반응형

    'CTF > zer0pts CTF 2021' 카테고리의 다른 글

    [Study] zer0pts CTF 2021 Kantan Calc Writeup  (0) 2021.03.10

    댓글

Designed by Tistory.