XSS是指攻击者将恶意脚本代码(HTML代码和客户端Javascript脚本)注入到网页中,当其他用户浏览这些网页时,就会执行其中的恶意代码。
绕过XSS-Filter
1.利用<>标记注射html/javascript
防御:过滤<>,
也可以使用String.fromCharCode()函数执行10进制字符串:
测试代码如上,无法弹窗。CSS中的javascript、expression字符一般会被程序过滤,但是可以通过十六进制来绕过。
XSS利用方式剖析
Cookie窃取及会话劫持(在攻击中带上了Cookie并发送到服务端);
网络钓鱼:
XSS重定向钓鱼:
http://www.bug.com/index.php?search="'>
也可以注入表单来进行钓鱼,如:
http://www.bug.com/index.php?search='>
也可以使用javascript编写键盘记录器等获取其他信息。
JavaScript/CSS history hack,利用CSS能定义访问过和未访问过的样式获取用户浏览历史。
客户端信息刺探:利用Javascript也能获得IP地址、端口。
XSS测试工具
Firebug,Temper Data,Fiddler,XSS-Proxy,XSS Shell,AttackAPI,Anehta(好像已经不更新了,也无法下载了)。
XSS漏洞发掘
在黑盒环境下手动发掘和测试XSS的基本方法是使用攻击字符串来验证。首先选择输入特殊字符进行测试“
白盒测试:查找可能在页面输出的变量,检验它们是否受到控制,然后跟踪这些变量的传递过程,分析它们是否被htmlencode()之类的函数过滤。其中,$_SERVER, $_GET,$_POST,$_REQUEST 经常用来获取用户输入。
DOM-XSS
不依赖于服务器端的数据,从客户端获得DOM中的数据并在本地执行。DOM-XSS受客户端脚本代码的影响,所以通过分析客户端Javascript的范式,便能发掘出此类漏洞。
输入是指比如可能触发DOM-XSS的属性:document.referer, window.name, location。而输出是指能使字符串在页面输出的方法或函数,譬如innerHTML、document.write()等。流程是:跟踪输出函数的变量,比如首先找到document.write等会造成危害的地方,然后回溯变量与函数调用过程,查看用户是否能够控制输入。
Flash XSS
Flash 本身具有内置的编程语言ActionScript。通常,ActionScript会被保存在flash文件中(以.,swf为后缀的文件)。如果要发掘flash下的安全漏洞,通常要对SWF文件进行反编译以获取ActionScript(Action Script Viewer),然后分析代码,首先找到输出或执行(如ExternalInterface.call)等会造成危害的地方,然后回溯变量与函数调用过程,看用户是否能够控制输入(如loaderInfo.parameters获取的参数)。
XSS Worm
Web 2.0时代的各种服务都是以用户为中心,相比较Web1.0连接用户和网站,Web2.0连接用户和用户,用户既是网站内容的浏览者,也是网站服务的制造者。Ajax(Asynchronous Javascript + XML) 是web2.0 技术的核心支柱,允许web页面内容飞速的更新而无需刷新页面,可以只向服务器传输更新过的内容,借助于客户端的Javascript处理来自服务器的响应。一般XSS蠕虫攻击流程为:讯在XSS漏洞,编写XSS蠕虫,利用一个宿主作为传播源头进行XSS攻击。
HTTP Response Splitting
Http响应拆分,也被称作CRLF注射攻击,是指浏览器用户可以随意地添加额外的HTTP报头信息到HTTP数据包中,然后通过自定义HTTP头创造任意的内容并返回用户浏览器中。HTTP 头的定义基于key:value结构,并且每一行由“\r\n”分割,这就意味着当用户提交包含“\r\n”的数据,那么攻击者就可以任意设置一些特殊的HTTP头,或者直接修改http response的值。CRLF中,CR表示回车, ASCII 13 或“\r”;LF表示换行, ASCII 10或“\n”。在URL中编码为%0D%0A。
防御:禁止用户在任何与响应头有关的输入请求中使用回车换行符,同时注意CRLF的各种编码。
MHTML协议安全
MHTML是MIME HTML的缩写,定义把一个多媒体页面的所有内容都保存到同一个文档的解决方案。MHTML的协议访问格式为:
mhtml:[mhtml_file_url]![original_resource_url]
防御:对参数长度进行限制,过滤字符串中的%0D%0A,使之无法满足MHTML协议的格式要求。
利用Data URIs进行XSS
Data URI方案和MHTML有些类似,提供了一种通过base64编码在网页中直接嵌入文件的方法,利用该方法可以绕过基于黑名单过滤的XSS防御系统。格式为:
data:[
不是所有浏览器都支持DATA URI方案,在HTML中,支持DATA URI 的标签有
测试结果:Firefox,IE11,chrome都不会弹窗
UTF-7 BOM XSS
UTF-7是指7位院Unicode转换格式,使用+-控制编码的开始和结束。通过注射“+v8”,"+v9"等关键字,可以告诉浏览器以何种character解析文件,因为微软的IE浏览器会优先以BOM判断出的字符集为优先。通过UTF-7 BOM的方式绕过一些关键字检测。
+/v9
+ADw-script+AD4-
alert(0);+ADw-/script+AD4-
测试说明:只有IE11可以成功弹窗。
CSRF防御
使用POST代替GET,检验 http Referer, 验证码,使用token
XSS防御
使用XSS Filter:输入过滤以及输出编码。
web安全编码规范:将能触发XSS的字符使用相应的HTML实体代替: <转成 &It等。
使用浏览器插件:Firefox的NoScript插件,IE8的XSS Filter.
使用HTTP-only的cookie。
本文根据XSS跨站脚本攻击剖析与防御所写,也尝试了一部分书中提到的方法,然而部分写法无法成功测试,也可能是因为书籍编写至今也有数年时间,浏览器的一些性质已然不同,但是作者的想法和方法都是值得借鉴的,而且在对于XSS的利用和防御方面,多年来变化也并不大。短短时间读完本书,收获还是很多的,关于XSS,也终于可以说了解的比较全面了。