明明下载的是一张图片,只需修改后缀名,图片就变成了一首歌,一串 Python 代码?
国外黑客 David Buchanan 利用 Twitter 的漏洞,可以用图片伪装的方式传输一份 “加密” 文件,前提是不超过 3MB。
他成功把这种藏匿文件的 GitHub 源代码压缩到图片中。
现在你只要去他的 Twitter,把这张图片下载下来,并将文件后缀名从.png 修改为.zip,即可解压为 Github 代码。
(注:亲测 Mac 自带解压工具报错,第三方工具可正常解压。)
对于有十几年网龄的老网民来说,这并不是一项新技术。早年就有人将文本文件或种子文件藏匿在 jpg 图片中。
这种方法的特点在于,把文件打包到图片中并不影响正常显示,但一般来说文件大小不过几十 KB。
随着网络发展,越来越多的平台允许用户上传大尺寸无损图片,这就给藏匿大文件提供了契机。
Buchanan 的新方法现在将藏匿文件体积增加到 3MB,你甚至能放入一首歌。
Twitter 上就有现成的例子,Buchanan 放出了一张 surprise.mp3 的图片。如果后缀名修改为.mp3,就变成了一首歌。
至于这个 surprise,自然毫无意外是 Rick Astley 的《Never Gonna Give You Up》这首歌。恭喜你,又被 “瑞克摇” 了。
Buchanan 的这一发现已经连续多天成为 GitHub 热门项目,最终在周末登上日榜第一。
使用方法很简单,只需要将 pack.py 文件下载到本地,运行以下代码:
python3 pack.py cover.png file.zip output.png
其中,cover.png 是封面图片,file.zip 是你要藏匿的文件,output.png 是输出结果的文件名。
从外观上来看,output.png 和 cover.png 是一样的,但多出一个压缩包的大小。
用图片隐藏压缩包的原理并不复杂,png 图片文件的格式如下。在 Zlib 之后,有一片 IDAT 块的附加数据。藏匿数据就放在这里。
△图片来自 Twitter 用户 @angealbertini
Twitter 通常会压缩图像并删除所有不必要的元数据,但是可以在 “DEFLATE” 的末尾添加更多数据。
如果整个图像文件符合避免重新编码的要求,压缩包内容就不会从 IDAT 块内的 DEFLATE 流中剥离。
这种方法不仅限于嵌入 zip、mp3 等文件,只要数据能压缩到 3MB 以内,都可以嵌入到 png 图片中。
Buchanan 表示,这种方法可能被黑客用于藏匿恶意代码,他本人已将该漏洞利用报告给 “漏洞赏金” 程序,但却被 Twitter 告知这不是 bug。
能传输 “加密” 文件,怎么能说是 bug 呢?应该是隐藏功能才对。(手动狗头)
带压缩包的图片地址:
https://i.imgur.com/kNhGrN3.png
David Buchanan 的 Twitter:
https://twitter.com/David3141593/status/1371974874856587268
项目地址:
https://github.com/DavidBuchanan314/tweetable-polyglot-png
版权申明:内容来源网络,版权归原创者所有。除非无法确认,都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!