零宽度字符隐写(CTF)
零宽度字符简介
零宽度字符是一些不可见的,不可打印的字符。它们存在于页面中主要用于调整字符的显示格式。
常见的零宽度字符及它们的unicode码和原本用途:
零宽度空格符 (zero-width space) U+200B : 用于较长单词的换行分隔
零宽度非断空格符 (zero-width no-break space) U+FEFF : 用于阻止特定位置的换行分隔
零宽度连字符 (zero-width joiner) U+200D : 用于阿拉伯文与印度语系等文字中,使不会发生连字的字符间产生连字效果
零宽度断字符 (zero-width non-joiner) U+200C : 用于阿拉伯文,德文,印度语系等文字中,阻止会发生连字的字符间的连字效果
左至右符 (left-to-right mark) U+200E : 用于在混合文字方向的多种语言文本中(例:混合左至右书写的英语与右至左书写的希伯来语),规定排版文字书写方向为左至右
右至左符 (right-to-left mark) U+200F : 用于在混合文字方向的多种语言文本中,规定排版文字书写方向为右至左
用法
零宽度字符在通常情况下,在一般的文本编辑器中是不可见的,比如:Hello,misc!
在这句话中我就用零宽度字符隐藏了信息,用CyberChef查看一下即可发现其中的奥秘
当然,将文本储存为txt格式,用vim查看也可以直接看到其中隐藏的零宽度字符
其实每一种基于零宽度字符的隐写都可以有自己的隐写方式及加密方式,所以可能用这一个工具(或脚本)加密过的字符串在另一个解密网站就无法成功解密……
转化为二进制的加密:https://zhuanlan.zhihu.com/p/87919817
转化为Morse编码的加密:https://zhuanlan.zhihu.com/p/75992161
加密方式虽多种多样,但万变不离其宗。使用零宽度字符隐写,关键是将想要隐藏的内容用零宽度字符来表示,通过使用不同的零宽度字符,以及不同字符间的排列组合方式来达到隐写的目的
注:加密和解密是一个可逆的过程,但是一定要用相同的方式(相同的工具/网址)进行加解密
在线解密:
https://330k.github.io/misc_tools/unicode_steganography.html
其他用法
隐形水印
逃脱敏感词匹配
传递隐秘信息
相关文章:
用零宽度字符水印揭露泄密者身份:
https://www.freebuf.com/articles/web/167903.html
零宽度字符:和谐?屏蔽?不存在的
https://juejin.cn/post/6844903669192720391
例题:[UTCTF2020] zero
附件链接:https://pan.baidu.com/s/1Ivadp2r9cbKjIZM2vSFDQw
提取码:7vmf
下载附件得到一个txt文件,里面是一长段英文,乍一看没有什么特别的地方,但是将这个文件用vim查看,就会发现其中隐藏了大量的信息
很显然是零宽度字符隐写,在线网站弄一下,在上图中可以看到共有五种零宽度字符,尝试一下将U+200B这一项去掉,选择其他四种字符进行解密,就可以得到flag:flag{whyNOT@sc11_4927aajbqk14}