20253918 2025-2026-2 《网络攻防实践》第10次作业
20253918 2025-2026-2 《网络攻防实践》第10次作业
1. 实践内容
本次实践聚焦网络攻防领域中两类典型的注入式安全漏洞 ——SQL 注入与跨站脚本(XSS),以 SEEDUbuntu-16.04-32bit 为核心实验环境,分别基于员工管理 Web 应用和 Elgg 社交 Web 应用,系统验证攻击原理、实施路径,并探索对应的防御方法。实践内容分两大模块展开,具体如下:
1.1 SEED SQL 注入攻击与防御实验
本模块以存在 SQL 注入漏洞的员工管理 Web 应用为载体,该应用后台依托 MySQL 数据库(库名 Users,核心表 credential)存储员工 eid、密码、薪资、ssn 等敏感信息,支持管理员(特权角色)和普通员工(普通角色)两类身份的权限操作。实验核心目标为验证 SQL 注入对 SELECT/UPDATE 语句的攻击逻辑,掌握基于参数绑定的漏洞修复方法,具体子任务如下:
1.1.1 实验环境部署
完成 SEEDUbuntu-16.04-32bit 虚拟机的创建、启动及基础配置,包括主机名自定义(hostname 命令)、Apache Web 服务状态验证(sudo service apache2 status)、MySQL 数据库权限登录(mysql -u root -p),确保员工管理 Web 应用的基础运行环境可用。
1.1.2 SQL 基础查询验证
针对 Users 数据库的 credential 表执行标准 SQL 操作,掌握数据库交互基础语法,具体包括:
- 执行 show databases; 查看系统数据库列表,使用 use Users; 切换至目标数据库;
- 执行 show tables; 查看数据库表结构,通过 select * from credential; 执行全表查询;
- 执行条件查询(select * from credential where Name = 'Alice';),验证精准查询逻辑的正确性。
1.1.3 SELECT 语句的 SQL 注入攻击
针对 Web 应用登录功能(GET 方法实现),利用 SQL 语法特性构造注入载荷,实现无密码登录,核心任务为:
- 分析登录功能源码(unsafe_home.php),确认用户输入直接拼接至 SQL 查询语句的漏洞点;
- 构造注入式用户名(如 Admin'#、Alice'#),利用注释符(#)截断密码校验逻辑,绕过身份验证;
- 验证注入载荷对 SELECT 查询语句的篡改效果,明确 “未过滤用户输入 + 语句拼接” 是 SQL 注入的核心成因。
1.1.4 UPDATE 语句的 SQL 注入攻击
针对员工信息修改功能(unsafe_edit_frontend.php/unsafe_edit_backend.php),构造注入载荷篡改敏感数据,核心任务为:
- 分析信息修改功能源码,确认 UPDATE 语句的用户输入拼接逻辑;
- 构造注入载荷(如 ', Salary='20253918' where name='Alice'; #),篡改 Alice 的薪资字段;
- 验证 UPDATE 语句注入对数据库数据的篡改效果,明确数据更新场景下 SQL 注入的危害。
1.1.5 SQL 注入漏洞的防御实现
基于预编译语句(Prepared Statement)的参数绑定方法修复漏洞,核心任务为:
- 对 unsafe_home.php 文件,将 SQL 语句修改为预编译形式(SELECT ... WHERE name= ? and Password= ?),通过 bind_param ("ss", $input_uname, $hashed_pwd) 绑定参数;
- 对 unsafe_edit_backend.php 文件,将 UPDATE 语句修改为预编译形式(UPDATE credential SET nickname=?,email=?,address=?,PhoneNumber=? where ID=$id),绑定参数;
- 验证修复后注入载荷失效,确认参数绑定对 SQL 注入的防御有效性。
1.2 SEED XSS 跨站脚本攻击实验(Elgg)
本模块以存在 XSS 漏洞的 Elgg 社交 Web 应用为载体,该应用支持用户资料编辑、好友添加、资料查看等功能,用户密码遵循 “seed + 用户名” 规则(管理员账户为 Admin/seedelgg)。实验核心目标为验证 XSS 攻击的执行逻辑、传播特性,掌握基于 HTML 过滤的防御方法,具体子任务如下:
1.2.1 恶意脚本注入与弹窗验证
在用户资料字段嵌入 JavaScript 脚本,验证 XSS 脚本的客户端执行效果,核心任务为:
- 登录 Alice 账户进入资料编辑页面,在 Brief description 字段嵌入,验证其他用户查看该资料时的弹窗告警;
- 替换脚本为,验证 XSS 脚本对客户端 Cookie 信息的读取能力。
1.2.2 基于 XSS 的 Cookie 信息窃取
构造含远程请求的 XSS 脚本,将受害者 Cookie 传输至攻击者主机,核心任务为:
- 获取攻击者虚拟机 IP 地址,构造脚本:;
- 在攻击者主机执行 nc -l 1921 -v 监听端口,验证 Boby 访问 Alice 资料时,Cookie 信息被窃取并传输至攻击者主机。
1.2.3 无交互添加好友的 XSS 攻击
分析 Elgg 好友添加的 HTTP 请求逻辑,构造 XSS 脚本实现无交互加好友,核心任务为:
- 通过浏览器开发者工具抓包,获取添加好友的请求 URL、令牌参数(__elgg_ts、__elgg_token)及用户 GUID;
- 构造 XMLHttpRequest 请求脚本,实现受害者访问 Alice 资料时,自动向 Alice 发送好友添加请求;
- 验证无需受害者干预即可完成好友添加的攻击效果。
1.2.4 基于 XSS 的受害者资料篡改
构造 XSS 脚本篡改受害者个人资料,核心任务为:
- 分析 Elgg 资料编辑的 POST 请求参数(用户 GUID、资料字段、令牌参数等);
- 构造包含 XMLHttpRequest 的 POST 请求脚本,实现受害者访问 Alice 资料时,其个人描述字段被篡改(如添加 “you have been arrested by 20253918zouyiyang”);
- 验证 Boby 访问 Alice 资料后,其个人资料被自动篡改的效果。
1.2.5 XSS 蠕虫的编写与传播验证
基于脚本自复制特性编写 XSS 蠕虫,验证其指数级传播效果,核心任务为:
- 构造含自复制逻辑的 XSS 脚本,实现受害者访问被感染账户(Alice)资料时,其个人资料字段被注入相同蠕虫脚本;
- 验证 “Alice→Boby→Samy” 的传播链路,明确 XSS 蠕虫 “感染 - 传播 - 再感染” 的核心原理。
1.2.6 XSS 漏洞的防御实现
基于 HTMLawed 插件实现 XSS 防御,核心任务为:
- 登录 Elgg 管理员账户,进入插件管理页面激活 HTMLawed 插件(HTML 过滤插件);
- 重复前述 XSS 攻击步骤,验证恶意脚本被过滤失效,确认 HTML 过滤对 XSS 攻击的防御作用。
2. 实践过程
2.1 SEED SQL注入攻击与防御实验
2.1.1 创建新虚拟机
我们已经创建了一个Web应用程序,并将其托管在 三达不溜.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:
首先需要重新配置一台虚拟机,版本是:SEEDUbuntu-16.04-32bit.zip,从官网上下载好后陆续接入到vm虚拟机当中
![]() |
![]() |
![]() |
|---|
![]() |
![]() |
![]() |
|---|
经过以上一系列的操作之后,最后点击完成,创建新的虚拟机。

最后启动虚拟机。

并且此时应该把主机名修改成自己的名字,使用命令hostname 20253918zouyiyang

2.1.2 熟悉SQL语句
我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
使用命令sudo service apache2 status,开启apache,图中显示running说明开始运行。

使用命令mysql -u root -p,获得权限,进入mysql数据库。

使用命令show databases再加上;查看数据库。

使用命令use Users,以及使用命令show tables;进入表格。

使用命令select * from credential;来打开表格中的更多细节内容。

使用命令select * from credential where Name = 'Alice';来查询一下表格,检查没有问题。

2.1.3 对SELECT语句的SQL注入攻击
上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序
在虚拟机上用火狐浏览器中打开网址 http://www.seedlabsqlinjection.com/ ,进入页面

查看源码,发现使用了get方法访问

在火狐浏览器上输入/var/www/SQLInjection/unsafe_home.php,那么点击ok会看到下面的情况:


此时说明文件对于管理员和普通用户有不同的两套方案。
综上所述,可以构造Admin‘#,这样会使得#后的Password判断不会执行,也就是可以不用密码随意输入登录,下图即可成功登录。

转用Alice'#也可以登录Alice的账号,可以发现都可以登录成功。

2.1.4 对UPDATE语句的SQL注入攻击
通过员工的更新个人界面实施UPDATE语句的SQL注入攻击
输入网址http://www.seedlabsqlinjection.com/unsafe_edit_frontend.php进入修改页面

查看页面源码发现依旧是使用get来将输入的内容发送到页面

查看 unsafe_edit_backend.php页面
使用网址/var/www/SQLInjection/unsafe_edit_backend.php查看
![]() |
![]() |
|---|
可以学习仿照上述过程进行SQL注入攻击,使用以下代码进行Alice修改
使用命令', Salary='20253918‘ where name='Alice'; #可以把Alice的薪资改成和我的学号一样

下图就是修改后的结果,可以看到薪资已经变成了我的学号(祝愿我未来的薪资也能和我的学号一样)

2.1.5 SQL对抗
修复上述SQL注入攻击漏洞
对SELECT语句的修复,一般我们可以使用bind_param方法,具体修复方式如下所示:
对unsafe_home.php就使用命令$sql = $conn->prepare("SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password FROM credential WHERE name= ? and Password= ?;"); $sql->bind_param("ss", $input_uname, $hashed_pwd);修改即可
![]() |
![]() |
|---|
对于unsafe_edit_backend.php来说也是修改一段代码,修改成如下图所示的代码当$sql = $conn->prepare("UPDATE credential SET nickname=?,email=?,address=?,PhoneNumber=? where ID=$id;");
$sql->bind_param("ssss", $input_nickname, $input_email,$input_address, $input_phonenumber);即可修改成功
![]() |
![]() |
|---|
最后发现页面已经登录不进去了,也就代表修复了上述SQL注入攻击漏洞。
2.2 SEED XSS跨站脚本攻击实验(Elgg)
为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。
2.2.1 发布恶意消息,显示警报窗口
在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口
首先输入网址 http://www.xsslabelgg.com ,用刚才查询到的用户进行登录,除了Admin管理员以外,所有用户的登录密码都是seed+用户名的形式,所以我们可以登录每个用户的账号

通过上述的密码和用户名登录Alice的账户
![]() |
![]() |
|---|
点击Edit profile进入编辑页面

使用XSS攻击命令代码写入Bridf description这个框里,并且点击save。目的是为了让系统发出警告命令

发现系统发出了我的学号的警告命令

2.2.2 弹窗显示cookie信息
将cookie信息显示
同理,在刚才同样的框中填入 XSS攻击代码,即可完成cookie信息显示
![]() |
![]() |
|---|
2.2.3 窃取受害者的cookies
将cookie发送给攻击者
寻找本机的ip地址,如图所示,IP地址为192.168.200.68

再次在刚才的框里写入XSS代码, 用1921端口监听过程

输入命令nc -l 1921 -v在终端里监听1921端口,然后在网页上登录Boby访问Alice,可以看到监听到以下内容


至此实验成功。
2.2.4 成为受害者的朋友
使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程
用Alice账号添加Boby账号为好友,同时,按下F12打开浏览器的开发者工具,查看添加好友过程中发出了什么信息

一定要打开才能成功抓到Add friend的过程,所以打开的同时抓包

我们可以看到如下的信息
![]() |
![]() |
|---|
根据信息内容我们得知了boby的id号是45,换一个方向我们便可以得知Alice的id号是44,所以我们用如下代码进行XSS攻击
要选择右上角的Edit HTML,这也是请教其他同学后得来的经验。
![]() |
![]() |
|---|
最后可以看到结果,Alice不需要通过Boby的同意就成功添加了好友。

2.2.5 修改受害者的信息
使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改
这里使用下述代码
与上述步骤相同,将代码写入profile
![]() |
![]() |
|---|
最终Alice的主页呈现这个形态。

首先不要访问Alice,直接查看boby的主页,然后再访问Alice,前后对比如下所示
![]() |
![]() |
|---|
2.2.6 编写XSS蠕虫
根据刚才实验的经验,编写蠕虫代码,蠕虫代码的底层逻辑就是,攻击者主页一旦被访问,就会产生被感染者,就像刚才的boby就是被感染者,此时只要还有别的正常者访问boby的主页,就会同样被传染,相当于无限发散,蠕虫病毒就是这么一个原理,一直无限呈指数级扩散。
代码如下所示:(这里换了另一个新的攻击语句,以便于和上面的区分开来)
将上述代码写入Alice的about me里面,并且特意标注一下这次是attacked,上一次是arrested,不是上次的普通感染,是蠕虫感染。

此时我们让boby来访问alice,然后再用samy来访问boby,看看是否会实现被传染者接着传染给下一位,无限传染传播。
![]() |
![]() |
|---|---|
![]() |
![]() |
至此蠕虫攻击实验成功。
2.2.7 对抗XSS攻击
对抗XSS攻击有很多种方法
本次实验使用其中的一种方法
首先登录管理员的账号,账号是Admin,密码是seedelgg,然后进入管理员页面,然后再页面里选择plugins
![]() |
![]() |
|---|
然后点击Activate,把HTMLawed给激活

激活以后,再次使用上述相同的步骤让boby和samy都去访问alice,发现自己的主页about me都不会再变化,证明实验成功!(做这次实验之前记得把之前的都清空重新进行攻击)(这里我是把之前的内容全部清空重新访问)

发现刚才的XSS攻击失效了,通过访问Alice的页面无法改写Boby页面的about me,证明本次实验成功!
3. 学习中遇到的问题及解决
3.1 问题一:找不到Edit_Profile 页面

正常的同学们都应该是在上方可以看到Edit的标志按钮,但是我的电脑上一直无法找到,最后只能通过网址进入修改的页面 http://www.seedlabsqlinjection.com/unsafe_edit_frontend.php 。
3.2 问题二:复制粘贴的时候会死机
因为虚拟机已经死机了所以没有截图,在本机上编写好的长串的代码,如果直接复制粘贴进虚拟机就会发生死机的现象,并且这个现象发生的概率比较大,所以我修改了模式,在seed虚拟机上上传需要复制粘贴的代码的笔记本,然后直接从本机上复制粘贴可以有效避免直接粘贴带来的卡死的现象。
4.实践总结
本次实践围绕 SQL 注入与 XSS 跨站脚本攻击展开,在 SEEDUbuntu 环境下验证了两类注入漏洞的攻击原理与防御方法。通过对员工管理 Web 应用实施 SELECT/UPDATE 语句的 SQL 注入,掌握了无密码登录、篡改数据的攻击逻辑,并用参数绑定的预编译语句实现了漏洞修复;基于 Elgg 应用完成 XSS 弹窗验证、Cookie 窃取、无交互加好友、资料篡改及蠕虫传播攻击,通过激活 HTMLawed 插件实现了 XSS 防御。实验中深刻认识到 “未过滤用户输入 + 语句拼接” 是注入漏洞的核心成因,也验证了参数绑定、HTML 过滤等防御手段的有效性。此次实践不仅夯实了网络攻防实操能力,更理解了攻防对抗的核心逻辑,提升了对 Web 安全漏洞防护的认知与思考。































浙公网安备 33010602011771号