xss漏洞的三个分类:
反射性:产生原因是用户输入的没用进行很好的过滤,导致用户的输入输出到前端页面上,前端把用户的输入给解析了,所以导致前端页面出现相应漏洞。前端页面是可以解析JS代码的,反射性漏洞就是利用JS代码。
DOM性:在JS中进行多次传参,导致漏洞出现
存储型:
反射性漏洞:
在DVWA靶场进行实验(LOW):
1.输入普通字符串,根据后台代码,他会输出我们输入的字符串,这个是正常后端的工作流程。
2.我们在框里输入JS代码,使其显示不正规的输出,当然,也可以输入其他的代码,可以获得相应信息。可以用于测试的有许多种,如alert()、confirm()、prompt()等等。
html里面的js代码:
js代码在HTML代码的标签里面也是可以解析的,比如在<div>、<p>等等,但是有些并不能解析,如<style>、<textarea>、<title>等。
深入理解浏览器解析机制和XSS向量编码
在html代码里面,<a>标签是可以促发js代码的。
但是在日常中我们肯定会遇到一些过滤,所以我们需要对我们的代码进行另一种形式的输入。
基础部分
1.url解码
里面的内容经过url解码就是"javascript:alert(1)",但是在浏览器里面却解析不了
html
<a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">aaa</a>
2.先html解码,后url解码
在这里,代码是先进行html实体解码,然后再url解码,这样在浏览器就可以正常访问。
对于1和2,我的理解是在进行浏览器访问时,1这个代码的href在进入url地址栏时,是原始状态,他对于这个没有解码的就不认识这个,所以就不会执行;对于第二个,这个原始代码的前一部分是html的编码,它在进行浏览器访问时,html对这个"javascript"先进行了解码成"javascript",然后href这一段代码进入url地址栏中,在url中它认识这个"javascript"协议,然后把会进行代码的识别,同时对后面的url码进行解码,就会正常执行。
html
<a href="javascript:%61%6c%65%72%74%28%32%29">bbb</a>
3.把符号编码
URL 编码 ":",但这个也不能解析,因为javascript:是一个整体,(函数+:)才能被解析。
html
<a href="javascript%3aalert(3)"></a>
4.src的错误函数触发
这里,当src里面是错误信息时,他会执行后面的错误函数onerror里面的内容。但这个也执行不了。
html
<div><img src="1" onerror="alert(1)"></div>
html
<div><img src=x onerror=alert(4)></div>
5.html实体编码
这个是' html解码 ('),可以正常执行
html
<button onclick="confirm('7');">Button</button>
6.unicode编码
这个并不能执行
html
<button onclick="confirm('8\u0027);">Button</button>
7.在js代码里进行html编码
这里把html的编码放在js的标签里,并不能执行。
html
<script>alert(9);</script>
所以以上的编码示例,向我们展示了前端的漏洞的千奇百怪之处,不同的标签,或不同的编码都会可能导致漏洞,但有些的标签和漏洞之间也会产生错误。
xss漏洞实例
https://xss.pwnfunction.com网站有相关xss漏洞的练习
1.Ma Spaghet!
题目要求是显示1337,并且不能使用交互式的触发等等
这里使用图片错误信息提示,在后面输入?somebody=<img%20src=1%20οnerrοr="alert(1337)">,显示成功。
2.Jefff
这里我们闭合eval里面的双引号,然后跳出,执行alert(1337)
就相当于我们是执行的以下命令
html
eval(`ma = "Ma name aaa";alert(1337);""`)