1. 程式人生 > >藍鯨安全CTF打卡題——第一期密碼學

藍鯨安全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}

參考資料: