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字符实体转换成十六进制为: 'alert(1) '
思路拓展(活生生的套路):
对&#进行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
本文来自博客园,作者:lzstar-A2,转载请注明原文链接:https://www.cnblogs.com/lzstar/p/15399235.html
作 者:lzstar-A2
出 处:https://www.cnblogs.com/lzstar/
关于作者:一名java转安全的在校大学生
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!
欢迎大家关注安全学习交流群菜鸟联盟(IThonest),如果您觉得文章对您有很大的帮助,您可以考虑赏博主一杯可乐以资鼓励,您的肯定将是我最大的动力。thx.
菜鸟联盟(IThonest),一个可能会有故事的qq群,欢迎大家来这里讨论,共同进步,不断学习才能不断进步。扫下面的二维码或者收藏下面的二维码关注吧(长按下面的二维码图片、并选择识别图中的二维码),个人QQ和微信的二维码也已给出,扫描下面👇的二维码一起来讨论吧!!!