一:檔案操作與隱寫
1、檔案型別的識別
1、檔案頭完好情況:
(1)file命令
使用file命令
識別:識別出file.doc為jpg型別
(2)winhex
透過winhex工具檢視檔案頭型別,根據檔案頭部內容去判斷檔案的型別
eg:JPG型別
(3)notepad++
下載HEXeditor外掛
,檢視檔案的頭部資訊,和010editor,winhex原理相同
(4)0101editor
個人推薦使用這個,因為包含好用的模板,不用在記憶寬度、高度、CRC的具體位置
2、檔案頭部損壞情況:
場景:使用file命令無法顯示檔案型別,只顯示data,說明檔案頭部被破壞,需要修復
(1)使用010editor等工具結合具體情況進行修復
2、檔案分離操作
1、binwalk命令
分析檔案 binwalk filename
分離檔案 binwalk -e filename
分離分揀 binwalk filename -T png
2、foremost命令
場景:binwalk無法分離出檔案、可以嘗試使用foremost進行分離檔案
foremost filename -o 分離後的儲存位置
3、dd命令
場景:binwalk和foremost都無法進行分離檔案
解釋:bs就是塊的大小、count就是塊的個數、skip就是跳過多少個塊
dd if=原始檔 of=目標檔名 bs=1 skip=開始分離的位元組數
eg1:假設1.txt 內容為1234567890
dd if=1.txt of=2.txt bs=5 count=1
2.txt當中的內容為12345
dd if=1.txt of=3.txt bs=5 count=1 skip=1
3.txt內容為67890,skip就是跳過第一塊
eg2:
想要分離出AC3zlib檔案(zlib檔案為圖片資料壓縮檔案),需要輸入
dd if=2.png of=3 bs=1 skip=85
4、winhex手動分離
結合binwalk;直接將想要的資料複製出來(很簡單,和上述dd原理一樣)
3、檔案合併
1、Linux下的檔案合併
考點:題目可能會給出一個md5值,讓你合併檔案,只有按照一定的次序合併,MD5才能夠吻合
cat 1.txt 2.txt 3.txt 4.txt >1.jpg
將1.txt,2.txt,3.txt.4.txt合併為1jpg
校驗md5:md5sum1.jpg
2、windows下的檔案合併
copy /B 1.txt+2.txt+3.txt 1.jpg
校驗md5:certutil -hashfile 1.jpg
二:圖片隱寫
1、常規隱寫
思路:
1、檔案頭部被破壞;修復檔案頭部
2、16進位制異或(1E)
3、寬高被修改;修復寬高;使用python指令碼獲取寬高或者使用tweakpng工具獲取寬高
4、圖片轉化成base編碼;讓你還原圖片
5、圖片中給出盲文內容;進行解密;通常會給出一個壓縮包;解密出來的密碼是壓縮包的密碼;然後進行下一步操作!
思路:檔案頭部修復;16進位制異或(1E);寬度和高度的修復
2、內容隱寫
思路:
1、flag資訊直接隱藏在圖片內容當中;透過winhex開啟檢視
2、將其他檔案隱藏在圖片當中(分離檔案
)
3、flag資訊透過編碼或者加密隱藏在內容當中(Base編碼;2進位制
)
(1)binwalk -e filename
(2)foremost filename -o 分離後的儲存位置
(3)透過dd命令提取(通用)
(4)透過winhex和010editor工具進行手動分離
3、exif隱寫
思路:
1、exif可以記錄數碼照片的屬性資訊和拍攝資料;flag可能藏在屬性中
2、透過exiftool工具
檢視詳細資訊或者右鍵圖片檢視詳細資訊
4、gif隱寫
思路:
1、flag資訊隱藏在圖片中;使用工具stegso;ve工具中的frame browser檢視相關的flag資訊
5、lsb隱寫
思路:
(1)型別1:可以使用zsteg工具直接拿到flag
(2)型別2:zsteg工具拿不到flag資訊;需要用Stegsolve
工具分析通道;然後在analyse-->data extract
中選擇存在問題的通道;通道列舉;分析extracr preview
中有無flag;或者save bin
;判斷是否有flag!
(3)型別3:透過LSB隱寫zip壓縮包或者其他檔案;檢視extracr preview
會看到常見的檔案頭部資訊
例題:
步驟1:使用zsteg工具看是否能拿到flag
步驟2:
使用stegsolve分析通道;判斷哪個通道存在問題;然後在analyse-->data extract
中選擇存在問題的通道;列舉;分析extracr preview
中有無flag;或者save bin
;判斷是否有flag!
步驟3:
分析是否隱藏的其他檔案
6、二維碼隱寫
思路:
1、掃描二維碼直接拿到flag;使用QR reserach工具識別二維碼當中的內容!
2、掃描二維碼給出提示資訊
3、二維碼就是誤導;可能是其他方面的!
7、webshell隱寫
思路:
1、查殺後門;一般D盾查殺;根據查殺出來的檔案進一步查詢flag;一般搜尋$pass
8、路由隱寫
思路:
1、頻寬資料檔案;用RouterPassView開啟檔案,搜尋password之類是關鍵詞嘗試提交flag即可
9、F5隱寫
思路:
1、F5是重新整理鍵;一般題目考察F5隱寫的話會提示相關資訊的
例題:
(1)首先下載/F5-steganography工具;在kali中輸入git clone https://github.com/matthewgao/F5-steganography
下載成功之後進入該目錄;解密(需要java 1.8.0版本)
//解密
java Extract xxx.jpg
檢視解密內容;在output當中
發現是zip檔案;提取出來解壓拿到flag!
10、盲水印
思路:
(1)數字水印用於保護檔案的資訊和版權;但是盲水印是看不見的
(2)盲水印提取指令碼
blindwatermark下載地址
https://github.com/chishaxie/BlindWaterMark
11.NTFS隱寫
思路:
1、提示NTFS資料流(一般就是給一個壓縮包;然後裡面有很多的txt文件);直接使用NtfsStreamsEditor
工具掃描flag
資料夾;拿到flag(必須用7.zip 解壓檔案)
12、outguess隱寫
(1)outguess工具的下載:輸入:git clone https://github.com/crorvick/outguess
;
(2)示例
我對cmd.jpg進行了outguess加密,在裡面寫入了flag;然後我進行解密
Outguess -k “my secret key” -r out.jpg flag.txt
檢視得到flag
13、特殊演算法隱寫
(1)**Stegdetect**
場景:主要用於分析JPEG檔案的加密方,可以檢測到透過JSteg、JPHide、OutGuess、Invisible Secrets、F5、appendX和Camouflage等
常見的加密方式jsteg\jphide\outguess\invisible\f5\appendx
eg:
1、java盲水印-jphide
eg:
三:壓縮檔案隱寫
思路:
1、偽加密
(1)zip偽加密
考點:winhex開啟壓縮包;搜尋504b0102(注意不是檔案頭部;zip檔案頭部偽504b0304
);從50開始,往後面數第9,10個字元為加密字元,將其設定為0000即可變為無加密狀態
(2)rar偽加密
從頭開始一般第24個位元組為加密位置;將尾數修改為0,即可解除加密
2、暴力破解
(1)設定密碼;需要使用ARCHP.exe工具
來破解zip/rar檔案
(2)明文破解
明文攻擊指知道加密的ZIP中部分檔案的明文內容,利用這些內容推測出金鑰並解密ZIP檔案的攻擊方法
例:假設一個加密的壓縮包中有兩個檔案readme.txt和flag.txt,其中flag txt的內容是我們希望知道的內容,而我們擁有readme.txt的明文檔案,使用上述兩個檔案即可進行明文攻擊。
操作:
1、將readme.txt的明文檔案進行壓縮,變成readme1.zip。
2、開啟archpr, 攻擊型別選擇明文,明文檔案路徑選擇readme1.zip ( 即將明文檔案不加密壓縮後的檔案),加密的檔案
選擇要破解的檔案,點選開始,破解成功後會獲得密碼。
四:流量分析
1、wireshark語法
**1、wireshark過濾語法**
(1)過濾IP地址
ip.src==x.x..x.x 過濾源IP地址
ip.dst==x.x.x.x 過濾目的IP
ip.addr==x.x.x.x 過濾某個IP
(2)過濾埠號
tcp.port==80
tcp.srcport==80 顯示TCP的源埠80
tcp.dstport==80 顯示TCP的目的埠80
(3)過濾協議
直接輸入協議名稱 tcp/http/dns
(4)包長度過濾
udp.length==26
tcp.len >=7
(5)http模式的過濾(極其重要,尤其是http contains "關鍵字")
http.request.method=="GET"
http.request.method=="POST" 篩選請求方式
http.request.uri=="圖片的路徑"
http cantains "GET"
http contains "HTTP/1."
http contains "flag"
http contains "key"#看一下http協議流量包中有沒有flag欄位
tcp contains "flag"
**2、wireshark協議分級**
協議分析的目的就是為了對整個流量包有一個大致的分析!
統計 ---> 協議分級
**3、wireshark 流匯聚**
(1)用於追蹤tcp或者http的流量
追蹤流中直接尋找是否有flag
wireshark資料提取
(1)ctf題目當作可能會將flag等資訊藏在一些檔案當作;比如藏在圖片;壓縮包;文字文件等;需要我們對流量包進行資料提取;將提取的資料進一步處理!
檔案 -----> 匯出物件 ------> HTTP
eg:有一個ncc.pcap流量包;開啟首先在協議分級當作看一下流量包的比重;輸入http contains "ncc"
;發現了一張.png照片
提取!
進一步對照片進行處理拿到flag!
(2)使用**networkminer工具**
分析流量包直接提取出照片!
(3)手動提取!
2:流匯聚型
1、考點:
flag等資訊直接藏在流量包當中;難度稍微提升提點的就是透過分析流量包看流量包中是否有其他檔案;比如jpg;zip;png等等;需要進行資料提取進行下一步分析;這類題目往往和misc方向有關!
http contains "PSOT"
http contains "flag"
tcp contains "flag"
http contains "zip"
http contains "jpg"
http contains "png"
//根據篩選出來的流量包進行分析;看看是否有敏感資料;比如FFD8FF PK等等常見的檔案開頭;然後提取資料
2、例題:
1、流匯聚(直接流匯聚就能拿到flag)
2、提取資料的
(1)藏在壓縮包中的(PK為壓縮包檔案的頭部標識)
原始資料顯示;然後儲存16進位制資料;010editor匯入16進位制資料;另存為即可
(2)藏在圖片當中的
3、TLS流量
1、考點:
題目一般會提示讓你匯入 key;去解鎖加密的流量包(flag一般藏在加密的流量包當中);一般key藏在了給出的流量包中;使用tcp contains “KEY” ftp contains "key"篩選資料包;然後具體分析資料包找到KEY;匯入KEY就可看到隱藏的流量包(http資料包如果沒有匯入KEY;wireshark是看不到的);匯入KEY的方法
編輯——>首選項——>協議——>TLS——>exit——>匯入key——>應用
2、例題:
- 例題1:
(1)題目給出提示資訊讓我們區尋找KEY;常見的KEY藏在TCP流量包中;使用tcp contains “key”過濾資料包
追蹤流分析資料包;發現了一段base64編碼的內容;根據經驗判斷應該是base64編碼轉圖片
base64線上解碼工具:https://the-x.cn/encodings/Base64.aspx
解碼之後得到一張圖片;圖片的內容為KEY
微信識別內容後儲存為txt檔案(提示檔案給出了key的格式)
匯入KEY出現了兩個http流量包;追蹤流發現了flag!(沒有匯入key之前沒有發現flag)
- 例題2
題目提示是TSL加密;那就是要找到key匯入金鑰獲取加密的流量包;輸入http contains "key"
篩選流量包;然後分析流量包;發現一個流量包很奇怪;追蹤http流量發現了sslkey.log;另存到桌面;然後匯入key;發現http流量包多了幾個;分析http流量包拿到flag!
4、大流量
1、駭客IP地址
思路:駭客攻擊會產生大量的流量;根據流量的大小、包的數量來判定是否為異常流量以及攻擊者的IP。可以用統計工具分析一下
統計-會話。發現183.129.152.140與內網IP建立會話的Packets較多
統計-端點。同樣發現183.129.152.140的包數最多。
統計-IPv4 Statistics-ALL Address。統計下IP,183.129.152.140的數量最多。
所以,183.129.152.140應該就是駭客的IP。分析其它資料包也印證了這個結果
2、駭客郵箱
傳送郵件的協議一般為SMTP
;首先嚐試第一眼看到的xsser@live.cn
,發現flag正確,所以後面看見的郵箱也就不需要試了。
3、後門名稱
我們得到了駭客的攻擊IP183.129.152.140
,首先過濾一下這個IP
ip.addr == 183.129.152.140
後名檔案一般是php;所以追蹤流找到了後門檔案為flag{admin.bak.php}
5、USB流量
1、鍵盤流量
(1)USB協議鍵盤資料部分,會出現在 Leftover Capture Data
或者 HID Data
中;長度為16位
提取資料:右鍵HID Data ;作為過濾應用;選中;然後複製
使用命令提取資料
//提取鍵盤流量;其中usbhid.data就是複製的欄位內容
tshark -r 鍵盤.pcapng -T fields -e usbhid.data |sed '/^\s*$/d' >flag.txt
//使用指令碼加上:;注意鍵盤流量是16位;滑鼠是8位
python .\冒號.py
//提取鍵盤資料
python .\usb_keyborad.py
**2、滑鼠流量 **
(1)USB協議滑鼠資料部分,會出現在 Leftover Capture Data
或者 HID Data
中;長度為8位
(2)例題:開啟流量包;根據Leftover Capture Data內容得出為滑鼠流量;獲得欄位值為usb.capdata
//提取滑鼠流量;其中usb.capdata為資料的欄位
tshark -r 滑鼠.pcap -T fields -e usb.capdata |sed '/^\s*$/d' >flag.txt
//加上:;注意鍵盤流量是8位;注意修改指令碼
python .\usb_mouse.py
python '.\座標繪製圖形 - 副本.py
6、webshel流量
1、例題
開啟流量包;首先http contains "flag"
;發現了結果符合條件的流量包(發現了菜刀webshell工具的流量;解碼發現讓我下載6666.jpj這個圖片;追蹤http流量包;一個一個檢視)
檢視完所有的http流量包之後;發現了 1.php 6666.jpg flag.txt hello.zip 幾個檔案;嘗試提取出來;根據流量包;只找到6666.jpg和zip的資料內容
(1)提取666.jpg(JPG的頭部資料為FFD8FF)
顯示原始資料;儲存16進位制資料到txt文件中;然後010editor匯入16進位制資料;另存為1.jpg
我以為是flag;發現不是;那可能是zip的密碼
(2)提取zip
分析資料包發現了zip的頭部內容PK;提取壓縮包(和提取圖片的步驟一樣)
然後發現解壓需要密碼;使用照片中的密碼解密拿到flag!
7、wifi流量
1、例題
開啟流量包出現現wireless LAN協議
和802.11無線協議
和Tp-Link,
;判定為wifi流量包;使用airrcrack-ng工具進行破解
//獲得BSSID地址BC:F6:85:9E:4E:A3
aircrack-ng xxx.cap
//生成字典解密
aircrack-ng -a2 -b BC:F6:85:9E:4E:A3 -w pass.txt wifi.cap
8、思路總結
首先開啟流量包;分別看一下不同協議的info;看看有沒有什麼特別奇怪或者很長的解釋;一般flag就在裡面(有可能是base64編碼的;注意二次編碼);然後就是利用過濾語法看看有沒有什麼明顯的流量包;進一步分析;看看有沒有什麼壓縮包,圖片;檔案等等的;提取出來看看是否有flag等資訊;還有注意幾種特別的流量包;目前就遇到這這些!
五、記憶體取證隱寫
1、工具安裝
Volatility是一款開源記憶體取證框架,能夠對匯出的記憶體映象進行分析,透過獲取核心資料結構,使用外掛獲取記憶體的詳細情況以及系統的執行狀態。Volatility2.6需要python2,pip安裝模組也需要2版本
安裝pip2
Volatility2.6需要python2,pip安裝模組也需要2版本,所以首先安裝pip2
(1)檢查python2(已安裝)
(2)下載pip2
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
(3)安裝pip2
sudo python2 get-pip.py
(4)檢查安裝情況
pip2 -h
安裝依賴環境
(1)安裝pycryptodome(我這裡已經安裝)
pip2 install pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple
(2)安裝distorm3
git clone https://github.com/vext01/distorm3.git
cd distorm3
sudo python2 setup.py install
安裝volatility
(1)退出distorm3資料夾,下載volatility2
git clone https://github.com/volatilityfoundation/volatility.git
(2)進volatility,判斷是否安裝成功
如果缺少外掛的話,會出現好多行報錯的
2、例題解析
(1)CTF金磚技能大賽的一道題目
1、分析映象
python2 vol.py -f /home/kali/桌面/worldskills3.vmem imageinfo
2、從記憶體中獲取到使用者admin的密碼並且破解密碼,以flag{admin,password}形式提交(密碼為6位)
(1)檢視系統使用者
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 printkey -K "SAM\Domains\Account\Users\Names"
(2)轉儲記憶體中的Windows帳戶密碼雜湊
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 hashdump
發現沒有解密成功;使用mimikatz外掛獲得密碼(自行下載外掛)
則Flag{admin:.dfsddew}
3、獲取當前系統IP地址以及主機名,以Flag{ip:主機名}形式提交
(1)獲取主機名
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 hivelist
(2)檢視登錄檔資訊
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 -o 0xfffff8a000024010 printke y
答案為:WIN-9FBAEH4UV8C
(3)獲取IP地址
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 netscan
IP地址為:192.168.85.129
則Flag{WIN-9FBAEH4UV8C.192.168.85.129}
(4)獲取當前系統瀏覽器搜尋過的關鍵詞,作為Flag提交
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 iehi story
則Flag{admin@file:///C:/Users/admin/Desktop/flag.txt}
(5)當前系統中存在挖礦程序,請獲取指定的礦池地址,以Flag{}提交
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 pslist
則flag{54.36.109.161:2222}
(6)惡意程序在系統中註冊了服務,請將服務名稱以Flag{服務名}提交
上題已知惡意程序號為2588,找到process ID為3036
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 pslist -p 2588
根據process ID為3036,查詢服務
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 svcscan|grep 3036
則flag{VMnetDHCP}
六、音訊隱寫
1、MP3隱寫
(1)題解:下載附件之後是一個mp3的音訊檔案;並且題目提示key=syclovergeek
;所以直接使用MP3stego對音訊檔案進行解密;mp3stego工具是音訊資料分析與隱寫工具
(2)mp3stego工具的使用:
-E 進行加密
-P 輸入密碼
-X 進行提取
./encode -E 123.txt -P pass 456.wav 789.mp3 #加密
./decode -X -P 123 flag.mp3 #解密
eg:
目錄出現了sycgeek-mp3.mp3.txt檔案;如果密碼錯誤不會出現txt檔案;開啟拿到flag!
2、音訊頻譜隱寫
(1)CTF題目當中給出的音訊檔案部分當中會出現刺耳的聲音;比如是高低位雜音;這時候可以用Audacity工具(開源音訊處理軟體,分析音訊的頻譜、波形
)對音訊進行頻譜分析;有的題目題目當中會將flag直接隱藏在音訊頻譜中
(2)建材給了一個mp3音訊檔案;首先判斷是否是mp3stego隱寫;發現缺少key值;透過對音訊的分析;其中有刺耳的聲音;使用工具對建材檔案進行頻譜分析;拿到flag
3、摩斯密碼隱寫
(1)題解:開啟建材檔案透過音訊的波形發現是摩斯密碼;使用離線或者線上工具提取密碼;然後解密
根據波形得到摩斯密碼為..... -... -.-. ----. ..--- ..... -.... ....- ----. -.-. -... ----- .---- ---.. ---.. ..-. ..... ..--- . -.... .---- --... -.. --... ----- ----. ..--- ----. .---- ----. .---- -.-.
;解密拿到flag!
4、音訊波形隱寫
(1)題解:開啟建材檔案;透過Audacity工具分析波形;發現是二進位制組成;提取字串;使用python指令碼高位補0;然後進行ACSII解密拿到flag!
5、LSB音訊隱寫
(1)類似於圖片隱寫中的 LSB 隱寫,音訊中也有對應的 LSB 隱寫。主要可以使用 Silenteye 工具
6、SSTV隱寫
其聲音聽起來像刺耳的電波!
kali下載工具
sudo apt-get install qsstv
開啟軟體;點選options -->sound-->from file
移入音訊檔案;然後儲存圖片解碼拿到flag!
7、撥號隱寫
解釋:其波形圖如下所示,其聲音聽起來像手機播號時的聲音,在CTF裡面其常常混雜著其它音樂,需要用Audacity刪除,留下撥號聲音,再使用軟體dtmf2num(這個東西識別有時候沒有那麼準確,最好學會人工復原)來複原撥號的數字