CTF題記——再戰GK、BUU

前言

沒事做一些雜項和密碼學的題,記下沒見過的,總結思路。擴大腦洞。

Crypto🍖

[GKCTF2020]漢字的祕密

這道題當時沒做出來,做了一半。
下載下來的word文檔,打不開,然後就010Editor看一下,發現是壓縮包,改後綴解壓。
出來一堆文件
m0re
當時做的時候,查到一篇博客(現在找不到了),上面說這種題,信息一般都在document.xml中。然後就找
果然發現了信息,

王壯 夫工 王中 王夫 由由井 井人 夫中 夫夫 井王 土土 夫由
土夫 井中 士夫 王工 王人 土由 由口夫

是當鋪密碼,然後進行轉換是
m0re
這串字符串確實不是flag,到這裏我的思路就沒有了,古典密碼試了,看過wp後才明白是變異凱撒,之前還做過這種題,沒想到害。
下面是簡單腳本,

m0re="EJ>CvSHMV7G9R9@?3k"
flag=''

i=0
for a in miwen:
    i+=1
    flag+=chr(ord(a)+i)

print(flag)

跑出來flag,轉換成小寫提交。

[MRCTF2020]古典密碼知多少

沒見過的標準銀河字母,其他的兩種很容易看出來是豬圈密碼和聖堂武士密碼。然後對照百度找到的標準銀河字母對照表進行解碼
m0re
解出得到FGCPFLIrtuASyoN
m0re
所以進行柵欄解密
m0re
得到flag

[MRCTF2020]keyboard

m0re
看着鍵盤,也不是26鍵的,就是9鍵的,而且數字的位數不超過三。
數字是按鍵,個數是第幾個字母。
得到flag是mobilephond
但是提交不對,改成mobilephone就對了。

[WUSTCTF2020]佛說:只能四天

題目是與佛論禪,這個新的老的都試了一遍,新約佛論禪是可以解出來的。
在線解密網站🔑新約佛論禪
m0re
然後是社會主義核心價值觀編碼
在線網站🔑傳送門
m0re
最後doyouknowfence提示柵欄密碼
m0re
最後凱撒密碼,然後hint中是有提示的。
m0re
凱撒最初是移三位的。所以直接偏移3位即可。
得到後查看符合base32編碼,進行base32解密
m0re

Misc🍔

[GKCTF2020]code obfuscation

這個二維碼是扭曲的,掃描是掃不出來的,看別人的wp,都是用ps了,各種方法都有,不過,QR research可以掃描,但是直接掃描也是掃描不出來的,下面一個比較有意思的方法,就是打開這個圖片,截圖粘貼到一塊大的白屏上,然後儘可能讓圖片看起來小,再用工具掃描,就可以掃出來了。
m0re
然後進行文件分離,在圖片中分離出來一個壓縮包,有密碼的,然後gkctf應該是解壓密碼,不過要進行base編碼,只能挨個嘗試,最後base58加密出來是對的。解壓結果,一張圖片和一個文件
m0re
在線工具js美化——傳送門,直接將1文件拖進去,點擊美化。

m0re
看了大佬的博客,emmm,多少還是有點不理解的地方。
整理得到

for n in a b c d e f g h i j k l m n o p q r s t u v w x y z do eval An = "n"
done
for n in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z do eval An = "n"
done num = 0
for n in a b c d e f g h i j do eval Bn = "n"
num = $((num + 1))
done alert("Bk=' ';Bm='"';Bn='#';Bs='(';Bt=')';By='.';Cb='';Cc='<';Ce='>';Cl='_';Cn='{';Cp='}';Da='0';Db='1';Dc='2';Dd='3';De='4';Df='5';Dg='6';Dh='7';Di='8';Dj='9';")

再用下大師傅的腳本跑一下。

import string
s = "$Bn$Ai$An$Ac$Al$Au$Ad$Ae$Bk$Cc$As$At$Ad$Ai$Ao$By$Ah$Ce$Ai$An$At$Bk$Am$Aa$Ai$An$Bs$Bt$Cn$Ap$Ar$Ai$An$At$Bs$Bm$Aw$Dd$Al$Ac$Da$Am$Ae$Cl$De$Ao$Cl$Dj$Ak$Ac$At$Df$Bm$Bt$Cb$Ar$Ae$At$Au$Ar$An$Bk$Da$Cb$Cp"
ll = s.split('$')
list1 = ['Bk','Bm','Bn','Bs','Bt','By','Cb','Cc','Ce','Cl','Cn','Cp',
'Da','Db','Dc','Dd','De','Df','Dg','Dh','Di','Dj']
list2 = [' ','"','#','(',')','.','','<','>','_','{','}','0','1','2','3','4','5','6','7','8','9']
list3 = []
list4 = []
s = string.ascii_lowercase
for i in s:
	list3.append('A%s'%i)
	list4.append(i)
#print(list3,'\n',list4)

t = ''
for i in range(0,len(ll)):
	for j in range(0,len(list1)):
		if ll[i]==list1[j]:
			t += list2[j]
	for k in range(0,len(list3)):
		if ll[i]==list3[k]:
			t +=list4[k]
print(t)

m0re

[GKCTF2020]Harley Quinn

下載得到音頻文件和一張圖片,聽音頻,聽到最後面發現異常,也不知道是什麼,也不是摩斯密碼什麼的,後來看hint是電話音,

m0re

看了大佬的wp(這個比賽的時候我是沒有做出來的,沒有思路)
需要用到一個工具,dtmf2num.exe
下載地址呢,emmm這個大佬他給了下載鏈接,可以去他博客裏找鏈接,畢竟不好直接搬過來。——傳送門
然後下載好啦之後,需要先將那個音頻進行剪輯,把後面那段電話音剪出來,
可以選中電話音前面的所有部分,然後剪切掉

再導出文件就行了。
然後使用dtmf解題

#22283334447777338866#
九鍵


ctfisfun
然後第二個hint是


工具吧,百度搜索就行。
然後打開使用,可能需要將原來的JPEG爲後綴的圖片改成jpg格式,

輸入密碼,ctfisfun
得到一個flag.txt

[GXYCTF2019]gakki

foremost分離圖片得到壓縮包,然後是弱口令,8864(都是傻瓜式操作就不截圖了)
解壓出來flag.txt是
m0re
進行詞頻分析(這個應該就是考點)
官方給的腳本,這個在線網址有點力不從心。

# gakki_exp.py
# Author : imagin
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+- ={}[]"
f = open("flag.txt", "r")
data = f.read()
result = {d:0 for d in alphabet}
 
def sort_by_value(d):
    items = d.items()
    backitems = [[v[1],v[0]] for v in items]
    backitems.sort(reverse=True)
    return [ backitems[i][1] for i in range(0,len(backitems))]
 
for d in data:
    for alpha in alphabet:
        if d == alpha:
            result[alpha] = result[alpha] + 1
 
print(sort_by_value(result))

跑一遍得結果
m0re
flag{gaki_IsMyw1fe}

[SWPU2019]偉大的偵探

解壓得到密碼文件,misc文件夾是空的,編碼沒見過,所以就百度了一下,然後發現這種編碼可以使用010editor轉換
m0re
轉換就得到密碼,再次解壓得到圖片
m0re
是跳舞的小人,百度尋找對照表
得到flag{iloveholmesandwllm}

john-in-the-middle

這個流量分析,追蹤流沒得到有用的信息,嘗試導出http,然後看到了六張png圖片。
使用stegsolve查看,在logo.png 中得到flag
m0re
flag{J0hn_th3_Sn1ff3r}
也有直接進行foremost分離得到圖片的,兩種方法均可。

[GXYCTF2019]SXMgdGhpcyBiYXNlPw==

先解密這個題目,是base64,得到Is this base?
然後打開壓縮包後得到的flag.txt看到
m0re
雖然很多,但是還是進行了解碼查看了一下,但是沒找到有用的信息

Cette nuit,
Intenable insomnie,
La folie me guette,
Je suis ce que je fuis
Je subis,
Cette cacophonie,
Qui me scie la t錨te,
Assommante harmonie,
Elle me dit,
Tu paieras tes delits,
Quoi qu'il advienne,
On tra卯ne ses cha卯nes,
Ses peines,
Je voue mes nuits,
A l'assasymphonie,
Aux requiems,
Tuant par depit,
Ce que je seme,
Je voue mes nuits,
A l'assasymphonie,
Et aux blasphemes,
J'avoue je maudis,
Tous ceux qui s'aiment,
L'ennemi,
Tapi dans mon esprit,
F錨te mes defaites,
Sans repit me defie,
Je renie,
La fatale heresie,
Qui ronge mon 錨tre,
Je veux rena卯tre,
Rena卯tre,
Je voue mes nuits,
A l'assasymphonie,
Aux requiems,
Tuant par depit,
Ce que je seme,
Je voue mes nuits,
A l'assasymphonie,
Et aux blasphemes,
J'avoue je maudis,
Tous ceux qui s'aiment,
Pleurent les violons de ma vie,
La violence de mes envies,
Siphonnee symphonie,
Deconcertant concerto,
Je joue sans toucher le Do,
Mon talent sonne faux,
Je noie mon ennui,
Dans la melomanie,
Je tue mes phobies,
Dans la desharmonie,
Je voue mes nuits,
A l'assasymphonie,
Aux requiems,
Tuant par depit,
Ce que je seme,
Je voue mes nuits,
A l'assasymphonie,
Et aux blasphemes,
J'avoue je maudis,
Tous ceux qui s'aiment,
Je voue mes nuits,
A l'assasymphonie (l'assasymphonie),
J'avoue je maudis,
Tous ceux qui s'aiment

還有亂碼,又想到這個題是雜項裏面的,應該不是隻讓解密的吧,反正還是沒有其他的思路。
這個emmm沒有什麼思路了,就找wp學習學習
發現是base64隱寫
學習看這裏🔑神奇的base64
然後跑下腳本就出來了吧。

# -*- coding: cp936 -*-
b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
with open('flag.txt', 'rb') as f:
    bin_str = ''
    for line in f.readlines():
        stegb64 = ''.join(line.split())
        rowb64 =  ''.join(stegb64.decode('base64').encode('base64').split())
        offset = abs(b64chars.index(stegb64.replace('=','')[-1])-b64chars.index(rowb64.replace('=','')[-1]))
        equalnum = stegb64.count('=') #no equalnum no offset
        if equalnum:
            bin_str += bin(offset)[2:].zfill(equalnum * 2)
        print ''.join([chr(int(bin_str[i:i + 8], 2)) for i in xrange(0, len(bin_str), 8)]) #8 位一組

m0re
注意是python2寫的腳本,需要使用2.7的版本去運行。
flag{fazhazhenhaoting}
這道題與 ([ACTF新生賽2020]base64隱寫)相似,可以一塊瞭解。
m0re

[SWPU2019]你有沒有好好看網課?

兩個壓縮包都有密碼,每個查過一遍,看到flag3.zip上有備註,是一個六位數字的密碼。暴力破解就行。
然後解碼得到一個word文檔和影流之主的mp4文件
m0re
然後兩個不尋常的數字,分別查看視頻中相應的幀數所在的畫面
m0re
m0re
在燈上,兩條信息得到

..... ../... ./... ./... ../
dXBfdXBfdXA=

第一個是敲擊碼
m0re
解碼得到WLLM,與base64解出的拼接到一起是wllmup_up_up,也就是flag2.zip的密碼
得到圖片用010editor打開
m0re

[BJDCTF 2nd]TARGZ-y1ng

不用爆破,tar zxvf不管用,那麼密碼就可能沒有或者僞加密,或者在備註當中再有就是文件名就是密碼。的確是文件名,但是解壓好多次都沒有得到結果。
看了wp,發現要解壓300次,應該是不行的。
還有就是腳本,這裏直接使用腳本可以。

#來源官方wp#
import zipfile

name = 'hW1ES89jF'
while True:
    fz = zipfile.ZipFile(name + '.tar.gz', 'r')
    fz.extractall(pwd=bytes(name, 'utf-8'))
    name = fz.filelist[0].filename[0:9]
    fz.close()

注意,運行自行建立一個新文件夾,然後就是傻瓜式操作。
找到flag文件用記事本打開就可以了。

黑客帝國

打開後是一個文本文件,emmm腦洞太小,想不到。看wp學習
emmm💡是十六進制,用HxD編輯保存一下
m0re
是壓縮包,而且壓縮包有密碼,emmm,也不是僞加密。那就暴力破解試試。
m0re
然後打開是個圖片,但是圖片無法打開。
010editor查看,發現圖片類型是JFIF,應該是jpg圖片格式,所以將文件頭修改成jpg格式的。
m0re
然後看到圖片
m0re

flag{57cd4cfd4e07505b98048ca106132125}

[MRCTF2020]你能看懂音符嗎

壓縮包損壞,010editor看到前兩組數據換了位置,改回來就行
m0re
然後解壓得出一個word文檔,打不開,010editor看出是zip壓縮包。改後綴。
解壓得到一堆文件,根據經驗,信息一定藏在document裏,果然找到了音符
m0re
然後使用在線網站解碼就行了
m0re

百裏挑一

解壓文件得到的是pcap數據包,題目提示好多圖片,wireshark打開導出http對象,保存到一個文件夾中。然後在kali中使用一條命令找到一半的flag

exiftool *|grep flag

意思是在當前文件夾中匹配flag字段
關於exiftool看這裏🔑exiftool的說明使用
m0re
另一半需要在wireshark中找
但是我找了半天也沒找到,煩躁💣
看了wp發現是114……鬱悶💔
m0re
這……我真是🈚🐔8🐟

flag{ae58d0408e26e8f26a3c0589d23edeec}

從娃娃抓起

兩種編碼,
m0re
查詢後瞭解到分別是中文電碼和五筆編碼
m0re
第一行——人工智能
m0re
第二行——也要從娃娃抓起
m0re
32位小寫

[DDCTF2018](╯°□°)╯︵ ┻━┻

打開文件發現一串字符串。
m0re
十六進制的數字,先轉換成10進制的。需要先將這麼多數字中兩個兩個分開。
腳本:

s="d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd"
a = ""
for i in range(0,len(s),2):
    a = a+"0x"
    a += s[i:i+2]
    a += ","
print(a)
0xd4,0xe8,0xe1,0xf4,0xa0,0xf7,0xe1,0xf3,0xa0,0xe6,0xe1,0xf3,0xf4,0xa1,0xa0,0xd4,0xe8,0xe5,0xa0,0xe6,0xec,0xe1,0xe7,0xa0,0xe9,0xf3,0xba,0xa0,0xc4,0xc4,0xc3,0xd4,0xc6,0xfb,0xb9,0xb2,0xb2,0xe1,0xe2,0xb9,0xb9,0xb7,0xb4,0xe1,0xb4,0xb7,0xe3,0xe4,0xb3,0xb2,0xb2,0xe3,0xe6,0xb4,0xb3,0xe2,0xb5,0xb0,0xb6,0xb1,0xb0,0xe6,0xe1,0xe5,0xe1,0xb5,0xfd,

然後轉換成ascii碼, 但是轉換成10進制時,發現數值都大於128,所以減去128進行嘗試,(128=0x80)

a=[0xd4,0xe8,0xe1,0xf4,0xa0,0xf7,0xe1,0xf3,0xa0,0xe6,0xe1,0xf3,0xf4,0xa1,0xa0,0xd4,0xe8,0xe5,0xa0,0xe6,0xec,0xe1,0xe7,0xa0,0xe9,0xf3,0xba,0xa0,0xc4,0xc4,0xc3,0xd4,0xc6,0xfb,0xb9,0xb2,0xb2,0xe1,0xe2,0xb9,0xb9,0xb7,0xb4,0xe1,0xb4,0xb7,0xe3,0xe4,0xb3,0xb2,0xb2,0xe3,0xe6,0xb4,0xb3,0xe2,0xb5,0xb0,0xb6,0xb1,0xb0,0xe6,0xe1,0xe5,0xe1,0xb5,0xfd]
for i in a:
    print(chr(i-0x80), end="")

m0re
得到flag
還找到一個一步走的腳本

def hex_str(str):
    hex_str_list=[]
    for i in range(0,len(str)-1,2):
        hex_str=str[i:i+2]
        hex_str_list.append(hex_str)
    print("hex列表:%s\n"%hex_str_list)
    hex_to_str(hex_str_list)


def hex_to_str(hex_str_list):
    int_list=[]
    dec_list=[]
    flag=''
    for i in range(0,len(hex_str_list)):
        int_str=int('0x%s'%hex_str_list[i],16)
        int_list.append(int_str)
        dec_list.append(int_str-128)
    for i in range(0,len(dec_list)):
        flag += chr(dec_list[i])
    print("轉化爲十進制int列表:%s\n"%int_list)
    print("-128得到ASCII十進制dec列表:%s\n"%dec_list)
    print('最終答案:%s'%flag)


if __name__=='__main__':
    str='d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd'
    print("字符串長度:%s"%len(str))
    hex_str(str)

總結🍗

密碼學瞭解🍕
標準銀河字母🔑——對照表
鍵盤密碼
當鋪密碼
變異凱撒

雜項瞭解🎂
JS美化
解密電話音
工具——dtmf2num.exe
工具——FreeFileCamouflage
詞頻分析
- 腳本
- 在線網站
新瞭解的編碼——EBCDIC(可用010editor轉碼)
跳舞的小人
base64隱寫
敲擊碼
套娃解壓壓縮包——腳本
音符加密
工具——exiftool
中文電碼
五筆編碼

抓住端午節的小尾巴,端午節快樂!
以上就是這次總結,再接再厲。加油!加個雞腿🍗

文末寄語

歡迎來到現實世界,它糟糕得要命,但你會愛上它的。——《老友記》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章