[HTB] Cohort (Easy_Linux)
🔒 보호된 글입니다
HTB Active 머신 스포일러 방지 등 암호가 걸려있는 포스트입니다.
비밀번호가 일치하지 않습니다.
Cohort has been Pwned OilLampCat has successfully pwned Cohort Machine from Hack The Box
1. 시작에 앞서
별이 4점 이하인 것에는 이유가 있더라.
왜 이게 어떻게 easy 인가 싶은 난이도랄까. 아니 어쩌면 그저 내가 길을 잘못 찾아들어가서 이런 일이 생긴 것일지도 모르겠다.
일단 내가 지금 6일간 아픈 중이라 몽롱한 상태로 쓴다는 것을 유의하고 라이트업을 읽어주길 바란다.
2. 초기 침투 : 정찰 및 정보 수집 (Reconnaissance & Enumeration)
초기 계정 없고, 일단 보통 그럼 http 웹 서비스가 열려있을테니 보통은 그걸 먼저 확인하면 되겠다.
하지만 난 지금은 htb를 풀고 있잖아?
그래서 나온 nmap의 결과를 보자면
22/ssh, 80/http, 443/https 가 있다. 이놈의 https…
일단 도메인이 cohort.htb라고 하니 /etc/hosts에 등록해주자.
이제 web을 들어가 둘러보면 뭔가 분석해주는 사이트가 나오고,
뭐하는 곳인지 등이 나오는데 로그인이나 다른 페이지는 찾지 못했다.
저 Client insights 부분만 존재했다.
적어도 정찰 할 때 dirsearch나 fuzz 등으로 서브 도메인, 디렉토리 브루트 포싱 등을 통한 결과는 그랬었다.
유일하게 들어갈 수 있는 곳에 접속해보면 source URL이라고 해서 csv 등의 파일을 올리면 그걸 가져와 가능 불가능 하면서 알려주는 페이지가 나온다.
옆을 읽어보면 보안 이슈로 루프백 주소는 불가능해욥 이라고 한다.
물론 그걸 우린 믿지 않겠지만.
보아하니 csv, json 등등을 넣을 수 있는데 일단 암거나 넣어보기 위해 내 공격자 컴퓨터를 열어봤다.
굳이 딱 csv나 json이 아니여도 되네?
그래서 바로 박치기를 시전했다. 리버스쉘 보내면 그거 읽어서 쉘이 떨어지겠지? 하고.
솔직히 easy 잖냐. 당연히 해볼 법한 생각 아닌가?
근데 이건 틀렸다. 저건 그냥 그 데이터를 읽어올 뿐 실행은 하지 않았다.
3. 초기 침투 (Initial Foothold / Exploitation)
근데 그렇다면 내부 루프백이 안 된다고 했었는데 되게 하면 어떻게 되는거지?
하는 생각이 들었고 얼마전 풀었던 문제 중에 10진수의 IP 주소를 8진수로 변경해서 통과해야했던 문제가 떠올랐다.
그리고 그건 정확했다.
분명히 루프백이 안 된다고 했지만 10진수인 127.0.0.1이 아니라 8진수인 0177.0000.0000.0001이라면?
쉽게 통과가 되어 지금 보고 있는 이 페이지를 띄워줬다.
burp로 열어도 되겠다만 이게 무슨 일인지 wsl에선 burp gui가 자꾸 깨지는 바람에 그냥 f12의 네트워크 탭에서 정보를 찾아왔다.
아니 근데 위에서 찾았던 https가 도대체 어디서 쓰이는 건가 했더니 여기서 쓰이더라.
api 요청을 보낼 때 https를 통해 보낸다니.
그래서 그럼 내가 이 기능을 이용해 어떤 것들에 접속할 수 있을지, 이번엔 내부 포트를 통해 스캔을 쭉 진행했다.
외부에서도 봤던 포트들이 내부에도 몇개 돌고 있었고, 그 중엔 특이한 5000번과 8000번 포트도 찾아낼 수 있었다.
근데 난 이렇게 찾았다만…
나중에 이것 저것 더 해보다보니 status위치에 들어가서 그냥 확인할 수도 있었다.
어째서…?
게다가 이 때 host가 nb-문자열.cohort.htb 라는 서브 도메인을 갖고 있다는걸 알 수 있다
이러니까 fuff를 돌려도 못찾지.
그래서 도메인을 추가해주고
접속해보면? 비밀번호를 통해 로그인 해라! 라고 한다.
how? 버전도 모르는데?
그래서 바로 다시 본래 사이트로 돌아와 8888번 포트의 api를 이용해 version을 찍어봤다.
0.20.4
이제 사이트의 타이틀을 통해 marimo라는 것도 알게 되었고, 거기다 버전까지!
그렇게 나온 결과를 통해 검색해본 결과 CVE-2026-39987이라는 취약점을 발견할 수 있었다.
무려 Pre-Auth RCE (웹 소켓을 이용한)이다.
로그인 하지 않고도 코드 상에 ws혹은 wss를 불러내 연결할 수 있는 놀라운 CVE였다.
솔직히 여기까지 오는데 삽질을 너무 많이 해서 거의 3시간을 썼달까.
다행히 위 코드를 이용하면 바로 revshell을 걸 수 있었다. 만.
뭔가의 보안 조취인건지 자꾸만 리버스쉘이 걸리고 즉시 끊겼다.
하지만 이건 간단했다. 끊기기 전에 바로 bash 쉘을 새로 열어주면 될 뿐.
보아하니 저 Hangup이 문제인 것 같았는데 저게 리눅스에서 세션이 닫히면 터미널 닫혔으니까 너네도 종료해! 하고 SIGHUP 시그널을 보냈던 것이다. 근데 이제 내가 끝나기 전에 새로 쉘을 열어버린 것이고
나는 침투를 성공 해버린 것이야.
그렇게 유저 플래그를 얻을 수 있었다.
4. 권한 상승 (Privilege Escalation)
자 그럼 marimo라는 유저로 들어왔으니까 이제 뭘 할 수 있나 또 정찰을 해봐야겠지?
이 때 sudo -l은 권한이 없었고, ps -aux 결과가 엄청 길었는데 그 중 눈에 딱 띄었던게 위 이미지의 부분이였다.
8888번 포트(아까 우리가 찾은거)에 token password도 있기에 한번 로그인 해보았다.
다만 그래서 뭐? 솔직히 뭘 할 수 있는지 이것저것 코드도 실행시켜보고 설정도 들어갔는데 찾지 못했다.
그래서 linpeas를 준비해
보내버리고
tmp 폴더에 하나 만들어서 실행시키면?
정말로 긴 내용들이 있지만 그 중엔 아예 CVE-2026-41651 이라는 취약점이 존재한다고 알려줬다.
검색해보니 바로 뭐라고 설명해주는데 좀 어려워서 자세하게 해달라고 하니
그렇다고 한다.
POC는 Vozec/CVE-2026-41651을 이용했다.
공격자에서 받아 넘겨주고 이것도 동일하게 /tmp 폴더에 만들어주면?
명령어 한번으로 root의 euid가 생성된 파일을 생성해낼 수 있다.
위치는 여기 있으니까.
이렇게 실행할 수 있다.
참고로 위처럼 편하게 보겠다고 그냥 /bin/bash 를 스폰해버리면 기껏 만든 root 권한이 없이 이 쉘을 실행한 주최인 marimo의 것으로 되니 해주고 싶다면 os.setuid(0)을 꼭 해주기로 하자.
일케 하면 더 예쁘게 볼 수도 있다.
마치며
솔직히 이번 문제 풀면서 초기 침투 부분을 너무 머리 쓰기도 했고 자꾸 어떤 단서가 딱 나왔는데 이게 지금 쓰일게 아닌데도 꼭 붙잡고 있다보니 어렵게 느껴졌었나보다.
이렇게 보니까 되게 쉬워보이는건 왤까…
솔직히 말해서 ws를 이용하는 부분을 진행할 때 서브 도메인이 있을거라는 생각을 아예 못해서
아니 그럼 도대체가 poc를 어느 위치에 써야하는거지? 터널링으로 내부에 침투 할 수 있는 것도 아닌데?
하면서 해맸던게 어렵다 느낀 가장 큰 이유였던 것 같다 허허…
게다가 easy인 이유를 linpeas 돌리면 되니까 라고 해서 문제를 출제한 것 같은데 어딜 봐서 이게 easy냐.
cve를 찾지 못했으면 못 풀었을텐데 점수가 낮은데는 이유가 있달까.
이번 휴가동안 계속 몸이 아파서 지금 살짝 매롱한 상태인데 담번에 쓸 땐 안 아프길.
그럼 Happy Hacking이다!




































