Demo
baidu.com(\uff41)能跳转到baidu.com
bаidu.com(\u0430)不能跳转到baidu.com,被认为成一个其他域名

等价原因
两个不同编码的Unicode字符之间可能存在一定的等价性,这种等价是字符或字符序列之间比较弱的等价类型,这些变体形式可能为视觉上或意义上的等价性。例如a和a(\uff41)字体看起来相同,15和⑮(\u246e)其表示的数学意义可能相同。

字符转换
转换成字符的方式有Normalization Form C(NFC) 和Normalization Form KC(NFKC) 两种,他们之间的区别取决于生成的文本是否与原始非标准化文本等效,K表示兼容性。
分解组成字符的方式有Normalization Form D(NFD) 和 Normalization Form KD(NFKD)两种。
NFC与NFD的区别:
例如Å(\u212B)用NFD进行normalize,会变为Å(\u0041\u030a),而NFC处理后则是Å(\u00c5)。在normalize的过程中会检测该字符是否在NFC表中,如果在,则进行对应的转换算法,例如之前的Demo,a(\uff41)在NFC存在被转换成a,а(\u0430)不存在则不进行转换。

等价漏洞利用
对所有字符遍历一次,找到normalize后与ASCII字符等价的字符,可以绕过一些过滤,
Lyle师傅的脚本:
------------------------------------------------------------------------------------------
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import json
from unicodedata import normalize

def main():
debug = False
tables = {}
for i in range(1, 0x10000):
src = unichr(i)
dst = normalize('NFKC', src)[0]
try:
if ord(dst) < 128 and dst != src:
if debug:
print("%s (\\u%s) -- normalize --> %s (\\x%s)" % (
src, hex(i)[2:].rjust(4, '0'),
dst, hex(dst.charAt(0))[2:]
))
if dst in tables:
tables[dst].append(src)
else:
tables[dst] = [src]
except Exception as e:
print(repr(e))
with open("nfctable.txt", "wb") as fh:
json.dump(tables, fh)

if __name__ == '__main__':
main()
----------------------------------------------------------------------------------------

最新文章

  1. Circular Buffer
  2. php删除目录下的所有文件和目录
  3. java微信开发(wechat4j)——发送客服消息
  4. codeforces 713A A. Sonya and Queries(状态压缩)
  5. python代码中使用settings
  6. 移动平台webApp的meta标签-----神奇的功效
  7. vs2012相关配置
  8. 关于WII光枪定位的设计(转)
  9. nodejs 简单对mongodb 操作
  10. 17.1.1.8?Setting Up Replication with Existing Data设置复制使用存在的数据
  11. 策略模式设计模式(Strategy)摘录
  12. MySQL(3)-索引
  13. 通过Eclipse3.1以上启动Tomcat访问不到tomcat管理界面的问题(转载)
  14. golang语言示例
  15. 给你的WordPress站点添加下雪特效
  16. SpringCloud学习(一):微服务简介
  17. ASP.NET -- WebForm -- Cookie的使用
  18. 南阳236----心急的C小加
  19. Java虚拟机------JVM介绍
  20. 《MarkMark学习笔记学习笔记》html学习笔记

热门文章

  1. MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据)
  2. js去后台传递的值
  3. QQ企业通-----客户端消息发送模块设计---知识点
  4. C#中as用法---转载
  5. 基于TF-IDF的推荐
  6. 在Java中,为什么十六进制数0xFF取反之后对应的十进制数是-256呢?
  7. Java FTPClient 大量数据传输的问题(未解决)
  8. 移动端web(1)
  9. HDU 5045 状压DP 上海网赛
  10. sklearn调用分类算法的评价指标