1. 程式人生 > >idf幾道CTF的解法

idf幾道CTF的解法

不怎麼玩CTF,偶爾玩一下,還是有點意思。

地址:http://ctf.idf.cn/

WEB狗主要玩了【牛刀小試】和【天羅地網】

被改錯的密碼

這道題其實蠻簡單的,就是解密:cca9cc444e64c8116a30la00559c042b4

第一眼看猜測是MD5,不過是33位字串,就用Hash-Identifier跑了一下居然是 SSHA-1


這裡我有點納悶,看了下SSHA-1的演算法資料,並解不出來;

我想了下,既然是被改錯,那很可能是增加了一位的MD5加密。

so,兩個思路:

1. 查詢MD5表,一位一位去掉,然後遍歷的查詢;

2. 字典生成MD5,然後特徵比對。

我用了第二種方法。

字典用了常用的,然後把這個站點的域名、名詞都丟了進去;

特徵也就判斷前四位或者後四位相同即可;

參考程式碼如下(passwd.txt是字典檔案,把idf, ctf, ctf.idf.cn, idf.cn這些都扔了進去):

def md5_crack():
    key = "cca9cc444e64c8116a30la00559c042b4"
    p = open("passwd.txt")
    ct = 0
    while 1:
        lines = p.readlines(1000)
        if not lines: break
        for line in lines:
            ct += 1
            passwd = line.strip()
            md5_p = hashlib.md5(passwd).hexdigest()
            if md5_p[:4] == key[:4] or md5_p[-4:] == key[-4:]:
                print "wctf{%s}" %passwd, md5_p

    p.close()


果真如此,跑出來結果如下:

wctf{idf} cca9cc444e64c8116a30a00559c042b4

聰明的小羊

這個沒啥難度,一看就加密,就柵欄密碼

用py簡單的寫了個解密:

def fence_decrypt():
    key = "tn c0afsiwal kes,hwit1r  g,npt  ttessfu}ua u  hmqik e {m,  n huiouosarwCniibecesnren."
    key_length = len(key)
    chunk = []      # 分組可能性
    for i in range(2, key_length):
        if key_length%i == 0:
            chunk.append(i)

    for c in chunk:
        print "分為%s" %(c)
        b = key_length / c
        dec_key = ""
        tmp_dict = {}

        # 拆分
        for mod in range(b):
            #print mod
            for k, v in enumerate(key[mod*c:(mod+1)*c]):
                if mod not in tmp_dict:
                    tmp_dict[mod] = v
                else:
                    tmp_dict[mod] += v

        # 合併
        #print tmp_dict
        for i in range(c):
            for x in tmp_dict:
                dec_key += tmp_dict[x][i]

        print dec_key


啥?

這道題細心一點就知道了,看到了這個圖片,就知道答案了。

直接看圖片二進位制,輕鬆找到答案。

古老的郵件編碼

這個有點意思,以前還不知道有這個編碼,UU編碼。 python支援uu解碼,so毫無難度,最後中文轉換一下編碼即可
def uu_encode():
    uu_begin = """begin 666 <data>
"""
    uu_end = """
end
"""
    content = """MR,O)^KNYU>;*Q[*[P_?#Q+"AHZS6Q\G,LKNYNZ.LR;;2LK*[N^&CK+/VN/;,
MXK:\TJJ]RKZAQ-36K:&CH:,*M/.XQ;3PL+B^S<K'U>+1^;#)=V-T9GMU=75U
*=65N8V]D95]??0``"""
    uu_str = uu_begin+content+uu_end
    print uu_str
    print uu_str.decode("uu").decode("gb2312")


不難不易的js加密

JS的題還算比較簡單,不過太久沒看JS,解這道題花了半小時。。。。。

首先要讀懂JS,不過還蠻有意思的。

印象中要fuzz一下字串,跑一下MD5,jiami,其他的沒啥問題。

其他的題目基本都沒啥難點,可能