XSS编码浅析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: XSS编码浅析

前言

网上有许多关于XSS漏洞的文章,但是这些文章大部分都是直接给出了攻击载荷却并没有对他们的编码方式进行分析与讲解,这对与刚接触到XSS想深入学习的人并不是十分的友好,当我看到这个攻击载荷的时候,我不明白为什么要这样写,为什么这样写了就可以绕过一些防护,所以这篇文章我准备分享一下,我对XSS编码的理解与大佬们一起学习进步。

XSS常见编码分类

输出点处做编码最主要的目的是什么,为什么要去做编码?

最主要的目的就是绕WAF、过滤函数,通常在没有WAF和过滤函数的情况下,我们只需要使用原始字符,XSS攻击的一大精髓就是简短,利用少量代码达到攻击效果,编码往往会使exp的长度增加

输出在HTML中

Entity(实体)编码

**概念:**在编写HTML页面时,需要用到"<"、">"、"空格" 等符号,直接输入这些符号时,会错误的把它们与标记混在一起,非常不利于编码。那么就需要把这些字符进行转义,以另一种方式书写,以相同的形式展现。在HTML中,这些字符可称为HTML Entity,即HTML字符实体。

**编码范围:**包括但不限于以下字符: ASCll Characters(可见部分).ISO 8859-1 Characters、lSO 8859-1 Symbols、Math Symbols、Greek Letters、 Miscellaneous HTML entities。

Entity(实体)编码 ————两种格式

格式一:&entityName

说明:"&"开头,";"结尾,以语义的形式描述字符。如字符"<",英文名称为"less than",EntityName为"&lt;",取自"less than"2个单词的首字母。

格式二:&#entityNumber

说明:"&#"开头,";"结尾,以编号的形式描述字符。此编号可以为十进制或十六进制(以"&#x"开头)等数字格式。

**注:**entityName的数量要小于entityNumber的数量

Entity(实体)编码 ————实例

这里我们主要研究的是编码方式,所以我直接使用菜鸟工具里的在线编辑功能进行演示

<h1>Entity编码</h1>
<p>entityName:</p>
&lt;<br>
&gt;<br>
&excl;<br>
&quot;<br>
&num;<br>
8amp ;<br>
<p>entityNumber:</p>
&#60;<br>
&#62;<br>
&#33;<br>
&#34;<br>
&#35;<br>
&#38;<br>
浏览器的解析行为

行为1: HTML解析器在建立文档树的时候会针对节点内的Entity编码解码后传输。

等效语句:

<img src="1" onerror="alert(1)">

通过entityNumber编码

<img src="1" onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;">

注意:属于标签本身结构的部分不会被解析

<img src=1 onerror&#61;alert(1)>

<a href="javascript:alert(1)">click me</a>
<a href="j&#x61;vascript:alert(1)">click me</a>

**行为2:**允许在如之后插入任意多个0。

等效语句:

<img src="1" onerror="alert(1)">
<img src="1"
onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;">

<img src="1"
onerror="&#00000000000000097;&#108;&#101;&#114;&#116;&#40;&#49;&#41;">

**行为3:**针对URL类型的属性,允许进行一次URL编码。

注:URL类型的属性,通俗理解就是链接的属性

等效语句:

<a href="javascript:alert(1)">click me</a>
<a href="j&#x61;vascript:alert(1)">click me</a>
<a href="j&#x61;vascript:%61%6c%65%72%74%28%31%29">click me</a>

**行为4:**URL编码的部分可以进行第二次Entity编码。

注:不能无限套娃,只能在URL编码部分进行一次Entity编码,若是经过Entity编码之后,又进行了一次URL编码,这是不会被解析的

等效语句:

<a href="javascriptalert(1)">click me</a>
<a href="j&#x61;vascript:alert(1)">click me</a>
<a href="j&#x61;vascript:%61%6c%65%72%74%28%31%29">click me</a>
<a href="j&#x61;vascript:&#37;&#54;&#49;&#37;&#54;&#99;&#37;&#54;&#53;&#37;&#55;&#50;&#37;&#55;&#52;&#37;&#50;&#56;&#37;&#51;&#49;&#37;&#50;&#57;">click me</a>

**行为5:**URI类型的属性忽略Tab和回车符。

等效语句:

<a href="javascript:alert(1)"> click me</a>

<a href="javascript:%61%6c%65%72%74%28%31%29">click me</a>

注:Tab符和回车符也可以再进行一次Entity编码

行为6: Entity编码的;可以去除。

等效语句:

<a href="javascriptalert(1)">click me</a>

<a href="j&#x61vascript:&#37&#54&#49&#37&#54&#99&#37&#54&#53&#37&#55&#50&#37&#55&#52&#37&#50&#56&#37&#51&#49&#37&#50&#57">click me</a>

注:不同格式的Entity编码可以混用

四种编码策略

**C语言编码:**对于一些控制字符,使用特殊的C类型的转义风格(例如\n和\r),公认的ECMAScript编码。

**八进制编码:**三个八进制数字,例如"e"编码为"\145",该语法不属于ECMAScript,但是基本所有的浏览器都支持。

**十六进制编码:**两个十六进制数字,例如"e"编码为"\x65”,同样不属于ECMAScript,但是在解析底层,c语言中有很好的支持。

**Unicode编码:**如\u0065可表示字符e,属于ECMAScript编码。

注:ECMAScrip是Javascript的一个标准

<script>
document.getElementByld("a").\u0069\u006e\uO06e\u0065\u0072\u0048\u0054\u004d\u004c="\x3c\151\155\147\40\163\162\143\75\61\40\157\156\145\162\162\157\162\75\141\154\145\162\164\50\61\51\u003e";
</script>

**注:**前三种只能用于给字符串编码。第四种还可以用来给方法名编码

不可以代替括号,引号,点号等特殊字符

<script>
\u0061lert("test");
</script>

常见误区

误区1: XSS,不是专门去"绕过"限制。

误区2: XSS,不仅仅存在于你所看得见的位置。

误区3: XSS,绕过限制不是乱用字符去绕过,切忌盲目。

总结

在刚接触XSS的时候,需要做的是了解其中的原理与编码方式,自己构造的语句中哪里可以在此基础上进行编码的构造,掌握了XSS编码的基础,在之后的学习中可以更好的理解别人构造的攻击载荷,而不是盲目的瞎改,导致语句无法解析不能绕过防护。

相关文章
|
6月前
|
前端开发 JavaScript 安全
【网络安全/前端XSS防护】一文带你了解HTML的特殊字符转义及编码
【网络安全/前端XSS防护】一文带你了解HTML的特殊字符转义及编码
415 0
XSS三重URL编码绕过实例
遇到一个很奇葩的XSS,我们先来加一个双引号,看看输出:  双引号被转义了,我们对双引号进行URL双重编码,再看一下输出:  依然被转义了,我们再加一层URL编码,即三重url编码,再看一下输出:   URL编码被还原为双引号,并带入到html中输入。
2025 0
|
前端开发 安全
XSS漏洞挖掘 - CSS编码和反斜杠的三个技巧
http://www.pulog.org/XSS/1269/XSS-encoding-backslash/  
643 0
|
JavaScript 前端开发 数据格式
IE是怎么处理meta steam的编码的 &amp;&amp; 那100+个xss
IE是怎么处理meta steam的编码的  && 那100+个xss 【起源】 最近hei***放言在各个大网站都存在100+个xss。
769 0
|
17天前
|
JavaScript 安全 前端开发
同源策略如何防止 XSS 攻击?
【10月更文挑战第31天】同源策略通过对 DOM 访问、Cookie 访问、脚本执行环境和跨源网络请求等多方面的严格限制,构建了一道坚实的安全防线,有效地防止了 XSS 攻击,保护了用户在网络浏览过程中的数据安全和隐私。
84 49
|
4月前
|
存储 安全 JavaScript
手摸手带你进行XSS攻击与防御
当谈到网络安全和信息安全时,跨站脚本攻击(XSS)是一个不可忽视的威胁。现在大家使用邮箱进行用户认证比较多,如果黑客利用XSS攻陷了用户的邮箱,拿到了cookie那么就可以冒充你进行收发邮件,那真就太可怕了,通过邮箱验证进行其他各种网站的登录与高危操作。 那么今天,本文将带大家深入了解XSS攻击与对应的防御措施。
|
22天前
|
安全 前端开发 Java
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
61 4
|
21天前
|
安全 Go PHP
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
49 2
|
24天前
|
存储 安全 Go
Web安全基础:防范XSS与CSRF攻击的方法
【10月更文挑战第25天】Web安全是互联网应用开发中的重要环节。本文通过具体案例分析了跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的原理及防范方法,包括服务器端数据过滤、使用Content Security Policy (CSP)、添加CSRF令牌等措施,帮助开发者构建更安全的Web应用。
55 3
|
17天前
|
SQL 存储 安全
什么是XSS攻击?什么是SQL注入攻击?什么是CSRF攻击?
理解并防范XSS、SQL注入和CSRF攻击是Web应用安全的基础。通过采用严格的输入验证、使用安全编码实践以及实现适当的身份验证和授权机制,可以有效防止这些常见的Web攻击,保障应用程序和用户的数据安全。
26 0