参考文章:蓝帽杯2021初赛 writeup+赛后复现(misc123+pwn2+web1)
1、I_will_but_not_quite
个人最喜欢这道题,因为最后的异或竟然不能逆向,还得爆破,想了半天也不知道怎么写。
首先,拿到文件是一个vmem文件和一个py加密脚本,所以怀疑是去vmem中取证拿到相关信息然后再根据加密脚本反推解密。
首先查文件、查进程,发现进程里除了系统进程还有一个winrar.exe的进程,怀疑有文件被解压缩了
查看是否有rar和zip文件,发现存在然后dump出来,发现一个exe和一张图,exe没用:
用到的几个指令:
./ etc/profile(个人原因)
volatility -f Twin.vmem(image name) imageinfo
volatility -f Twin.vmem pslist --profile=Win7SP1x64
volatility -f Twin.vmem --profile=Win7SP1x64 filescan |grep rar(zip)
volatility -f Twin.vmem --profile=Win7SP1x64 dumpfiles -Q 0x000000003e557990(pid) -D /root
有图的那个zip包,注释写着:“哼!我 '看透' 你了” what s up 还把看透加了引号,那一定是outguess隐写,密码不知道,wp直接猜出了弱密码是123456,这太巧了,到了这里我是做不下去了,然后解出一段hex。
4266gj2zn17b2jo5b62k73g22xg6j658350r5771vd40h4bd2ns33q30651y57s6752su3q05881hs3h53nb3603co2mv40l58n3da3f61i5
弃坑点二,这个十六进制转不了啊,然后看wp是双十六进制转码,转码地址:
https://www.calcresult.com/misc/cyphers/twin-hex.html
解出来一段密文就是通过python加密后的密文了,需要通过加密脚本反推flag
Vnw3HC07BDgbBWNRGTx2fSckf399V1Z9CxIvHVd6fHsaEnR8fX40NyQ7JhM8CWV5fgMNN24=
#!/user/bin/python2
import random
def r(s, num):
l=""
for i in s:
if(ord(i) in range(97,97+26)):
l+=chr((ord(i)-97+num)%26+97)
else:
l+=i
return l
def x(a, b):
return chr(ord(a)^ord(b))
def encrypt(c):
secret = c
n=random.randint(1,1000)
for i in range(n):
secret = r(secret, random.randint(1,26))
secret = secret.encode('base64')
l = ""
for i in range(len(secret)):
l += x(secret[i], secret[(i+1)%len(secret)])
return l.encode('base64')
flag = "#################"
print "secret =", encrypt(flag)
#secret = The key you got
看加密逻辑还是蛮简单的(是我年轻),主函数encrypt,然后取小写字母去做凯撒移位(因为范围26),然后取个随机数重复这么多回,然后把内容base,再去逐位异或,最后再做一个base64得到上面的密文;
那么反推就是:先去base64解密,然后逐位异或,再base64解密,再去遍历凯撒,随机数可以忽略,因为最后的答案一定是26种凯撒中的一个。
看着简单,但是反逆异或时我死活也写不出来,问题出在 (secret[i], secret[(i+1)%len(secret)] 这样的话最后一位要去异或第一位,反推咋写也写不对,看wp也没看懂,弃坑点3,参照wp遍历出来了,以下这几行不知为啥:
for i in range(86,128):
j = 1
tmp = [""]*len(dec)
tmp[-1] = chr(i)#爆破恢复最后一位,即可恢复所有
while j != len(dec):
tmp[-j-1] = chr(ord(dec[-j])^ord(tmp[-j])) #反着进行异或
j += 1
s = tmp[-1] #因为最后一位是最后一位和第一位异或,所以刚开始异或的其实是最后一位
for i in range(len(tmp)-1):
s += tmp[i]#这里即是将第2位至最后一位拼接起来加在第一位后面
2、冬奥会_is_coming
冬奥会_is_coming ? oh_it_is_fucking_coming。开局一张图,既然是misc题,那就日常先看看图里面的内容,发现有个MP3:
rar压缩包里注释提示密码是8位数字,这里用mp3stego去解,因为题目不叫冬奥会 coming啥的么,所以猜测密码是冬奥会开幕日20220204,还不错,猜对了。然后就来了一串阴间的,这里做不下去了,看wp去了
Decode.exe -X -P 20220204 encode.mp3
看了wp.用010打开mp3尾部还有段密文,需要把这段16进制放到http://stool.chinaz.com/hex解码得到一堆emoji表情。。
顺便把刚才mp3解出的内容hex解码一下(去掉\x):
这又是什么玩意啊,接着看wp,需要去https://lingojam.com/WingdingsTranslator把这段解密,我真讨厌做杂项,这都什么这太阴间了吧,想砍人了。解了密出来一段内容让去看看github这个仓库,发现有一个文件,下载下来
打开来了有一串类似秘钥的东西,还回到刚才emoji,有个相关的emoji解密也需要key,解解看:
https://aghorler.github.io/emoji-aes/
🙃💵🌿🎤🚪🌏🐎🥋🚫😆🎃✅⌨🔪❓🚫🐍🙃🔬✉👁😆🎈🐘🏎🐘🐘😂😎🎅🖐🐍✉🍌🌪🐎🍵✅🚪✖☃👣👉ℹ🔪🍎🔄👣🚪😁👣💵🐅🍵🔬🛩😇🖐🖐🎅✅🏎👌🚨😆🎤🎅🦓🌿🦓🙃✖🍌🛩😂👑🌏☃😇😍🛩🚹😀🍌🎈💧🗒🗒
How_6ad_c0uld_a_1cePeak_be?
flag{e32f619b-dbcd-49bd-9126-5d841aa01767} 服了
3、嫌疑人x的硬盘整理
直接看wp,参考Bitlocker加密盘解密实例,用X-Ways打开题目vmdk文件,分区2被bitlocker加密,分区3有解密秘钥。
用OSFMount挂载vmdk,进入需要输入秘钥,选择更多里的输入恢复秘钥,把刚才txt文件中的秘钥输进去:
解出来一个xlsx和一个exe,要开始逆向了。。。
查壳,感觉有壳,然后用x64dbg打开,好像有反调试,不让调,wp说需要用sharpOD反反调试操作一波
装完后直接F9,跟了几个断点搜了下字符串,找到flag。
插件设置: