1. 项目概述:靶场商场网站安全测试实战
去年在给某电商平台做渗透测试时,我发现很多初级安全工程师面对真实业务场景往往无从下手。这正是我决定撰写这篇靶场实战指南的原因——通过模拟真实商场网站环境,手把手带大家掌握Web安全测试的核心方法论。
Pikachu、DVWA这些经典靶场确实能练手,但商业网站特有的多业务耦合、分布式架构等特性,往往需要更系统的测试思路。本文将基于一个模拟的B2C商场系统(包含会员中心、支付接口、商品管理等模块),演示从信息收集到漏洞利用的完整链条。
2. 测试环境搭建与工具链配置
2.1 靶场环境快速部署
推荐使用Vulnhub上的Mallory靶机镜像(基于Ubuntu 20.04),这个环境模拟了以下典型漏洞:
- 前端:jQuery 1.11.3(存在已知XSS向量)
- 后端:PHP 5.6.40 + MySQL 5.7(含弱口令账户)
- 中间件:Apache 2.4.29(未打补丁)
安装步骤:
# 下载OVA文件后导入VirtualBox vagrant init mallory_v1.0 vagrant up注意:务必在隔离的虚拟网络中运行,避免扫描到真实设备。我习惯用VirtualBox的"仅主机(Host-Only)网络"模式。
2.2 渗透测试工具包准备
我的标准工具组合(Kali Linux自带):
- 信息收集:Nmap 7.91 + dirb 2.22
- 漏洞扫描:Burp Suite Community + OWASP ZAP
- 漏洞利用:sqlmap 1.6 + commix 3.1
- 代理调试:Charles 4.6 + Fiddler Everywhere
关键配置技巧:
# 优化nmap扫描策略(避免触发WAF) nmap -sS -T4 --script=http-enum -Pn -oA mallory_scan 192.168.56.1023. 分阶段渗透测试实战
3.1 信息收集阶段
商场类网站需要特别关注:
- 子域名(促销活动常用二级域名)
- API接口(移动端往往存在未鉴权的接口)
- 第三方服务(支付网关、物流查询等)
实战记录:
# 发现后台管理地址 dirb http://mallory.test /usr/share/wordlists/dirb/common.txt输出显示存在/admin路径,返回302跳转(需要鉴权)
3.2 漏洞挖掘与利用
3.2.1 SQL注入绕过实战
在商品搜索框测试时发现报错信息:
Warning: mysql_fetch_array()...使用sqlmap进行自动化检测:
sqlmap -u "http://mallory.test/search?q=test" --batch --risk=3 --level=5成功获取管理员凭据后,发现密码为md5加密。通过cmd5.com解密得到明文"admin@123"
3.2.2 文件上传漏洞利用
在会员头像上传处绕过限制的技巧:
- 修改Content-Type为image/jpeg
- 使用双后缀名:shell.php.jpg
- 配合Burp修改文件头为GIF89a
上传后通过文件包含漏洞触发:
http://mallory.test/preview?file=../../uploads/shell.php.jpg4. 进阶攻击链构建
4.1 横向移动技术
获取Webshell后,通过以下方法提权:
# 查找SUID文件 find / -perm -4000 2>/dev/null # 利用vim.basic提权 sudo -l发现允许以root运行/usr/bin/vim.basic4.2 支付逻辑漏洞挖掘
关键测试点:
- 修改订单金额参数(如total=0.01)
- 重复提交同一订单号
- 并发请求造成库存超卖
Burp拦截到的典型脆弱请求:
POST /checkout HTTP/1.1 ... {"order_id":10086,"coupon":"DISCOUNT99","amount":999}修改为:
{"order_id":10086,"coupon":"DISCOUNT99","amount":0.01}5. 防御方案与加固建议
5.1 代码层防护
PHP安全写法示例:
// SQL注入防护 $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$input]); // 文件上传校验 $finfo = new finfo(FILEINFO_MIME_TYPE); if(!in_array($finfo->file($_FILES['file']['tmp_name']), ['image/jpeg','image/png'])){ die('Invalid file type'); }5.2 系统层加固
关键命令:
# 关闭危险函数 sed -i 's/disable_functions =.*/&,exec,passthru,shell_exec,system/' /etc/php/5.6/fpm/php.ini # 配置WAF规则 nano /etc/modsecurity/modsecurity.conf SecRuleEngine On SecRule REQUEST_URI "@contains select" "deny,status:403"6. 常见问题排查指南
6.1 扫描被拦截应对
现象:nmap扫描无响应 解决方案:
- 降低扫描速度:-T2
- 使用碎片扫描:-f
- 尝试不同扫描类型:-sS/-sT
6.2 漏洞利用失败分析
典型原因核查清单:
- 参数编码是否正确(如base64双重编码)
- 是否缺失必要的HTTP头(如X-Requested-With)
- 时间戳校验是否未绕过
7. 学习路径推荐
我的个人进阶建议:
- 基础:完成DVWA所有关卡(重点:SQLi/XSS/CSRF)
- 进阶:Pikachu靶场的文件包含、反序列化漏洞
- 实战:Vulnhub上Red系列靶机(模拟企业内网)
最后分享一个排查技巧:遇到复杂漏洞时,先用简单payload测试基础功能,再逐步增加复杂度。比如测试SQL注入时,先尝试'引发报错,再构造完整的union select语句。