admin 管理员组

文章数量: 887021

【CTF

Word中的隐写

1.1 利用Word文本功能进行隐藏
1.1.1 文字效果-隐藏

选中Word中想要隐藏的文字,依次点击“鼠标右键=>文字”,在文字效果一栏中选中隐藏,那么选中的文字就被隐藏了,而在默认情况下被隐藏的内容是会被显示的。

如果想要查看被隐藏的内容,则需要依次点击“文件=>选项=>显示”,选中隐藏文字,这样就可以查看被隐藏的文字了

1.1.2 图片隐藏

在Word中,图片具有嵌入和非嵌入两种格式,通过一定的设置便可以让图片消失

  • 嵌入型
    依次点击“文件=>选项=>高级”,在显示文档内容板块找到“显示图片框”,选定,确定后图片内容就不见了,就只剩下一个图片框了

如果先要查看图片内容,只要在取消“显示图片”就行了

  • 非嵌入型
    跟嵌入型差不多,取消“在屏幕上显示图形和文本框”,图片就被隐藏了

只要在勾选上“在屏幕上显示图形和文本框”就能显示被隐藏的图片了

1.2 利用Word文档的本质
1.2.1 原理

docx是微软word的文件扩展名,是Office 2007以后的版本使用的,docx比doc文件占得内存更少。

docx文件在本质上是zip压缩包文件,因此将一个docx文件的后缀改为zip,这个文件是可以用压缩软件正常打开的,可以看到解压文件中有一个word文件夹,这里面包含了word文档的大部分内容。其中document.xml文件中含有的则是该文档的主要文本内容。

所以利用word文件本质是zip,便可以把信息隐藏在docx文件里了。

1.2.2 解决:改文件后缀,然后自己找
例子 【第五届山东省网络安全竞赛】Word文件本质

下载解压,得到docx文件,修改后缀为zip

出现[Content_Types].xml这个文件,那么这个zip压缩包十有八九是一个word文档,然后自己慢慢找flag有关的内容就行。

这里把Flag.xml拖入Sublime_text查看就能得到flag了

零字符宽度隐写

1.1 前置知识
1.1.1 统一码(Unicode)

统一码(Unicode),也叫万国码或单一码,是计算机科学领域中的一项业界标准,包括字符集、编码方案等。Unicode 是一种重要的交互和显示的通用字符编码标准,它覆盖了美国、欧洲、中东、非洲、印度、亚洲和太平洋的语言,以及古文和专业符号。Unicode 允许交换、处理和显示多语言文本以及公用的专业和数学符号。
Unicode 字符可以适用于所有已知的编码。Unicode 是继 ASCII(美国国家交互信息标准编码)字符码后的一种新字符编码,它为每一个符号定义一个数字和名称,并指定字符和它的数值(码位),以及该值的二进制位表示法,通过一个十六进制数字和前缀(U)定义一个16位的数值,如:U+0041 表示 A,其唯一的名称是 LATIN CAPITAL LETTER A。

1.1.2 零宽度字符

零宽度字符是隐藏的不显示的,也是不可打印的,也就是说使用大部分程序和编辑器是看不到这种字符的。它们存在于页面中主要用于调整字符的显示格式。

下面是一些常见的零宽度字符及它们的Unicode码和原用途

  • 零宽空格(zero-width space, ZWSP)用于可能需要换行处。

Unicode: U+200B HTML: ​

  • 零宽不连字 (zero-width non-joiner,ZWNJ)放在电子文本的两个字符之间,抑制本来会发生的连字,而是以这两个字符原本的字形来绘制。

Unicode: U+200C HTML: ‌

  • 零宽连字(zero-width joiner,ZWJ)是一个控制字符,放在某些需要复杂排版语言(如阿拉伯语、印地语)的两个字符之间,使得这两个本不会发生连字的字符产生了连字效果。

Unicode: U+200D HTML: ‍

  • 左至右符号(Left-to-right mark,LRM)是一种控制字符,用于计算机的双向文稿排版中。

Unicode: U+200E HTML: ‎ ‎ 或‎

  • 右至左符号(Right-to-left mark,RLM)是一种控制字符,用于计算机的双向文稿排版中。

Unicode: U+200F HTML: ‏ ‏ 或‏

  • 字节顺序标记(byte-order mark,BOM)常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的标记。

Unicode: U+FEFF

1.1.3零宽度字符的作用
  • 数据防爬
    将零宽度字符插入关键词文本中,使得匹配关键字时不能正确匹配,但是不影响用户的正常阅读

  • 信息隐藏
    可以将信息隐藏在正常文字中而不影响阅读

1.2 如何隐藏

首先,输入需要被加密的内容将被转换为其二进制(Morse编码),然后该二进制(Morse编码)将被转换为一系列的零宽度字符。然后可以将零宽度的字符串不可见地插入正常文本中,这样就被隐藏了。

每一种基于零宽度字符的隐写都可以有自己的隐写方式及加密方式,所以可能用这一个工具或脚本加密过的字符串在另一个解密网站就无法成功解密。

具体可以参考大佬的这一篇博客/index.php/archives/20/

注意:加密和解密一定要用同一个网站或脚本!!!

1.3如何判断

比如下面这个例子中:

Flag‌‌‍‌‌‌‌‍‍‌‌‍‌‌‌‌‍‍‌‌‌‍‌‌‌‌‍‌‌‍‌‌‌‌‍‌‌‌‍‌‌‌‌‍‌‌‌‍‌‌‌‌‍‌‌‌‍‌‌‌‌‍‌‍在哪里吗?

表面上看起来只有“Flag在哪里吗?”这一句话

但实际上它是这样的

在在在实际上它是这样的

那么我们应该如何判断?

1.肉眼看

从上图我们可以看到,零宽度字符隐写处有肉眼可见的异常

2.使用Sublime_txt

将文字复制入Sublime_txt,可以看到零宽度字符(灰色部分)

3.使用kali中vim

使用vim指令,可以看到零宽度字符(蓝色的)

4.010或winhex

放入010或者winhex

1.4 如何解密

1..php

将文本复制到1.处,在2.处输入密码(没有就不用输),点击3.解密,隐藏的信息就出来了

2..html

将文本复制到1.处,点击2.Decode,就能得到了

注意此解码网站还可根据零宽度字符的不同选择

3.利用脚本(传送门)

最后再附两篇参考文章

  • 零宽度字符转化为二进制的加密:
  • 零宽度字符转化为Morse编码的加密:

本文标签: CTF