零宽度空格 Zero-width space

0x0 简介

零宽度空格,顾名思义即,具有空格的功能,但宽度为零。例如:

1
Left​​​​​​​​​​Right

上述文本中,我们看到的是LeftRight,但实际上在Left和Right之间有10个Zero-width space,它不占用宽度,但占用字节空间。

0x1 实例

Zero-width space的Unicode编码为U+FEFF,二进制编码为“\xE2\x80\x8E”,根据维基百科描述,其主要用于后台处理字符边界而又无需可见空格的情况。

例如,下边两个字符串,我们在任意位置鼠标双击时会看到明显效果,

包含Zero-width space,双击任意位置选中某个单词

1
Lorem​Ipsum​Dolor​Sit​Amet​Consectetur​Adipiscing​Elit​Sed​Do​Eiusmod​Tempor​Incididunt​Ut​Labore​Et​Dolore​Magna​Aliqua​Ut​Enim​Ad​Minim​Veniam​Quis​Nostrud​Exercitation​Ullamco​Laboris​Nisi​Ut​Aliquip​Ex​Ea​Commodo​Consequat​Duis​Aute​Irure​Dolor​In​Reprehenderit​In​Voluptate​Velit​Esse​Cillum​Dolore​Eu​Fugiat​Nulla​Pariatur​Excepteur​Sint​Occaecat​Cupidatat​Non​Proident​Sunt​In​Culpa​Qui​Officia​Deserunt​Mollit​Anim​Id​Est​Laborum

不含Zero-width space,双击任意位置选中全部字符

1
LoremIpsumDolorSitAmetConsecteturAdipiscingElitSedDoEiusmodTemporIncididuntUtLaboreEtDoloreMagnaAliquaUtEnimAdMinimVeniamQuisNostrudExercitationUllamcoLaborisNisiUtAliquipExEaCommodoConsequatDuisAuteIrureDolorInReprehenderitInVoluptateVelitEsseCillumDoloreEuFugiatNullaPariaturExcepteurSintOccaecatCupidatatNonProidentSuntInCulpaQuiOfficiaDeseruntMollitAnimIdEstLaborum

0x2 攻击

DoS攻击

由于该字符不显示但占用空间,故可以用来发送大量的该字符来DoS,用户看不到任何字符,但已经把空间占满。例如,对QQ、微信等DoS攻击

PS: 微信发送的纯文本大小为16K,测试大量零宽度空格不影响。

UI Spoof

例如CTF题目中提交flag时可以加几个这个字符

再例如在字符串相等判断的代码里加几个这个字符,搞死抄袭代码的程序员:)

参考文献

  1. 维基百科 https://en.wikipedia.org/wiki/Zero-width_space