CTF常見密碼彙總

FuPo1發表於2024-08-15

柵欄密碼

fg2ivyo}l{2s3_o@aw__rcl@-->flag{w22_is_v3ry_cool}

https://tool.bugku.com/jiemi/

所謂柵欄密碼,就是把要加密的明文分成N個一組,然後把每組的第1個字連起來,形成一段無規律的話。 不過柵欄密碼本身有一個潛規則,就是組成柵欄的字母一般不會太多。(一般不超過30個,也就是一、兩句話)用一定的規則把原文打亂然後用@連線)

類柵欄密碼

特徵:會給你一串亂序的密文 C,同時給你從1 到 n 的一串亂序的數,找下 C 對於 n 的最大公約數,然後將他們重新排序。

動手畫一畫就出來了。

BugKu中的一道題:

lf5{ag024c483549d7fd@@1}
一張紙條上凌亂的寫著2 1 6 5 3 4

再按照123456的順序數從第一行排到最後一行:
flag{52048c453d794df1}@@
提交 flag發現不對,這兩個@@有點奇怪,去掉@就成功了,那麼一般這種字元都是迷惑人的。

md5

18414996c5377f5f4419a40eba901789-->flag{hello_world!}

一般為32位 由數字和小寫字母組成

base家族

https://conv.darkbyte.ru/

base64

ZmxhZ3toZWxsb193b3JsZCF9IAo==-->flag{hello_world!}

base64的空格被加密成=

base16

666C61677B6D795F6E616D655F482121487D-->flag{my_name_H!!H}

由數字和大寫字母組成

base58

xpoetRPM7vtSVDSRGRp4nXv-->flag{hello-world}

Base58是用於Bitcoin中使用的一種獨特的編碼方式,主要用於產生Bitcoin的錢包地址。相比Base64,Base58不使用數字"0",字母大寫"O",字母大寫"I",和字母小寫"l",以及"+"和"/"符號。

base91

@iH<,{bdR2H;i6*Tm,Wx2izpx2!--> flag{554a5058c9021c76}

國外解密網站:
https://www.dcode.fr/base-91-encoding
http://www.hiencode.com/base91.html

unicode

\u0066\u006c\u0061\u0067\u007b\u0069\u005f\u0077\u0069\u006c\u006c\u005f\u006b\u0069\u006c\u006c\u005f\u0079\u006f\u0075\u0021\u007d-->flag{i_will_kill_you!}

萬國碼:每一字元都用一個5位字元編碼表示,並用\分割
Unicode 字元可以適用於所有已知的編碼。Unicode 是繼 ASCII(美國國家互動資訊標準編碼)字元碼後的一種新字元編碼,它為每一個符號定義一個數字和名稱,並指定字元和它的數值(碼位),以及該值的二進位制位表示法,透過一個十六進位制數字和字首(U)定義一個16位的數值,如:U+0041 表示 A,其唯一的名稱是 LATIN CAPITAL LETTER A。

零字元寬度隱寫

http://330k.github.io/misc_tools/unicode_steganography.html
零寬度字元是隱藏的不顯示的,也是不可列印的,也就是說使用大部分程式和編輯器是看不到這種字元的。它們存在於頁面中主要用於調整字元的顯示格式。

零寬空格(zero-width space, ZWSP)用於可能需要換行處。
Unicode: U+200B HTML: ​

零寬不連字 (zero-width non-joiner,ZWNJ)放在電子文字的兩個字元之間,抑制本來會發生的連字,而是以這兩個字元原本的字形來繪製。
Unicode: U+200C HTML: ‌

零寬連字(zero-width joiner,ZWJ)是一個控制字元,放在某些需要複雜排版語言(如阿拉伯語、印地語)的兩個字元之間,使得這兩個本不會發生連字的字元產生了連字效果。
Unicode: U+200D HTML: ‍

左至右符號(Left-to-right mark,LRM)是一種控制字元,用於計算機的雙向文稿排版中。
Unicode: U+200E HTML: ‎ ‎ 或‎

右至左符號(Right-to-left mark,RLM)是一種控制字元,用於計算機的雙向文稿排版中。
Unicode: U+200F HTML: ‏ ‏ 或‏

位元組順序標記(byte-order mark,BOM)常被用來當做標示檔案是以UTF-8、UTF-16或UTF-32編碼的標記。
Unicode: U+FEFF

零寬度字元的作用

資料防爬
將零寬度字元插入關鍵詞文字中,使得匹配關鍵字時不能正確匹配,但是不影響使用者的正常閱讀

資訊隱藏
可以將資訊隱藏在正常文字中而不影響閱讀

如何隱藏

首先,輸入需要被加密的內容將被轉換為其二進位制(Morse編碼),然後該二進位制(Morse編碼)將被轉換為一系列的零寬度字元。然後可以將零寬度的字串不可見地插入正常文字中,這樣就被隱藏了。
每一種基於零寬度字元的隱寫都可以有自己的隱寫方式及加密方式,所以可能用這一個工具或指令碼加密過的字串在另一個解密網站就無法成功解密。
注意:加密和解密一定要用同一個網站或指令碼!!!

摩斯電碼

-... -.- -.-. - ..-. -- .. ... -.-.-->BKCTFMISC

https://tool.bugku.com/mosi/

相當於二進位制編碼

摩斯電碼變形

0010 0100 01 110 1111011 11 11111 010 000 0 001101 1010 111 100 0 001101 01111 000 001101 00 10 1 0 010 0 000 1 01111 10 11110 101011 1111101-->flag{}m0rse_code_1s_interest1n9!}

特點:由0和1組成,並且每段的長度不一樣

OOK語言

Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.……-->flag{ok-ctf-1234-admin}

https://tool.bugku.com/brainfuck/

OOK!是一種為紅毛猩猩設計的程式語言。OOK!與眾所周知的深奧語言BrainF ***基本上是同構的 ,但語法元素更少

OOK語言變形

..... ..... ..... ..... !?!!. ?.... ..... ..... ..... .?.?! .?... .!........ ..... !.?.. ..... !?!!. ?!!!! !!?.? !.?!! !!!.. ..... ..... .!.?...... ...!? !!.?. ..... ..?.? !.?.. ..... .!.?. ..... ..... !?!!. ?!!!!!!!!! !?.?! .?!.? ..... ....! ?!!.? ..... ...?. ?!.?. .....
-->
flag{bugku_jiami}

Brainfuck語言

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>. -->Hello World!

https://tool.bugku.com/brainfuck/

  • < . ] [ -,8種符號

凱撒密碼

明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC

https://tool.bugku.com/jiemi/

特點: 在原來字元上進行一定的偏移

escape

flag%7Bi-will-kill-you%21%7D -->flag{i-will-kill-you!}

核心價值觀編碼

公正公正公正誠信文明公正民主公正法治法治友善平等和諧敬業和諧富強和諧富強和諧文明和諧平等公正公正和諧法治公正公正公正文明和諧民主和諧敬業和諧平等和諧敬業和諧敬業和諧和諧和諧公正法治友善法治-->flag{90025f7fb1959936}

http://www.hiencode.com/cvencode.html

由核心價值觀的12個詞語組成的編碼方式

sha1

7c2380341e0f03f81f873ab8d2ea5b88bc690793 -->flag{hello_world!}

40 位 由數字和小寫字母組成

urlencode

%68%61%63%6b%65%72%44%4a-->hackerDJ

將需要轉碼的字元轉為16進位制,然後從右到左,取4位(不足4位直接處理),每2位做一位,前面加上%,編碼成%XY格式。
比如:
空格ASCII碼是32,對應16進位制是20,那麼urlencode編碼結果是:%20,但在新標準中空格對應的是+,見RFC-1738
預設:字母是不進行編碼的

當鋪密碼

羊由大井夫大人王中工-->9158753624

當鋪密碼[1]就是一種將中文和數字進行轉化的密碼,演算法相當簡單:當前漢字有多少筆畫出頭,就是轉化成數字幾

rot13

Ubj pna lbh gryy na rkgebireg sebz na vagebireg ng AFN? In the elevators, the extrovert looks at the OTHER guy's shoes.
-->How can you tell an extrovert from an introvert at NSA? Va gur ryringbef, gur rkgebireg ybbxf ng gur BGURE thl'f fubrf.

ROT13是它自己本身的逆反;也就是說,要還原ROT13,套用加密同樣的演算法即可得,故同樣的操作可用再加密與解密。該演算法並沒有提供真正的密碼學上的保全,故它不應該被套用在需要保全的用途上。它常常被當作弱加密示例的典型

詞頻分析

Eg qnlyjtcnzydl z umaujejmjetg qeydsn eu z bsjdtx tw sgqtxegc al kdeqd mgeju tw yrzegjsoj zns nsyrzqsx kejd qeydsnjsoj
Ew ltm fgtk jds kzl tw sgqtxegc m kerr csj jds wrzc kdeqd eu qrzuueqzr-qeydsn_eu_gtj_usqmnejl_du
-->
In cryptography a substitution cipher is a ?ethod of encoding by which units of plaintext are replaced with ciphertext If you know the way of encoding u will get the flag which is classical-cipher_is_not_security_hs

一種加密方式,做攻防世界的時候遇到的,
線上解密:
https://quipqiup.com/

jsfuck

(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(![]+[+[]]+([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+
-->flag{hhaj}

F12開啟控制檯
將密文複製進去,回車就可以得到密碼

decode HTML

LzExOS8xMDEvMTA4Lzk5LL122;ExM-->LzExOS8xMDEvMTA4Lzk5LzExM

DES

秘鑰:6XaMMbM7
U2FsdGVkX18IBEATgMBe8NqjIqp65CxRjjMxXIIUxIjBnAODJQRkSLQ/+lHBsjpv1BwwEawMo1c=
-->ctf{67a166801342415a6da8f0dbac591974}

DES是一種對稱金鑰加密塊密碼演算法,1976年被美國聯邦政府的國家標準局確定為聯邦資料處理標準(FIPS),隨後在國際上廣泛流傳開來。它基於使用56位金鑰的對稱演算法

鍵盤格子密碼

r5yG lp9I BjM tFhBT6uh y7iJ QsZ bhM
-->
t o n g y u a n

特徵:由三到四個英文字母或數字為一組。
在鍵盤上找對應的鍵位,中間圍起來的就是密文

托馬斯傑斐遜 轉輪密碼

密碼錶:

金鑰: 2,5,1,3,6,4,9,7,8,14,10,13,11,12
密文:HCBTSXWCRQGL ES
在第 2 行密碼錶中找H開頭的字母,然後以H開頭再到尾過一遍,以此類推,整理出另一個密碼錶:

指令碼:

# Rotor cipher decoder
# parameter input
rotor = [
    "ZWAXJGDLUBVIQHKYPNTCRMOSFE", "KPBELNACZDTRXMJQOYHGVSFUWI", 
    "BDMAIZVRNSJUWFHTEQGYXPLOCK", "RPLNDVHGFCUKTEBSXQYIZMJWAO", 
    "IHFRLABEUOTSGJVDKCPMNZQWXY", "AMKGHIWPNYCJBFZDRUSLOQXVET", 
    "GWTHSPYBXIZULVKMRAFDCEONJQ", "NOZUTWDCVRJLXKISEFAPMYGHBQ", 
    "QWATDSRFHENYVUBMCOIKZGJXPL", "WABMCXPLTDSRJQZGOIKFHENYVU", 
    "XPLTDAOIKFZGHENYSRUBMCQWVJ", "TDSWAYXPLVUBOIKZGJRFHENMCQ", 
    "BMCSRFHLTDENQWAOXPYVUIKZGJ", "XPHKZGJTDSENYVUBMLAOIRFCQW" 
]
 
cipher = "HCBTSXWCRQGLES"
 
key = [2, 5, 1, 3, 6, 4, 9, 7, 8, 14, 10, 13, 11, 12]
 
tmp_list=[]
 
for i in range(0, len(rotor)):
    tmp=""
    k = key[i] - 1
    for j in range(0, len(rotor[k])):
        if cipher[i] == rotor[k][j]:
            if j == 0:
                tmp=rotor[k]
                break
            else:
                tmp=rotor[k][j:] + rotor[k][0:j]
                break
    tmp_list.append(tmp)
# print(tmp_list)
 
message_list = []
for i in range(0, len(tmp_list[i])):
	tmp = ""
	for j in range(0, len(tmp_list)):
		tmp += tmp_list[j][i]
	message_list.append(tmp)
 
print(message_list)

Linux系統的 shadow 檔案格式

root:\(6\)HRMJoyGA\(26FIgg6CU0bGUOfqFB0Qo9AE2LRZxG8N3H.3BK8t49wGlYbkFbxVFtGOZqVIq3q Q6k0oetDbn2aVzdhuVQ6US.:17770:0:99999:7::: Linux的 /etc/shadow 檔案儲存了該系統下所有使用者口令相關資訊,只有 root 許可權可以檢視,使用者口令是以 Hash + Salt 的形式保護的。 每個欄位都用 “\)” 或“:”符號分割;
第一個欄位是使用者名稱,如root ;
第二個欄位是雜湊演算法,比如 6 代表SHA-512,1 代表 MD5;
第三個欄位是鹽,比如上面的 HRMJoyGA
第四個欄位是口令+鹽加密後的雜湊值
後面分別是密碼最後一次修改日期、密碼的兩次修改間隔時間(和第三個欄位相比)、密碼的有效期(和第三個欄位相比)、密碼修改到期前的警告天數(和第五個欄位相比)、密碼過期後的寬限天數(和第五個欄位相比)、賬號失效時間,這裡不太重要要;
直接跑 John 試試

john shadow

如果解開了,加 --show 檢視解密口令

john --show shadow

就是Linux的shadow檔案格式

ZIP 偽加密

使用 WinHex

我們用winhex開啟壓縮包,搜尋504B,點選第二個504B,從後面找第七、八位,發現是 09 00,改為 00 00 即可。
這種方式只適用於ZIP的偽加密,真加密了此方法不適用。

RSA 加解密

a) 金鑰生成
1) 選取兩個長度為 K 的素數 P 和 Q,計算 N = P * Q;
2) 計算 phi(N) = (P-1) * (Q-1), 其中 phi(N) 是 Z_(N^*) 的階;
3) 隨機選取一個int整數 e ∈ [ 1, phi(N) - 1 ],使得 gcd( e, phi(N)) = 1;
4) 計算它的逆 d,使得 [ e * d mod phi(N) ] = 1;
5) 輸出私鑰和公鑰 sk = ( N, d ), pk = ( N, e );

b) 加密
c = m^e mod(N)

c) 解密
m = c^d mod(N)

標準銀河字母

遊戲《指揮官基恩》系列

仿射密碼 affine cipher

# Q: y = 17x-8 flag{szzyfimhyzd}
 
flag = "szzyfimhyzd"
 
flaglist = []
 
for i in flag:
    flaglist.append(ord(i)-97)
 
flags = ""
for i in flaglist:
    for j in range(0,26):
        c = (17 * j - 8) % 26
        if(c == i):
            flags += chr(j+97)
print('flag{'+ flags + '}')

可能會提示你是放射密碼 affine,公式: y = k * x + b mod 26 (跟一元一次函式似的)
後面的取模,如果都是英文字母的話是26,不排除有其他形式,比如ASC II 什麼的,取模可能會換。

進位制轉換

二進位制 b開頭,八進位制 o開頭,十進位制 d開頭,十六進位制 x開頭

s = 'd87 x65 x6c x63 o157 d109 o145 b100000 d116 b1101111 o40 x6b b1100101 b1101100 o141 d105 x62 d101 b1101001 d46 o40 d71 x69 d118 x65 x20 b1111001 o157 b1110101 d32 o141 d32 d102 o154 x61 x67 b100000 o141 d115 b100000 b1100001 d32 x67 o151 x66 d116 b101110 b100000 d32 d102 d108 d97 o147 d123 x31 b1100101 b110100 d98 d102 b111000 d49 b1100001 d54 b110011 x39 o64 o144 o145 d53 x61 b1100010 b1100011 o60 d48 o65 b1100001 x63 b110110 d101 o63 b111001 d97 d51 o70 d55 b1100010 d125 x20 b101110 x20 b1001000 d97 d118 o145 x20 d97 o40 d103 d111 d111 x64 d32 o164 b1101001 x6d o145 x7e'
ss = s.split()
sss = []
print(ss)
for i in ss:
    if i[0] == 'd':
        i = i[1:]
        i = int(i,10)
        i = chr(i)
        sss.append(i)
    elif i[0] == 'x':
        i = i[1:]
        i = int(i,16)
        i = chr(i)
        sss.append(i)
    elif i[0] == 'o':
        i = i[1:]
        i = int(i,8)
        i = chr(i)
        sss.append(i)
    elif i[0] == 'b':
        i = i[1:]
        i = int(i,2)
        i = chr(i)
        sss.append(i)
print(sss)
flag = ''.join(sss)
print(flag)

相關文章