워게임,CTF/Hack the box

[Hack the box] #7 TwoMillion

Haemaa 2024. 12. 27. 00:00

이번에 풀어볼 문제는 Retired Machine에 존재하는 TwoMillion이다.

아직 무료 요금제 상태라서 Retired에 있는 게 사라지기 전에 풀어보고 싶은 마음에 ㅋㅋㅋ Play하게 되었다.

 

 

 

원래 -p- 옵션을 주고 nmap을 돌리려 했으나 너무 오래 걸려서 그냥 nmap 돌림

22번 포트를 제외하면 80번 웹 포트만 열려있는 것 같다.

 

/etc/hosts에다가 도메인을 등록해준다.

 

 

web으로 접근하니 Hack the box labs 사이트가 나온다

 

 

아무래도 버프를 켜야할 것 같다.

 

open browser 자주 쓰는 편

 

 

login 기능이 보이길래 test를 넣어봤더니

 

error 파라미터에 있는 텍스트가 그대로 에러에 뜨는 게 보인다.

 

싱글 쿼터를 넣어줬더니 그대로 반영됨..

XSS 인가?

 

했으나 HTML Entity 처리되어 fail.

 

 

여기는 아닌 것 같고 가만히 보니 여기 join이라고 있다.

 

너 member가 될 준비가 됐어? 응!

 

Invite Code가 필요한 것 같다.

 

근데 소스코드를 보니 ajax를 이용해서 client 측에서 검증하는 것 같다.

invide code가 맞으면 register 페이지로 이동

틀리면 경고창을 띄우는 if else 분기문이다.

 

바로 url에 register를 입력하니 페이지에 접근이 가능했다.

 

이 상태에서 테스트 계정으로 가입시도했으나 실패했다. Invide Code를 여기서도 검증하는듯.

 

결국 invite code가 필요하구나.

 

 

invite 페이지 접근 시 호출되는 inviteapi.min.js 소스코드이다.

 

이 소스코드를 de4js로 넣어주니 verifyInviteCode와 makeInviteCode를 획득할 수 있었다.

 

아 물론 deobfuscate 되기 전 코드로도 makeInviteCode 함수를 찾아낼 수 있다. 근데 이건 경험치가 있어야 인사이트가 생길듯..

 

 

js 파일에서 찾았으면 이렇게 F12 개발자 도구에서도 찾아낼 수 있다.

makeInviteCode함수에 보인 /api/v1/invite/how/to/generate에 code를 넣어주니 웬 이상한 data와 enctype을 뱉어준다.

구글에 검색해서 ROT13 디코더 페이지에서 디코딩해주니 /api/v1/invite/generate로 가라고 한다.

 

 

/api/v1/invite/generate로 가니 base64로 디코딩 가능한 코드를 제공해준다.

 

이 코드를 이용해 /invite에 입력해주니 정상적으로 register 페이지로 넘어갈 수 있었다.

 

 

register를 눌렀더니 별 에러가 안 뜬다. 등록이 된 것 같다.

 

 

로그인이 성공했다!

 

 

돌아다니다보니 다른 메뉴는 거의 막혀있고 Labs > Access에서 Connection Pack을 다운로드 받을 수 있었다.

이 Server에 접근해서 뭔갈 얻어내야 하는 것 같다.

 

그런데 openvpn파일을 실행시키려니 계속 오류가 뜨는 것 같았다.

 

web페이지의 Attention에 보니 해당 상황일 때 안내가 적혀있었다.

 

vim을 통해 변경완료!

 

그런데도 여전히 작동이 되지 않았다.

 

그런데 소름! 인터넷을 보고 알게되었는데 regenerate를 누를 때 불러와지는 api를 지우고 api/v1 호출 시 api 종류를 획득할 수 있었다.

 

그래서 PUT 메서드를 사용하는 제일 밑에 settings/update api를 호출했더니 invalid content type이라는 message가 나온다.

 

content type을 변경해주니 email parameter가 없다고 한다.

 

email 파라미터를 주면 다음으로 is_admin 파라미터가 없다고 한다.

 

is_admin은 0 or 1의 값만 가질 수 있다고 한다.

 

응답을 보니 haemaa 아이디가 admin으로 레벨업했다.

 

아까 확인한 admin/auth apii에서 message가 true인 것을 보아 admin이 맞나보다.

 

이제 3개중 안썼던 api는 admin/vpn/generate 이므로 POST 메서드로 전송하니 또다시 content type 에러가 뜬다.

 

username으로 테스트값을 주니 다운로드를 수행하고 있다.

 

오잉? #을 넣었더니 Content-Length에 뭔가 변화가 있다.

 

세미콜론을 넣었더니 결과가 아예 안나왔다.

 

 

여긴 Command Injection에 취약한 api였고, 세미콜론과 # 사이에 원하는 명령어를 실행시킬 수 있었다.

 

ippsec의 유튜브를 참고한 결과 ;와 # 말고도 $ (sleep 2) 로 command injection이 되는지를 체크할 수 있다는 걸 알았다.

 

ls -alh 명령어를 입력하니 숨김 처리 되어있던 .env 파일을 확인할 수 있었다.

 

이 파일을 확인했더니 DB admin계정과 PASSWORD를 획득했다. 아마 핵더박스 문제 특성상 이 계정이 ssh 로도 접근가능한 계정일 것 같지만 일단은 보류해보자.

 

whoami 결과 www-data 웹권한이므로 사실 할 수 있는 게 거의 없다.

 

revshell 사이트에서 busybox 페이로드를 넣었더니 연결이 되었다.

드디어 붙었다! 근데 10.0.2.15 말고 왜 10.10.14.83에서 되는거지?

 

 

ls도 잘된다.

 

 

달러 쉘을 얻기 위해서 python3 -c import pty를 실행시켜준다.

 

근데 여기서 www-data라서 su admin 입력하고 아까 획득한 admin의 비밀번호를  넣어주니 admin으로 접속이 가능했다.

 

 

user flag를 획득했다.

 

 

 

root flag 획득

 

후속 공격을 위해서 정보를 찾아보자.

sudo -l은 되는 게 없었다.

 

setuid가 설정된 파일을 찾았으나 마땅한게 보이지 않았다.

 

 

 

 

 

 

 

그 후 ./linpeas.sh > linpeas_result.txt를 실행시켜 txt 파일로 저장해준다.

 

하지만 아무런 답도 얻지 못했다.

 

ssh로 다시 접속해보았다.

 

어라 근데 쉘 위 문단에 You have mail이라고 메일이 있다는 알림이 있다.

 

ch4p@2million.htb라는 분한테서 OverlayFS/ FUSE 가 의심스러우니 System OS를 패치하라는 내용이었다.

 

overlayfs cve를 검색해보니 CVE=2023-0386이 검색되었다.

 

구글링 결과 해당 서버는 CVE-2023-0386 취약점이 존재하는 걸 알았다.

 

아래 링크를 통해 exploit을 진행했더니 root 권한을 획득할 수 있었다.

https://github.com/xkaneiki/CVE-2023-0386

 

 

Pwned 완료!

 


출처 : https://ludvikkristoffersen.medium.com/tcm-practical-ethical-hacking-command-injection-0x01-reverse-shell-b20f34307d2f

CVE-2023-0386 분석 : https://she11.tistory.com/242

'워게임,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