題目名稱:
資料包分析-抓到一隻蒼蠅
題目描述:
題目:報告首長!發現一隻蒼蠅。。 在哪? here! 臥槽?!好大一坨蒼蠅。。
感覺很有意思,所以寫了篇記錄
開局拿到資料包先看http協議的,題目描述說好大一隻fly,那就分組位元組流搜字串fly
。發現有多個,那就先拿最先的幾個追蹤流看看,可以看到post請求了個JSON格式內容
{
"path":"fly.rar",
"appid":"",
"size":525701,
"md5":"e023afa4f6579db5becda8fe7861c2d3",
"sha":"ecccba7aea1d482684374b22e2e7abad2ba86749",
"sha3":""
}
結合HTTP匯出物件的主機名來看,猜測這可能是郵箱檔案傳輸,傳輸了一個叫fly.rar的壓縮包,大小是525701。
http傳輸檔案那必然是使用post方法,使用過濾http.request.method ==POST
,結合上圖來看,他是經歷了一次郵件傳輸分別向set2.mail.qq.com
傳送正文以及攜帶檔案資訊,sz.mail.ftn.qq.com
傳送附件。為什麼這麼講呢?這是有推斷過程的
可以發現163、289、431、577、729這5個連續的post包data大小各為131436、131436、131436、131436、1777,合計大小為527521,附件原大小為525701,這是十分接近的。那到底多出來什麼呢?拿去010來比較一下
發現任意檔案之中都有一段相同的頭部,那就是通訊時候需要的頭部,並不是檔案本身的內容,但是從這裡並不能很好判別出來頭部結束在哪裡。
但是透過整理之前的資訊,原有資料包525701,5個合計資料包527521
(527521−525701)/5=364 即為頭部檔案大小
然後就是需要剔除加合併資料,使用linux的dd命令,這裡參考了這篇文章
合成檔案前先科普Linux/Unix語法:
語法:dd [選項]
if =輸入檔案(或裝置名稱)。
of =輸出檔案(或裝置名稱)。
ibs = bytes 一次讀取bytes位元組,即讀入緩衝區的位元組數。
skip = blocks 跳過讀入緩衝區開頭的ibs*blocks塊。
obs = bytes 一次寫入bytes位元組,即寫入緩衝區的位元組數。
bs = bytes 同時設定讀/寫緩衝區的位元組數(等於設定ibs和obs)
tee -a 輸出追加
按順序匯出data,這裡我分別命名為1.bin、2.bin ........
for i in {1..5}; do dd if=$i.bin bs=1 skip=364 2>/dev/null | tee -a fly.rar >/dev/null ; done
然後可以md5sum一下,檔案完整性一致
md5sum fly.rar
e023afa4f6579db5becda8fe7861c2d3 fly.rar
但是解壓會發現檔案頭出錯,rar修復無效,那就剩下偽加密的玩法了
找到第24個位元組,該位元組尾數為4表示加密,0表示無加密,將尾數改為0即可破解偽加密
84改為80,解壓出來一個txt,提示我們要執行此程式,順手拖到尾部看到明顯的IEND字樣。先改為exe執行出來是蒼蠅....,那就直接binwalk,foremost梭,foremost可以梭出來一堆圖片,有二維碼flag{m1Sc_oxO2_Fly}