HTB LABS:Cap 문제를 해결한다. LABS는 Adventure Mode와 Guided Mode가 존재한다.
Adventure Mode는 가이드 없이 user.txt, root.txt를 입력하는 모드이고 Guided Mode는 문제를 세분화하여 단계마다 필요한 사항들을 알려준다. 본 풀이는 Guided Mode를 이용하여 해결하였다.
목표를 대상으로 포트스캐닝을 실행한다.

총 3개의 TCP 포트가 열려있다(-p-옵션을 준 것이 아니라 더 열려있을 수는 있으나 사이트 기준으로 3개의 포트가 정답이다.).

80번 포트에 서비스중인 gunicorn은 무엇일까?
Gunicorn이란 Python 웹 애플리케이션을 실행해 주는 WSGI HTTP 서버이다. WSGI란 Web Server Gateway Interface의 약자로, 파이썬 웹 서버와 파이썬 웹 애플리케이션의 표준 인터페이스이다. 즉, 서버와 파이썬 앱(Flask 등)을 연결하는 인터페이스이다.
msfconsole을 통해 gunicorn 관련 취약점을 검색한다.

msfconsole 상에는 크게 없는 듯 하다. 구글링을 해보자.

위와 같은 취약점이 있다고 한다. 확인 후 다음 단계로 넘어가보자.
해당 ip주소에서 운영되는 사이트는 아래 이미지와 같다.

자동으로 Nathan 이라는 계정에 로그인되어있고, 이벤트 대시보드창이 표시된다.
문제에서 Security Snapshot을 실행하면 리다이렉트되는 경로가 있다고 하니 해당 링크를 눌러보자.

http://10.129.132.24/data/2로 리다이렉트된다. 따라서 문제에서 요구하는 something은 data이다.
이게 무슨 말일까? 다른 유저의 스캔에 접근할 수 있나?? 라는 것인데, 이는 서브디렉토리 스캔을 통해 확인할 수 있다.


/data 디렉토리는 여러 서브디렉토리들을 포함하고 있는데, 이는 모두 패킷정보를 담고 있다.

그 중 /data/0은 이전과 다른, 많은 수의 패킷정보를 담고있다.
그러므로 답은 yes.

이전의 /data/0파일을 분석해보자. pcap 파일이므로 wireshark를 통해 이를 확인할 수 있다.

FTP를 통해 파일을 받은 흔적이 있고, 평문으로 데이터가 전송되었으므로 ID/PW가 모두 노출되어있다. 해당파일 명은 0.pcap이다.

또한 ID/PW는 각각 nathan:Buck3tH4TF0RM3! 이다.
Task 4에서 확인할 수 있듯 0.pcap의 FTP 통신이 암호화되어있지 않으므로 FTP에서 ID/PW를 획득할 수 있다.

FTP에 사용된 ID/PW 정보는 SSH 연결에 사용될 수 있다. 그러나 FTP 서버가 별도의 사용자 인증 DB를 사용한다면 별개의 인증정보를 사용해야한다. 확인해보자.

로그인에 성공했다. 따라서 답은 ssh이다.


linenum.sh을 target에서 실행한다.

sudo가 SUID 파일이지만 nathan이 sudoers 파일에 기록되어있지 않은지 nathan 계정으로는 sudo를 실행할 수 없다.

그러던 중 python3.8에 cap_setuid가 설정되어 있는 것을 확인했다.

찾아보니 이는 프로세스의 UID를 변경할 수 있는 capability라고 한다.
capability는 루트권한에 부여된 특권 중 일부만을 이용할 수 있는, 쉽게 말해 부분적인 능력이라고 한다.
따라서, python3을 이용해 UID를 변경한 후 쉘을 실행시키면 루트쉘을 실행할 수 있을 것이고, 해당 부분의 답은 /usr/bin/python3.8.
python을 실행시켜 프로세스의 uid를 수정한 다음 쉘을 실행시킨다.


root 디렉토리의 root.txt 파일을 읽는다.
※python이 setuid(0)을 실행할 때 프로세스의 uid가 0으로 변경된다. 이후 os.system('/bin/sh')을 실행하면 fork()를 실행한 후 execve()를 실행한다.
fork()는 부모프로세스의 권한을 복사하고 execve()는 기존의 프로세스 정보를 새로운 프로세스로 덮어쓴다. 이때 권한은 기존의 권한을 유지한다. 따라서 쉘이 루트쉘로 실행되는 것이다.