GitHub 熱榜:一款讓黑客們都愛不釋手的開源工具!
明明下載的是一張圖片,只需修改后綴名,圖片就變成了一首歌,一串 Python 代碼?
國外黑客 David Buchanan 利用 Twitter 的漏洞,可以用圖片偽裝的方式傳輸一份 “加密” 文件,前提是不超過 3MB。
他成功把這種藏匿文件的 GitHub 源代碼壓縮到圖片中。
現(xiàn)在你只要去他的 Twitter,把這張圖片下載下來,并將文件后綴名從.png?修改為.zip,即可解壓為 Github 代碼。

(注:親測 Mac 自帶解壓工具報錯,第三方工具可正常解壓。)

對于有十幾年網(wǎng)齡的老網(wǎng)民來說,這并不是一項新技術(shù)。早年就有人將文本文件或種子文件藏匿在 jpg 圖片中。
這種方法的特點在于,把文件打包到圖片中并不影響正常顯示,但一般來說文件大小不過幾十 KB。
隨著網(wǎng)絡(luò)發(fā)展,越來越多的平臺允許用戶上傳大尺寸無損圖片,這就給藏匿大文件提供了契機(jī)。
Buchanan 的新方法現(xiàn)在將藏匿文件體積增加到 3MB,你甚至能放入一首歌。
Twitter 上就有現(xiàn)成的例子,Buchanan 放出了一張?surprise.mp3?的圖片。如果后綴名修改為.mp3,就變成了一首歌。

至于這個 surprise,自然毫無意外是 Rick Astley 的《Never Gonna Give You Up》這首歌。恭喜你,又被 “瑞克搖” 了。

Buchanan 的這一發(fā)現(xiàn)已經(jīng)連續(xù)多天成為 GitHub 熱門項目,最終在周末登上日榜第一。

使用方法很簡單,只需要將 pack.py 文件下載到本地,運行以下代碼:
python3 pack.py cover.png file.zip output.png
其中,cover.png 是封面圖片,file.zip 是你要藏匿的文件,output.png 是輸出結(jié)果的文件名。
從外觀上來看,output.png 和 cover.png 是一樣的,但多出一個壓縮包的大小。
原理
用圖片隱藏壓縮包的原理并不復(fù)雜,png 圖片文件的格式如下。在 Zlib 之后,有一片 IDAT 塊的附加數(shù)據(jù)。藏匿數(shù)據(jù)就放在這里。
△
圖片來自 Twitter 用戶 @angealbertini
Twitter 通常會壓縮圖像并刪除所有不必要的元數(shù)據(jù),但是可以在 “DEFLATE” 的末尾添加更多數(shù)據(jù)。
如果整個圖像文件符合避免重新編碼的要求,壓縮包內(nèi)容就不會從 IDAT 塊內(nèi)的 DEFLATE 流中剝離。
這種方法不僅限于嵌入 zip、mp3 等文件,只要數(shù)據(jù)能壓縮到 3MB 以內(nèi),都可以嵌入到 png 圖片中。
Buchanan 表示,這種方法可能被黑客用于藏匿惡意代碼,他本人已將該漏洞利用報告給 “漏洞賞金” 程序,但卻被 Twitter 告知這不是 bug。
能傳輸 “加密” 文件,怎么能說是 bug 呢?應(yīng)該是隱藏功能才對。(手動狗頭)
帶壓縮包的圖片地址:
https://i.imgur.com/kNhGrN3.png
David Buchanan 的 Twitter:
https://twitter.com/David3141593/status/1371974874856587268
項目地址:
https://github.com/DavidBuchanan314/tweetable-polyglot-png
版權(quán)申明:內(nèi)容來源網(wǎng)絡(luò),版權(quán)歸原創(chuàng)者所有。除非無法確認(rèn),都會標(biāo)明作者及出處,如有侵權(quán),煩請告知,我們會立即刪除并致歉!
- END?