藍帽越來越離譜
爭分奪秒,101分排到前70
Ball_sigin + slient + 冬奧會_is_coming + 復現I_will_but_not_quite + 根據T佬復現嫌疑人x的硬碟整理
1.web:Ball_sigin
純玩游戲,會出現3個單詞缺一個字母,分別吃到對應字母即可出flag

2.PWN:slient
既然是原題,就可以直接算雜項了吧(霧
直接參考這個:https://www.lintstar.top/2020/12/784edd2e的slient,改掉埠和ip即可,flag都沒變
3.冬奧會_is_coming
png檔案尾有rar,foremost分離,分離出來個mp3,并且rar的注釋里面提示8個數字

檔案尾發現密文,將其16進制匯出后轉hex http://stool.chinaz.com/hex

然后使用emoji-aeshttps://aghorler.github.io/emoji-aes/生成一個flag{},發現與密文前幾位相同,鎖定emoji-aes,尋找秘鑰
有mp3并且提示八位數字,猜測與本次主題有關,嘗試歌曲的發布時間和冬奧會開始時間,發現20220204這個數字拿去mp3stego能解出來

將\x替換為空,再去剛剛hex

bugku做過,wingdings(鬧酒狂歡)
使用https://lingojam.com/WingdingsTranslator

最后找到了這個https://github.com/Tr0jAnV1rU4/1cePeak/blob/main/A/post-checkout
下載下來記事本打開



(復現)4.I_will_but_not_quite
vmem,明顯記憶體取證題,還給了個加密python就離譜啊
先進行常規操作
先查profile

然后查一下行程

可以發現最后使用的是winrar,猜測進行了壓縮,|grep rar和zip試試

這兩名字奇怪還出現在桌面上,必須得dump出來看看,(另一個沒用

kali其實看不到注釋,這里當時是師兄dump出來然后發qq,windows看到了注釋

密碼猜測成功弱密碼123456

然后這里盲區其實沒碰到過,是雙?六進制編碼https://www.calcresult.com/misc/cyphers/twin-hex.html

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相當于主函式,是隨機一個n然后進入r凱撒加密,加密之后將其base64編碼,然后對編碼后的字串每兩位進行異或,最后得到的值再base64編碼就得到了剛剛解出來的函式,
其中,雖然r里面獲取了亂數n,還有對小寫字母+num,但是由于是一起增加,所以最后只需要將0-26全部遍歷一遍即可,所以暫時可忽略掉此等會再來寫
問題出在x(secret[i], secret[(i+1)%len(secret)])
這里因為將最后一位也與第一位異或了,所以不能倒過來異或回去(因為極大可能會損失高位資料,事實也證明的確如此)
那么現在只需要得到第一次加密的base串,那串base解密用try-except,并回圈1,26即可,但是如何得到那串base?
其實可以知道,雖然我之前說過了,因為每一位都進行了異或,所以不能逆回去,但是可以爆破啊,其實這里先將那串base解碼之后看第一位和最后一位,一個110一個86,很容易將范圍縮小,暫且嘗試遍歷(86,128),這樣我們就相當于得到了最后一位的ascii碼十進制值,再逆回去的時候,當長度達到我們解出來的base64串時,停止,并try base64.b64decode(s).decode("utf-8),如果能解碼,則再執行r函式(或者上bugku去凱撒解密遍歷,即可找到flag,
寫腳本:
import base64
import random
secret = "Vnw3HC07BDgbBWNRGTx2fSckf399V1Z9CxIvHVd6fHsaEnR8fX40NyQ7JhM8CWV5fgMNN24="
dec = base64.b64decode(secret).decode("utf-8")
# for i in range(len(dec)):
# print(ord(dec[i]))
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
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位至最后一位拼接起來加在第一位后面
try:
s = base64.b64decode(s).decode("utf-8")
for i in range(1,26):#遍歷凱撒
flag = r(s,i)
print(flag)
except:
pass

5.嫌疑人x的硬碟整理
不會,稍微寫一點再引一點最后T佬解出來的解題程序
將x.vmdk放進取證大師,提示需要bitlocker,取證完后查看取證結果

然后右擊c盤,點擊bitlocker解密


解開C盤之后,重新取證


取出這兩個檔案,xlsx未發現宏,chat1.exe為關鍵,并且最后提示不要逆chat1.exe,更加鎖定了在chat1.exe里,而且除錯后發現有反除錯,其實猜測flag在記憶體中,根據T佬說用sharpOD反反除錯操作一波
首先x64dbg安裝這個插件,勾選如下

然后運行程式,F9到達第一個斷點處,此時在記憶體中找不到東西,發現再F9達到幾處斷點后程式關閉,根據正常運行的時候彈出connect fail!可以知道那4處斷點時有connect fail!彈出,在最后一個斷點處查看記憶體中的字串(雖然之后發現第二個斷點處已經有值了)


最后找到flag,這樣解可能是作者留下的后門解出來的
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/282094.html
標籤:其他
