DASCTF HK的怪兽的附件
根据题目提示压缩包有点多,找不到密码可以去看看命令执行了些什么(第一点不止一个压缩包,第二点存在命令执行?)
解密ZIP后,得到一个数据包文件和flag.zip压缩文件
分析数据包,命令执行?过滤http数据包,上传了webshell
根据特征貌似是哥斯拉webshell,还有key?
怀疑是不是要对它进行解密,查看他上传webshell后执行了什么命令?
查看他post的数据包后果然加密了,那这部分就是对哥斯拉webshell进行解密查看他执行的命令
附上解密脚本
第一个 reqeust请求解密脚本
<?php
function encode($D,$K){
for($i=0;$i<strlen($D);$i++) {
$c = $K[$i+1&15];
$D[$i] = $D[$i]^$c;
}
return $D;
}
function isGzipStream($bin){
if (strlen($bin)>=2){
$bin=substr($bin,0,2);
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
switch ($typeCode) {
case 31139:
return true;
break;
default:
return false;
}
}else{
return false;
}
}
$pass = "POST内容";
$key='替换自己的key';
$data=encode(base64_decode($pass),$key);
if(isGzipStream($data)){
echo "666\n";
echo gzdecode($data);
}
else{
echo $data;
}
?>
第二个 响应解密脚本
<?php
function encode($D,$K){
for($i=0;$i<strlen($D);$i++) {
$c = $K[$i+1&15];
$D[$i] = $D[$i]^$c;
}
return $D;
}
$key='自己的key';
$a = '需要解密的响应密文';
$b = substr($a, 16, strlen($a)-32);
echo gzdecode(encode(base64_decode($b), $key));
在wireshark中导出http对象
执行脚本一个个替换尝试(可以写脚本批量跑,但我不想写),带有DASCTF的是请求包
最后试到一个cat查看文件的,文件名Pass1sHere
那我们这密码不就来了吗?迫不及待的看下一个回显包,空的???什么鬼(没思路了)
峰回路转准备放弃的时候 去改了下flag.zip的文件后缀,使用txt文档打开后 无意间发现存在提示,使用shell中的key解压缩??
使用9854e8aa5568e23c解压缩后,一个flag文件,也没flag啊打开后乱码,这是怎么回事。
又没思路了………无语(什么套路)
突然想到在数据包中有看到上传过一串16进制,文件头为504B这不是zip吗。想到题目提示多个压缩包??会不会在这里面
复制导入winhex,保存为zip文件。
尝试解压文件,怎么还有密码wnm。。。。(试了下不是伪加密)
突然想到前面我们解密执行的命令的时候,有个cat Pass1sHere.txt,Pass1sHere这个会不会是密码呢,果然就是它!
解密后是一个pem私钥文件,这怎么搞…
又卡了一会,已将没有可利用的点了,那会不会是用私钥去解密文件获得flag呢?(这一步平时真没有遇到过,可能是做题做的少吧)
openssl pkeyutl -decrypt -in flag -inkey 1.pem -out 1.file
芜湖 出题人的套路有点深啊….
DASCTF{987787ad-5cf9-4909-b847-8dfb9d657988}
其他题目点个关注,持续更新中~