상세 컨텐츠

본문 제목

[HackTheBox] Sightless

Penetration/HackTheBox

by obscurity_ 2024. 10. 16. 13:47

본문

 

 

이번 머신은 HTB에서 Active 되어있는 Sightless 머신입니다.

난이도는 Easy로 책정되어 있는데, 제 생각에 Easy까진 아니고

Medium 정도 되지 않을까 싶은데, HTB 자체가 원래 워낙

평균 난이도가 있다보니 Easy로 된 것이 아닐까 싶기도 합니다.

 

.

전체 포트는 21, 22, 80 3가지만 활성화 되어 있습니다.

FTP는 익명 로그인이 불가능했고, SSH의 버전 또한 취약하지 않았습니다.

80번 포트만 열려있을 경우에는 웹을 통해서 초기침투가 이뤄져야 하기 때문에

웹 취약점 진단 방법론을 사용해줍니다.

 

 

할당받은 IP 주소로 접속했을 때 sightless.htb라는 페이지를

찾을 수 없다고 나와서 접속이 안 됩니다.

/etc/hosts에 도메인 정보를 추가해줘야지 접속이 되겠죠

도메인을 추가해준 뒤에 10초 정도 기다렸다가 다시 접속하면

해당 도메인으로 접속이 됩니다.

 

ffuf -w /usr/share/dirb/wordlists/directory-medium.txt -u http://sightless.htb/FUZZ -e .txt,.md,.php,.zip,.html
ffuf -w /usr/share/dirb/wordlists/subdomain.txt -u http://sightless.htb -H "Host:FUZZ.sightless.htb" -fc 302
 

도메인을 획득했으므로 서브도메인 스캔과 디렉토리 스캔을 동시에 해줍니다.

하지만 이렇게 해서 획득한 정보는 없습니다.

그래서 홈페이지의 robots.txt와 소스코드를 확인해도 별다른 정보는 없었는데

홈페이지의 SQLPad Start Now 버튼을 누르니 sqlpad라는

서브도메인이 있는 곳으로 이동되었습니다.

당연히 DNS 정보가 없으므로 페이지를 찾을 수 없었기에

/etc/hosts에 다시 해당 도메인을 추가해줍니다.

 

이동된 SQLPad 페이지에서는 SQL 쿼리문을 테스트 할 수 있는

소프트웨어인 SQLPad 페이지가 나옵니다.

SQLPad에는 CVE가 몇가지 존재하는데,

계정 정보를 알 수 없는 상태에서 쉘을 연결할 수 있는 취약점이 존재합니다.

아래의 깃허브 파일을 로컬로 가져온 뒤에 이것을 실행하여

리버스쉘을 획득해줍니다.

 

 

https://github.com/0xRoqeeb/sqlpad-rce-exploit-CVE-2022-0944

 

연결된 계정은 SQLPad의 root 계정입니다.

쉘이 존재하는 사용자 계정은 michael과 node가 존재했지만

해당 계정들의 홈 디렉토리에서는 별다른 정보가 없습니다.

 

하지만 초기침투에 성공한 계정은 root 계정이므로

해당 계정들의 패스워드가 레인보우테이블에 존재하기만 한다면

해쉬크래킹이 가능할 것이기에 /etc/passwd와 /etc/shadow 파일을 가져와서

로컬로 옮겨줍니다.

 

unshadow passwd shadow > hash 
john --wordlist=/usr/share/wordlists/rockyou.txt hash --pot=crack
 

 

해쉬크래킹에 성공했으며 michael 계정의 패스워드는 insaneclownposse입니다.

이 정보를 통해 해당 계정의 SSH로 접속을 해줄 수 있습니다.

 

여기서부터 약 10시간? 정도를 권한상승에 삽질을 많이 했었습니다.

제가 아는 방법론을 모두 사용해봤는데 특이사항이라고는

크론 스케줄러에 등록되지 않은 특정 스케줄이 1분마다 반복되는 것이었습니다.

이것을 알 수 있던 방법은 pspy64를 통해서 명령을 모니터링 했습니다.

 

시간을 보면 알겠지만 정확히 1분마다

/home/john/automation/healthcheck.sh라는 스크립트가 실행됩니다.

이 파일이 뭔지 내용은 확인하지 못하지만

적어도 어떤 스크립트가 매분 실행된다는 것은 알 수 있습니다.

 

 

ps -aux를 통해서 프로세스 리스트 중 john의 이름으로 실행되는 것을

확인해봤을 때는 administration.py와

크롬 드라이브를 54931 포트에서 실행하는 것이 확인되었습니다.

 

솔직히 여기까지만 하더라도 별로 감은 안 왔었습니다.

그 다음으로 제가 확인했던 것은 소켓 프로그램 리스트입니다.

ss -tulnp 명령을 통해 소켓 리스트를 확인하니

수상해보이는 8080 포트가 활성화 되어있는 것이 확인되었습니다.

 

현재 침투한 michael 계정은 SSH로 접속했기 때문에

SSH를 이용한 로컬 포트포워딩이 가능합니다.

위와 같이 로컬 포트 포워딩을 해준 뒤에 로컬 브라우저에서

8080포트로 접속을 해주면 아래와 같이 Froxlor 페이지가 나옵니다.

 

여기서 로그인을 해야하는데, Froxlor에 대한 CVE는 존재하긴 하지만

계정정보가 필요한 CVE라서 지금 상태에서는 그다지 도움되진 않습니다.

근데 ps aux를 통해 chrome에 대한 프로세스 정보들을 확인해보면

8080 포트 이외에도 다른 포트들도 존재하는 것이 확인됩니다.

 

chromedriver은 해당 서버에서 크롬 브라우저를 통해서

자동화된 동작을 해서 웹 통신을 한다는 것을 의미한다고 합니다.

그리고 이번에 처음 알게된 것인데 Chrome Inspect 기능을 통해서

서버에서 만약 클라이언트 단에서 어떤 동작을 하는 것을

포트 포워딩을 통해 디버깅 할 수 있다고 합니다.

 

이제 준비해야 하는 것은 다른 포트에서의 디버깅을 위하여

포트포워딩을 여러개 해주는 것입니다.

ss를 통해 확인한 소켓 리스트를 모두 로컬 포트 포워딩을 해줍니다.

 

그런 다음 chrome://inspect로 접속을 해준 다음

Configure에서 포워딩한 포트들을 모두 매핑시켜줍니다.

 

이렇게 하고 설정을 하면 46791 포트에서

자동화된 스케줄러가 크롬 브라우저를 통해 admin.sightless.htb로

접속하는 것이 확인됩니다.

 

우리가 해야할 것은 inspect를 클릭하여

자동화된 동작이 어떤 것을 수행하는지 디버거 모드를 통해서 확인하고

정보를 수집하는 것 뿐입니다.

 

 

디버거 모드에서 로그인이 성공한 순간 디버깅을 중지시킵니다.

그 다음 Network 탭에서 index.php의 payload 항목을 클릭하면

로그인이 성공한 직후의 index.php에 전송한 페이로드를 확인할 수 있는데

이곳에서 관리자 계정의 계정정보가 노출되고 있습니다.

 

 

우리는 이제 이 관리자 계정을 통해 로그인을 할 수 있습니다.

admin:ForlorfroxAdmin

 

로그인을 성공한 이후에는 이곳에서 명령을 실행하는 것만이 남았습니다.

 

비록 Froxlor에 관한 CVE들은 현재 모두 사용되지 않는 것 같고

2.1.8이라는 버전에 맞는 취약점도 존재하지는 않는 것 같습니다.

하지만 대쉬보드의 PHP 항목에서 PHP-FPM에서는

커맨드를 입력할 수 있는 곳이 존재합니다.

이곳에서 root 계정의 id_rsa 값을 /tmp 디렉토리로 옮긴 다음

권한을 수정하는 커맨드를 입력해줍니다.

 

 

커맨드를 입력한 뒤에는 System>php-fpm으로 접속하여

활성화 되어있던 php-fpm을 비활성화 했다가 다시 활성화를 해줍니다.

pspy64를 켜두고 이 동작을 수행하면 입력했던 커맨드가 실행된 것을

포착할 수 있습니다.

 

이렇게 커맨드가 실행된것을 확인했으면 /tmp 디렉토리로 이동하여

id_rsa가 있는지 확인해줍니다.

 

root 비밀키가 777 권한으로 tmp에 복사된것을 확인할 수 있습니다.

이제 이 키를 scp를 이용해서 로컬로 전송해준 뒤에

루트 사용자로 비밀키를 이용해서 로그인을 해줍니다.

왜그런지 이유는 모르겠지만 michael 계정에서 로컬로

scp 전송은 되지 않아서 로컬에서 scp를 이용해서 michael 계정에 있는

/tmp/id_rsa를 직접 가져와야 했습니다.

 

 

이제 획득한 비밀키의 권한을 600으로 변경해주고

비밀키 접속을 해줍니다.

 

해당 머신을 풀면서 Chrome Inspect에 대해서 배우기도 했고

로컬 포트포워딩으로 연결한 곳에서 다른 포트로부터 수신될 수도 있다는 생각을

못 했었는데 다양하게 배운 것 같습니다.

하지만 아쉽게도 실무자 분들에게 물어보니 이 기능을 사용해서

권한상승을 했던 적은 없었고, 별로 사용되지도 않는 로직(클라이언트 단에서 직접 입력하는 것이)이라고 하네요.

 

하지만 그럼에도 배운게 많았던 머신이라고 생각이 듭니다.

 

'Penetration > HackTheBox' 카테고리의 다른 글

[HackTheBox] Active  (0) 2024.10.29
[HackTheBox] Sauna  (1) 2024.10.29
[HackTheBox] Return  (2) 2024.10.17
[HackTheBox] Timelapse  (3) 2024.10.15
[HackTheBox] Cicada  (2) 2024.10.13

관련글 더보기