一:檔案操作與隱寫
1、檔案型別的識別
1、檔案頭部未被破壞的情況下
(1)file命令
識別出file.doc為jpg型別
開啟圖片之後沒有發現flag,用notepad++開啟,發現末尾有unicode編碼的資料,解碼發現了flag
(2)winhex
透過winhex程式檢視檔案頭型別,根據檔案頭部內容去判斷檔案的型別
(3)notepad++ HEXeditor外掛
(4)0101editor
flag可能藏在檔案內容當中(根據一定的編碼方式隱藏在裡面)
2、檔案頭部被破壞
使用file命令無法顯示檔案型別,只顯示data,說明檔案頭部被破壞,需要修復
2、檔案分離操作
1、binwalk命令
分析檔案 binwalk filename
分離檔案 binwalk -e filename
eg:
2、foremost命令
如果binwalk無法正確的分離出檔案、可以使用foremost進行分離檔案(需要提前安裝)
foremost filename -o 分離後的儲存位置
3、dd命令
dd if=原始檔 of=目標檔名 bs=1 skip=開始分離的位元組數
eg 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就是跳過第一塊
藉助binwalk和dd進行分離檔案
eg:
想要分離出AC3zlib,需要輸入
dd if=2.png of=3 bs=1 count=2755 skip=85
分離成功
4、winhex工具分離
直接將想要的資料複製出來(很簡單,和上述dd原理一樣)
5、16進位制txt文件處理方法
匯入0101editor,然後分析檔案頭部,識別檔案的頭部,根據檔案的型別匯出進行下一步的分析
3、檔案合併
1、Linux下的檔案合併
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、PNG隱寫
(1)首先判斷圖片的型別、拖入winhex中看檔案頭部或者使用file命令檢視圖片的型別
(2)如果圖片無法開啟,可能是頭部出現了錯誤,需要我們進行修復
eg 一張圖片開啟之後檔案頭部是0D 0A 1A 0A
,但是png的頭部是89 50 4E 47 0D 0A 1A 0A
,就需要修改檔案的頭部標識才可能正確開啟圖片
(3)圖片寬度、高度以及CRC爆破
CRC:指的是PNG圖片的一個效驗位,是一種不可逆運算,類似於MD5,作為資料效驗或效驗檔案的完整性使用。
如果CRC錯誤,那麼在linux中是打不開的
指令碼:
點選檢視程式碼
import struct
# 同時爆破寬度和高度
filename = "dabai.png"
with open(filename, 'rb') as f:
all_b = f.read()
data = bytearray(all_b[12:29])
n = 4095
for w in range(n):
width = bytearray(struct.pack('>i', w))
for h in range(n):
height = bytearray(struct.pack('>i', h))
for x in range(4):
data[x + 4] = width[x]
data[x + 8] = height[x]
crc32result = zlib.crc32(data)
# 替換成圖片的crc
if crc32result == 0x6D7C7135:
print("寬為:", end='')
print(width, end=' ')
print(int.from_bytes(width, byteorder='big'))
print("高為:", end='')
print(height, end=' ')
print(int.from_bytes(height, byteorder='big'))
直接在010editer中使用png模板;直接修改,然後發現了flag
2、圖片中提取檔案
透過copy命令可以將檔案隱藏在圖片當中,ctf常考的點就是將圖片中的檔案提取出來
這一一張圖片,透過winhex開啟發現有一個txt檔案
(1)透過binwalk提取(參考上述檔案分離操作)
(2)透過foremost提取(參考上述檔案分離操作)
(3)透過dd命令提取
3、JPG圖片隱寫
jpg頭部資料為FFD8FF,長度,寬度,高度對應的位置與PNG不同
4、EXIF資訊
exif可以記錄數碼照片的屬性資訊和拍攝資料;有時候flag就藏在裡面;透過exiftool檢視詳細資訊;在做圖片隱寫的時候需要留意圖片的exif資訊裡有沒有經緯度,在做不出來題的時候,可以看看圖片的exif資訊
5、BMP圖片隱寫
BMP頭部資料為424D
頭部後四位是圖片的大小;高度和寬度對應的位置
6、GIF圖片的隱寫
暫時略過;還沒遇到
7、盲水印
透過bwm檢視水印
8、LSB隱寫
lsb隱寫題在ctf中也經常考到,LSB即為最低有效位,我們知道,圖片中的影像畫素一般是由RGB三原色(紅綠藍)組成,每一種顏色佔用8位,取值範圍為0x00~0xFF,即有256種顏色,一共包含了256的3次方的顏色,即16777216種顏色。而人類的眼睛可以區分約1000萬種不同的顏色,這就意味著人類的眼睛無法區分餘下的顏色大約有6777216種。
(1)stegsolve工具(沒有密碼)
選擇data extract
設定red位和lsb模式後,點選preview,一般就能找到flag
(2)有密碼的LSB隱寫
wbstego4工具:解密透過LSB加密的照片(最低有效位)
主要針對.bmp/.pdf檔案,原理和zsteg一樣
(3)zsteg命令解決LSB隱寫(需要提前安裝)
\
9、二維碼
1、二進位制轉換為二維碼
拿到一串二進位制,如果它的長度被開方後正好是整數,比如這題,滿足625=25*25,就可以考慮轉二維碼。
點選檢視程式碼
import PIL
from PIL import Image
MAX = 25 #圖片邊長
img = Image.new("RGB",(MAX,MAX))
str="1111111001110111001111111100000100001101010100000110111010011100101010111011011101010110000101011101101110101010111010101110110000010011001101010000011111111010101010101111111000000000100101000000000011000111011010110000110001000000010100001010111100001011110101100111110011100101101001100101010010111000101011100100101101001111110000110101011110011010000010010001011100001111000010011101010110001100101110101000111011111010100000000110001101000110001111111011001100101010101100000101111001110001100010111010011100011111101111011101001101111011010011101110100010011010010010110000010100011010011110011111111011011100101010001"
i = 0
for y in range (0,MAX):
for x in range (0,MAX):
if(str[i] == '1'):
img.putpixel([x,y],(0, 0, 0))
else:
img.putpixel([x,y],(255,255,255))
i = i+1
img.show()
img.save("flag.png")
10、其他型別加密
(1)CRC校驗錯誤
TweakPNG(檔案頭部正常但是無法開啟檔案,利用TweakPNG修改CRC)
eg:png檔案頭部顯示正常,但是無法開啟,可能是CRC校驗出現錯誤(高度錯誤導致CRC錯誤,或者直接就是CRC錯誤)
紅色表示寬度,綠色表示高度,紫色表示CRC
(2)Stegdetect主要用於分析JPEG檔案,可以檢測到透過JSteg、JPHide、OutGuess、Invisible Secrets、F5、appendX和Camouflage等
常見的加密方式jsteg\jphide\outguess\invisible\f5\appendx
常見
java盲水印
F5隱寫
outguess
steghide
對應的工具:
三:壓縮檔案處理
1、偽加密
告訴你是加密的,有可能是偽加密,如何處理偽加密(修改加密位置,你看到的檔案就是加密的,還原加密位置即可)
(1)ZIP:開啟winhex搜尋504B0102,從50開始,往後面數第9,10個字元為加密字元,將其設定為0000即可變為無加密狀態
(2)RAR:一般第24個位元組為加密位置;將尾數修改為0,即可解除加密
2、暴力破解
使用ARCHP.exe工具來破解zip檔案(自定義字典)
、
已知部分密碼,可以選擇掩碼的方式進行爆破,比如知道開頭三位為abc,一共6位;可以這樣設定abc???
3、明文攻擊
知道加密zip中部分明文內容、利用已經知道的明文內容進行獲取金鑰
4、壓縮包的修復
四:流量取證技術
思路:通常比賽中會給你一個pcap的檔案,有時候我們需要對其進行修復或者重構檔案之後pcap檔案進行流浪分析,就是根據提示資訊一步一步的找到flag,關鍵在於過濾語法和基礎知識以及題目要求找到對應flag,或者得到flag的相關資訊
基本流程:
流量包修復、協議分析、資料提取
1、wireshark工具使用
首先就是開啟pcap流量包,首先看一下具體有哪一些協議,可以進行過濾檢視你想要的協議
2、wireshark過濾語法
1、過濾IP地址
ip.src x.x..x.x(過濾源IP地址)
ip.dst x.x.x.x(過濾目的IP)
ip.srcx.x.x.x or ip.dstx.x.x.x
2、過濾埠號(需要知道一些常見的埠以及協議的作用)
tcp.port==80(顯示80埠)
tcp.srcport==80(顯示tcp協議的源埠號)
tcp.dstport==80(顯示tcp協議的目的埠號)
3、過濾協議
直接輸入協議名稱 tcp/http/dns
4、過濾MAC地址
eth.dst==A0:00:00:04:C5:84 過濾目標mac
5、http模式的過濾(最重要)
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"
3、wireshark協議分析
工具欄中找到統計
(協議分級)(有ipv4和ipv6的資料包,一般先分析ipv4),根據比重找到主要的流量包,就是為了對整個流量包有一個大致的分析
4、wireshark 流匯聚
(1)用於追蹤tcp或者http的流量(flag可能藏在其中)(滑鼠右鍵追蹤流,選中TCP)
(2)http流匯聚考點
1、html中可能直接包含flag(或者是flag相關的資訊,考察密碼學)
2、上傳或下載檔案的內容,通常包括檔名、hash值等相關資訊
3、一句話木馬、POST請求、內容包含eval,或者使用base64加密
5、wireshark資料提取
檔案-匯出物件-HTTP
手動匯出(匯出分組位元組流)
6、無線wifi流量包
特點:協議分析發現之後wireless LAN協議,很可能是WPA或者WEP加密的無線資料包,開啟wireshark會發現source欄位出現Tp-Link,
protoctl出現802.11
,就可以確定是wifi流浪包
(1)使用aircrack-ng工具進行wifi密碼破解
常見的加密方式:WEP;WPA;WPA2
1、檢查cap包的加密型別(BSSID表示MAC地址,ESSID表示wifi名字
)
aircrack-ng xxx.cap
2、使用字典進行握手包的破解
aircrack-ng xxx.cap -w pass.txt
或者使用工具進行破解
7、USB流量包分析
考點:滑鼠流量,鍵盤流量
1、鍵盤的流量
USB協議的資料部分在Leftover Capture Data域中
右鍵Leftover Capture Data->應用為列
USB鍵盤流量提取
(1)手動操作:檔案——匯出分組解析結果——CSV,匯出儲存一個.csv檔案
(2)工具操作:使用tsshark,將Leftover Capture Data中的內容單獨複製出來
tshark -r xxx.pacp -T fields -e usb.capdata >usbdata.txt
然後使用python指令碼提取出鍵盤流量即可
(2)滑鼠流量
利用指令碼將滑鼠流量提取出來,繪製成二維座標,然後使用工具將內容提取出來
HTTPS流量包分析
https流量包是經過TLS協議加密的,需要匯入key才能檢視到原始的HTTP流量(wireshark中會出現TLS,443等欄位)
(1)如何匯入金鑰
編輯-首選項-protocols-SSH-匯入
記憶體取證
工具安裝-volatility
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,判斷是否安裝成功
如果缺少外掛的話,會出現好多行報錯的
注:其餘內容放到記憶體取證專集講解,此處不做過多的贅述,謝謝大家,MISX基礎知識點就到此為止!