xss byPass常见绕过方式

xss漏洞挖掘思路流程
1.查找输入输出点位置
输入点一般在:URL当中的参数,或者表单内容项
输出点(好判断xss是否成功)
输出在标签之间,例如:<script>输出</script>
输出在属性之中,例如:<input value="输出" name="keyword">
输出在注释之中,例如://document.getElementById("order_select").value="输出"
2.判断过滤机制过滤了什么内容,<script>,引号,还是空格等被过滤
3.根据过滤的内容选择绕过的方式
①、<script>被过滤
采用大小写绕过
双写关键词绕过
利用HTML实体编码或十六进制绕过(还不行可以尝试二次编码)
②、过滤了引号
使用“/”替换引号
使用String.fromCharCode
将带有引号的内容放在location.hash中
③、过滤了空格
使用%0d(回车)、%0a(换行)进行替换
④、过滤了javascript
拓展的HTML5姿势绕过
比如<a href=javasc ript:alert(1)>test<a>将javascript变为javasc ript
⑤、过滤了<>
base64编码绕过

⑥只进行了实体字符转义

使用实体编码字符<svg>进行编码绕过

<svg><script>alert(1)</script> 

实体字符转义不能防御输出在属性内的特殊符号,比如通过href="javascript:alert(1)"这种就无法防御。


除此之外,还有JS编码,HTML实体编码,URL编码


当xss遇到input hidden属性
利用CSS的expression属性来实现突破
<input type=hidden style=`x:expression(alert(/xss/))`>

二次编码
原来的代码: ’alert(1)’
初步使用HTML字符实体转换成十六进制为: &#x27;alert(1) &#x27;
思路拓展(活生生的套路):
对&#进行url的编码,二次转换之后代码变成: %26%23x27alert(1)%26%23x27


eval()函数用于计算JavaScript字符串,并把它作为脚本代码来执行。

 

base64拓展
比如
<a href=”可控点”>
<a href="data:text/html;base64, PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==">test</a>

 

参考链接
https://blog.csdn.net/Fly_hps/article/details/84989317

posted @ 2022-07-09 16:34  lzstar-A2  阅读(447)  评论(0编辑  收藏  举报