藍鯨安全CTF打卡題——第一期密碼學
前言
渣渣一枚,萌新一個,會划水,會喊六六
再過幾天就是中秋節了,我打算儘自己最大的能力把藍鯨安全平臺上面的打卡題目的writeup
整理出來。
有什麼錯誤的地方 希望各位大佬指正(謝謝Orz)
一:檢查符號
知識點
摩斯密碼、替換密碼
解題思路
這道題很容易就可以看出是摩斯密碼 摩斯密碼就是由'.'
和'-'
組成的密碼 先丟在notepad++
裡轉換下
把。
換成 空格
把o
轉換成.
把0
轉換成-
就會得到:....- --- ... .--- -.... -. -.-- --. --... .--. ----. -.. -.. ..--- --.. ..--- ...-- ..... .- .---
放在解密工具裡面就會得到:
最後得到答案:key{4osj6nyg7p9dd2z235aj}
二: 金鑰生成
知識點
RSA
金鑰生成 RSA-Tool
工具的使用
解題思路
首先放一張關於RSA-Tool
工具使用的方法圖;
我們只需要根據上面的解釋以及下面一些關於RSA
演算法的資料就可以得到:
即最後答案:key{125631357777427553}
三: RSA解密
知識點
zip
偽加密、RSA
解密,openssl
用法
解題思路
下載下來題目,告訴我們需要解壓密碼
這裡就要涉及到偽加密的知識了
解開偽加密有多種方法,包括用7z
,在linux
下直接開啟,更改偽加密位置處的奇數位為0(偶數)
ZipCenOp.jar
這個工具來解密
# 在window下
$ java -jar ZipCenOp.jar r rsa.zip
使用linux
兩種都可以的(我個人更偏向於使用linux
),開啟經過解密之後的偽加密檔案:
用notepad++
開啟imhere
檔案開啟看到
-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQCw44GKtDqBlD2hTQVm9oMyp7w3C8i4tCE0zsWTWtV0gVaofyF9 idBeZR3AX/crKnlX1QC6YD/pUJJRPzoKY+bk0YFT64mca7oW2fP719LFiQReirGM fs4n9mvIYeBx1TtHfFwWBDeIHcjP33eR1hue69Dq5tZYRl2e3SrUJXvRFwIDAQAB AoGAMUQcF1KdHOv5wkweXg/4eIpJHJe2nuLkgL26P5FD9D/1r9ZAsKNKmo/VGnhf 8fDRfQoBOueFxWjAZ8qRUsWCT+/0ZDs0xCKrQ7YuxO2p9HV1sMQF74D2TVcoFZ4d P5sjTvs0MutaoTdU0YDNO/ssqk3We2e11tr6ii3HmHtquwkCQQDezreUOIjWV30n ndoGwYf9LsXoEZVMSI6vw/SqiqOvagN3mufApNfj+JrZ6LvV0hHbYfaVkEUvqMyq BKAQapNFAkEAyz2RlugQ20fVzUkzDCSF8ByWjK4GgAqQ/qioXJ9tSPcsgV1yUem4 WM7rTBDWaohHT3N+vhAcsszQ2VJZy6vKqwJBAL2liH7CLD79Uwswgg70FfM8J7oj lUfMDp+vFIdA4JiDjRX2JUNFTHm/9tZ6Eb+rQgXQ+ZlOpoUtkZ85tqCihl0CQCQI R16MyChIRRR/LMizVPer6dkJJWff97LebfL15OcxwzcwPQtet2svTDIRLiJ3BMWG QWsq6hudCk3tNrRQQb8CQQCTcs0uWBe6klDKWLCPEYxuTqB9xksQTmlqvdwfdCZF BWaxHtc/ByfAisj9cfq2CY/fEoeGqLagZ5tG5G81V9VZ -----END RSA PRIVATE KEY-----
看到是RSA
私鑰檔案,說明我們要用這個私鑰去解密我們的flag
檔案 這裡就需要用到openssl
檔案了 kali
裡自帶了openssl
工具
使用命令:openssl rsautl -decrypt -in flag -inkey imhere -out flag.txt
開啟flag.txt
檔案就會得到答案:key{c42bcf773d54cf03}
四: 公平交易
知識點
playfair
加密 pycipher
庫使用
解題思路
第一種方法:
使用pycipher
庫,就可以得到答案
由於pycipher
庫是python
中的第三方庫,所以使用的時候需要安裝即:pip install pycipher
使用pycipher
就可以得到答案:
第二種方法:
最後得到答案:key{WHALECTFISVERYFAIR}
五:填空題
知識點
utf-9
編碼,替換密碼,進位制ascii
碼轉換
解題思路
下載得到一個叫做flag_is_here_rfc4042
的檔案 看到rfc4042
,知道了應該是utf-9
編碼了檔案用python2
來解,我們需要先安裝VCForPython27.msi
接下來就是需要安裝UTF-9
檔案
關於UTF-9
中的問題,我們只需要寫一段python
程式碼就可以解決了:
import utf9
f1 = open('flag_is_here_rfc4042','r')
f2 = open('flag.txt','w')
str1 = f1.read()
print utf9.utf9decode(str1)
f2.write(utf9.utf9decode(str1))
我們採用的是直接讀取flag_is_here_rfc4042
檔案的方法是為了避免複製貼上時格式出現問題,下面就是具體的操作方法:
我們先來分析一下關於解密出來的內容:
我們由以上的分析可以寫出指令碼:
import binascii
_ = 1
__ = 2
___ = 3
____ = 4
_____ = 5
______ = 6
_______ = 7
________ = 8
_________ = 9
a = _____*((__//__+___+______-____%____)**((___%(___-_))+________+(___%___+_____+_______%__+______-(______//(_____%___)))))+__*(((________/__)+___%__+_______-(________//____))**(_*(_____+_____)+_______+_________%___))+________*(((_________//__+________%__)+(_______-_))**((___+_______)+_________-(______//__)))+_______*((___+_________-(______//___-_______%__%_))**(_____+_____+_____))+__*(__+_________-(___//___-_________%_____%__))**(_________-____+_______)+(___+_______)**(________%___%__+_____+______)+(_____-__)*((____//____-_____%____%_)+_________)**(_____-(_______//_______+_________%___)+______)+(_____+(_________%_______)*__+_)**_________+_______*(((_________%_______)*__+_______-(________//________))**_______)+(________/__)*(((____-_+_______)*(______+____))**___)+___*((__+_________-_)**_____)+___*(((___+_______-______/___+__-_________%_____%__)*(___-_+________/__+_________%_____))**__)+(_//_)*(((________%___%__+_____+_____)%______)+_______-_)**___+_____*((______/(_____%___))+_______)*((_________%_______)*__+_____+_)+___//___+_________+_________/___
a = hex(a)[2:][:-1]
a = binascii.a2b_hex(a)
print a
執行之後就會得到:
最後得到答案:key{I_4m-k3y}
六:RSA破解
知識點
RSA
模數分解,RSA
解密 openssl
使用方法
解題思路
下載並開啟壓縮包檔案就會發現:
這是一個加密的flag
檔案和公鑰檔案 我們先通過openssl
來分析一下公鑰是否可以被攻擊
使用linux
,其中的命令是:
openssl rsa -pubin -text -modulus -in public.pem
我們接著使用msieve
就可以了
就會得到相應的P Q
我們需要使用指令碼生成使用檔案
import math
import sys
from Crypto.PublicKey import RSA
keypair = RSA.generate(1024)
keypair.p = 290579950064240059571837821251441436997
keypair.q = 314436328879392457343835667929324128609
keypair.e = 65537
keypair.n = keypair.p * keypair.q
Qn = long((keypair.p-1) * (keypair.q-1))
i = 1
while (True):
x = (Qn * i ) + 1
if (x % keypair.e == 0):
keypair.d = x / keypair.e
break
i += 1
private = open('private.pem','w')
private.write(keypair.exportKey())
private.close()
使用linux
執行指令碼很簡單 進入檔案直接使用命令:
python prikeygen.py
就會生成相應的私鑰
-----BEGIN RSA PRIVATE KEY-----
MIGpAgEAAiEAygD17Xszub1CHncxiqF4513t48sbx9R6fRQ750kckCUCAwEAAQIg
XbBsX6TQrMj2raKiu6WAqRtv86ps6lbgXsftak7iqgECEQDam6mnJeZJM1o5QlZY
XKlFAhEA7I478Iv1HnDUJ/xGsCkJYQIQFvqv7bMNLvqn7Ebt3qH25QIQFwZlKS3G
Rxc+X0H782ubIQIQL2kzJ1i8luHD5eQlbYjXgg==
-----END RSA PRIVATE KEY-----
接下來就是需要使用openssl
命令了
就會得到答案:whalectf{256_n_get}
參考資料: