
什么是隱寫?由于我們識別聲音或圖片的能力有限,因此稍微改動資訊的某位元組位的資料是不會影響我們識別聲音或圖片的,舉個最通俗的例子,古人的藏頭詩就是隱寫的一種方式:

而CTF圖片隱寫術就是利用圖片來隱藏一些機密資訊,一張看起來很正常很普通的圖片其實內部隱藏了其他玄機,
圖種(多檔案壓縮)
所謂圖種,就是先把要想隱藏的東西打包壓縮,然后再跟一張正常的圖片結合起來,達到隱藏資訊的目的,
可以直接使用CMD "copy/b" 直接壓縮圖片:
copy/b a.png + b output.png
例如,將一張jpg隱藏到另一張png圖片中:


用kali中的"binwalk"工具可以根據檢索匹配檔案頭的原理輕松地檢索圖片檔案中隱藏的其他檔案,還是以這張圖片為例:

找到隱藏的檔案在kali 中可以使用"foremost"或者"dd",將output.png進行分離,分離出的隱藏的檔案:

各位置資訊隱藏
2.1 檔案頭尾
較為直接的方式,直接將文字資訊隱藏在圖片檔案的頭尾內容之中,例如下圖:

使用16進制編輯工具(winhex)直接打開,可以發現再圖片基礎資訊欄位之后,直接插入了flag資訊:

還有些是在檔案尾部插入資訊:

2.2 IHDR隱藏資訊
檔案頭資料塊IHDR(header chunk):它包括有PNG檔案里存盤的影像資料的基本資訊,并要作為第一個資料塊出如今PNG資料流中,并且一個PNG資料流中僅僅能有一個檔案頭資料塊,
檔案頭資料塊由13位元組組成,它的格式如下表:
| 域的名稱 | 位元組數 | 說明 |
| Width | 4 bytes | 影像寬度,以像素為單位 |
| Height | 4 bytes | 影像高度,以像素為單位 |
| Bit depth | 1 byte | 影像深度: 索引彩色影像:1,2,4或8 灰度影像:1,2,4,8或16 真彩色影像:8或16 |
| ColorType | 1 byte | 顏色型別: 0:灰度影像, 1,2,4,8或16 2:真彩色影像,8或16 3:索引彩色影像,1,2,4或8 4:帶α通道資料的灰度影像,8或16 6:帶α通道資料的真彩色影像,8或16 |
| Compression method | 1 byte | 壓縮方法(LZ77派生演算法) |
| Filter method | 1 byte | 濾波器方法 |
| Interlace method | 1 byte | 隔行掃描方法: 0:非隔行掃描 1: Adam7(由Adam M. Costello開發的7遍隔行掃描方法) |
在CTF圖片隱寫中,常常通過改變Height(4 bytes)來隱藏有效資訊,例如下圖:

使用16進制編輯工具(winhex)直接打開,嘗試改變IHDR中的高度資訊(PS:一般圖片寬度資訊無法修改,會造成圖片亂碼)“01 DD”——>“02 DD”:

隱藏的flag資訊通過高度調整,被暴露出來:

2.3 exif資訊隱藏
按照國際Exif2.1標準,當你用單反相機或手機拍攝完一張照片,相機會生成一個如JPEG格式的電子檔案保存起來,這個jpeg圖片它不只保存了你拍攝的畫面,還保存很多其他的一些資訊如:相機品牌、手機型號、閃光燈、快門速度、光圈大小、感光度及GPS坐標等,這些資訊就是EXIF資訊,最常見的就是:右鍵——>屬性,這樣只能夠查看部分的exif資訊,
當然這個資訊是可以被篡改的,例如使用“PowerExif”等工具,在kali中,可以使用"exiftool"直觀的查看圖片各類exif資訊:
例如下面這張照片,我們“右鍵->屬性”只能看到部分的base64編碼資訊:

借助"exiftool"在Comment中發現另一部分編碼資訊:

檔案修復
將檔案頭內容(16進制編碼)修改或洗掉,會造成檔案無法打開,損壞的問題,可以通過16進制編碼器(winhex)進行修復,
需要我們比較熟悉已知常見檔案的檔案頭標準編碼:
| 檔案名 | 檔案頭 | 檔案尾 |
| JPEG (jpg) | FFD8FF | FFD9 |
| PNG (png) | 89504E47 | AE426082 |
| GIF (gif) | 47494638 | 003B |
| ZIP Archive (zip) | 504B0304 | 504B |
| TIFF (tif) | 49492A00 | |
| Windows Bitmap (bmp) | 424D | |
| CAD (dwg) | 41433130 | |
| Adobe Photoshop (psd) | 38425053 | |
| Rich Text Format (rtf) | 7B5C727466 | |
| ...更多參考 | ||
例如下面這張無法打開的png圖片,匯入winhex后,發現檔案頭明顯不符合PNG圖片的標準編碼:


"89 5A"——>"80 5A"改為PNG標準編碼,發現圖片可以正常打開了:

LSB隱寫
LSB全稱為 least significant bit,是最低有效位的意思,Lsb圖片隱寫是基于Lsb演算法的一種圖片隱寫術,一般能使用LSB進行隱寫的圖片需要是無損壓縮(png圖片)或者無壓縮的圖片(BMP圖片),因為這能保證我們修改的資訊不至于丟失,也就能得到正確的表達,
以png圖片為例子,png圖片中的影像像數一般是由RGB三原色(紅綠藍)組成,每一種顏色占用8位,取值范圍為0x00~0xFF,即有256種顏色,一共包含了256的3次方的顏色,即16777216種顏色,而人類的眼睛可以區分約1000萬種不同的顏色,這就意味著人類的眼睛無法區分余下的顏色大約有6777216種,

而LSB隱寫演算法就是去修改RGB顏色分量的最低二進制位也就是最低有效位(LSB),人類的眼睛不會注意到這前后的變化,每個像素可以攜帶3位元的資訊,
例如下面這張經典的圖:綠色,十進制的235,二進制的11101011,通過二進制運算加、減3修改最低有效位,發現肉眼根本區分不出來差別:

像下面這張圖,通過"StegSlove"工具打開:

利用LSB演算法提取最低有效位資訊,可以有效的發現隱藏的壓縮包檔案:

還有一種雙圖比較的題型,也是利用RGB圖層更改的方式來隱藏資訊:

將上面兩張肉眼無法區分的圖片,放入"StegSlove"中進行RGB圖層處理,在SUB(R,G,B separate)發現了一張模糊二維碼:

再將這張模糊二維碼進行RGB圖層處理,在RED、GREEN、BLUE plane 0 下分別發現3張清晰的二維碼,掃碼就得到了隱藏的具體資訊:

總結
以上的幾種就是CTF中常見的圖片隱寫方法和題型,而在實際的隱寫技術中還有更多的隱寫演算法和隱藏技術,這里在總結下上述的思路:
在影像資料中加入資料,不影響視覺效果情況下修改像素資料,加入資訊;(圖種) 在圖片右擊查看屬性,在詳細資訊(exif)中隱藏資料;(exif資訊隱藏) 根據各種型別影像的固定格式,在各位置添加資料;(頭、尾、IHDR資訊隱藏) 在編譯器中修改影像開始的標準編碼,改變其原來影像格式;(檔案修復) 將資料型別進行改寫(rar或者zip資料改為jpg等格式);(檔案修復) 利用隱寫演算法將資料隱寫到圖片中而不影響影像,隱寫常用的演算法有LSB,jpghide;(LSB演算法)
??掌握類似的圖片隱寫技術,一方面可以幫助我們了解暗水印的原理,另一方面對我們在惡意檔案隱藏(類似圖片木馬)檢測的防御中,更有效的去取證溯源,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/319639.html
標籤:其他
上一篇:檔案包含漏洞
