回顾上一篇文章:第一章:基础篇----Cookie、状态码、HTTPS、HTTP身份验证(3)
编码方案
Web应用程序对其数据采用几种不同的编码方案,以便能够处理不常见的字符和二进制数据。攻击Web应用程序通常需要使用相关方案对其数据进行编码,确保应用程序按照想要的方式进行处理。
1.URL编码
控制字符就是所说的不可打印字符。
(图片来源于https://blog.csdn.net/qq_38769551/article/details/101459811)
URL只允许使用US-AscII码字符集中的可打印字符
(0x20 — 0x7e),而且由于一些特殊含义,在可打印字符范围内的一些字符不能用在URL中,所以用URL编码
方案对其进行编码,使其通过HTTP安全运输。
(1)URL编码格式:都以%为前缀,其后是这个字符的两位十六进制ASCII码。
(2)常见的URL编码字符:
- %3d 代表 =
- %25 代表 %
- %20 代表 空格
- %0a 代表 新行
- %00 代表 空字节
当渗透人员提交HTTP请求时,必须对参数中的以上字符进行URL编码。
另一个值得注意的编码字符是 :加号(+):其代表空格(除%20 代表空格外)
(URL中的+号,通过 GET方式传值的时候,+号会被浏览器处理为空,需要转换为%2B)
渗透测试中要熟练知道这些常用url编码字符的含义,有些通过特殊编码后,含义相同,但可以绕过waf。
2.Unicode编码
为了支持全世界使用的字符编写系统,而设计的字符编码标准
- UTF-16 :以“ %u ”作为前缀,后面加上 这个字符的 十六进制Unicode码点
- UTF-8 :是一种
长度可变
的编码标准,它使用一个或者几个
字节表示一个字符。以“ % ”作为前缀,后面用十六进制
表示每个字节
攻击时利用Unicode编码来破坏确认机制
扩展:burp中Decoder解码工具
—————— Burp Decoder的功能比较简单,作为Burp Suite中一款编码解码工具,它能对原始数据进行各种编码格式和散列的转换。
3.HTML编码
HTML编码用于表示 问题字符
安全并入 HTML文档
的方案。
许多特殊字符
用于定义 文档结构 而非 内容,为了安全使用,所以对其
进行HTML编码。
HTML编码用于探查跨站点脚本攻击
HTML 中的预留字符必须被替换为字符实体。
————————————————————
例如在 HTML 中不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签。如需显示小于号,我们必须这样写:<
或<
(1)HTML编码定义了大量HTML实体来表示字面量字符,例如:
- HTML的
"
是"
的转义字符 (也就是说在HTML中双引号是可用"
表示的) '
->'
&
->&
<
-><
>
->>
(2)此外,任何字符都可以用它的十六进制
与十进制
的ASCII码进行HTML编码,例如:
十进制:
"
-> "'
-> ’
十六进制:(以x为前缀)
"
-> "'
-> ’
(3)HTML 中有用的字符实体
注释:实体名称对大小写敏感!
4.Base64编码
Base64编码仅用一个可打印的ASCII字符就可安全转换任何二进制数据。
它常用于对电子邮件附件进行编码,还可用于用户验证机制中用户证书编码。
Base64将输入的数据转换为 3个字节块 ,每个块 被划分为 4段,每段6个数据位
。2^6=64,,故每段有64种排列组合。因此每一段
可以用一组64个字符
表示。
如果输入数据块最后不能构成3段,就用一个或者两个“=” 号补足。
5.十六进制编码
许多程序传输二进制数据时直接使用十六进制编码。用ASCII字符表示十六进制数据块。
附:常用到的在线编码解码工具
参考文章:https://blog.csdn.net/wwwmeymar/article/details/104117023
下一篇:HTTP方法漏洞利用