DASCTF 2023-11月的这道流量分析题,还是有点意思的。题目在mega上
分析流量
直接用wireshark打开,随便扫一眼,根据特征就能发现是蚁剑的包。
根据经验,筛选http,直接定位到第四个请求包。蚁剑题有多种编码方法,这里的话是base64
他这里post的是k59c2ae7730483的值,我们看到这个key对应的value,直接解码,得到很大一坨命令。
大概分析一下,看的出来他在尝试跑shell(runshellshock),然后post了几个命令,并且是base64_decode(substr($_POST["k275f4d770f3a3"],2)),说明该命令需要去除前两个字符并进行base64解码。在这里我们看一个一个比较长的(一般是命令cd目录然后运行什么的,所以比较长)
Form item: "dd6f4eedea78f3" = "Z8Y2QgIi93d3cvd3d3cm9vdC9EQVMyMDIzMTAuY29tIjtjYXQgSWNl
VGVhLnR4dDtlY2hvIDI3ZDY2N2IwYzk0OTtwd2Q7ZWNobyBmMGU1MmI2ZWQ="
去掉前两个字符,解码,得到
cd "/www/wwwroot/DAS202310.com";cat IceTea.txt;echo 27d667b0c949;pwd;echo f0e52b6ed
他cat输出了一个txt。由于不知道是什么,所以我们看一下前面一个数据包,看看有没有IceTea.txt的相关信息。同理,挑选一个看起来比较长的命令
kcY2QgIi93d3cvd3d3cm9vdC9EQVMyMDIzMTAuY29tIjsuL2V6YmF
zZSBlIGZsYWcudHh0IEljZVRlYS50eHQ7ZWNobyAyN2Q2NjdiMGM5NDk7cHdkO2VjaG8gZjBlNTJiNmVk
去掉前两个字符,解码得到
cd "/www/wwwroot/DAS202310.com";./ezbase e flag.txt IceTea.txt;echo 27d667b0c949;pwd;echo f0e52b6ed
看来他运行了一个二进制文件。根据参数猜测是对flag.txt做了某种处理输出了IceTea.txt,那么刚刚看的第四个http请求,他的响应就是flag了。我们看一下第四个http的响应,只有这么个玩意
7db35ecmVmdHFScmc0UUI5enZaUXp3ZjUweG41MUNaUXhTZjUxZ1pQ
enhqNXpoakYxQ0k3NXFFPTI3ZDY2N2IwYzk0OQovd3d3L3d3d3Jvb3Qv
REFTMjAyMzEwLmNvbQpmMGU1MmI2ZWQKf6957ca6229b
去掉前两个字符,base64解码得到
o~^reftqRrg4QB9zvZQzwf50xn51CZQxSf51gZPzxj5zhjF1CI75qE=27d667b0c949
其中的reftqRrg4QB9zvZQzwf50xn51CZQxSf51gZPzxj5zhjF1CI75qE=就是我们要decode的密文,后面的27d667b0c949是echo的不用管
获取二进制文件
获取到密文之后,就得看一下这个./ezbase对明文做了什么处理。重新看一下流量,发现他用tcp传了个巨大的数据流。
他post了一个16进制文件,应该就是我们要找的ezbase。右键追踪流,把相应的16字节拿出来看一下。
注意,流中有&,前面是16进制文件的数据,后面是一些post的参数。不要无脑复制
得到这个数据后,我们可以丢给赛博厨师转hex,选择auto(这里可以再魔法棒一下,他会detect一下file类型,会显示是elf),然后把output保存为文件。一般来讲,传输的文件可能会有一些加密或壳,所以以防万一我们用exeinfo看一下。
看得出来用了upx。我们用upx4.0脱一下(3.x脱不了。建议两种版本都准备一份)
upx.exe -d download.elf
得到了一个更大的(13kb)脱壳后文件。拖入idax64分析看看
从函数名看得出来,他应该只是一个单纯的base64,应该是自建了一个码表。
看一下b64_encode,他引用了b64_encodedef,所以我们直接看一下b64_encodedef的16进制表
这里面的
abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ+/
就是码表直接赛博厨师解码之前的密文得到flag了
DASCTF{Ice_tea_is_not_a_loser_drink!}