IDF實驗室-CTF訓練營-牛刀小試CTF


自從開始玩CTF后,發現這個游戲還是比較有意思,發現了一個練習場地IDF實驗室:http://ctf.idf.cn/

刷刷里面的題目,今天完成了其中的牛刀小試,分享一下解題思路:

1. 被改錯的密碼

題目為:

從前有一個熊孩子入侵了一個網站的數據庫,找到了管理員密碼,手一抖在數據庫中修改了一下,現在的密碼變成了 cca9cc444e64c8116a30la00559c042b4,那個熊孩子其實就是我!腫么辦求解!在線等,挺急的。。

PS:答案格式wctf{管理員原密碼}

第一眼看上去cca9cc444e64c8116a30la00559c042b4是一個MD5,但是確是33位,那么循環去掉一位解密,直到解出來正確:(http://pmd5.com)MD5在線解密

最后去掉l字符,解密成功

所以flag是wctf{idf}

 

2. 啥?

題目就一張圖片和一串文字,看來只有在圖片上做文章了,下載圖片,拖入UltraEdit中去,

看了看,在底部發現了ctf的字樣,

復制出來:wctf{mianwubiaoqing__},提交,答案不對。

根據第一題,這個好像少了個w,加上去,

wwctf{mianwubiaoqing__}通過。

 

3. ASCII碼而已

題目一個字符串:

\u5927\u5bb6\u597d\uff0c\u6211\u662f\u0040\u65e0\u6240\u4e0d\u80fd\u7684\u9b42\u5927\u4eba\uff01\u8bdd\u8bf4\u5fae\u535a\u7c89\u4e1d\u8fc7\u767e\u771f\u7684\u597d\u96be\u3002\u3002\u0077\u0063\u0074\u0066\u007b\u006d\u006f\u0072\u0065\u006d\u006f\u0072\u0065\u005f\u0077\u0065\u0069\u0062\u006f\u005f\u0066\u0061\u006e\u0073\u007d

 

題目就一堆字符串,一個unicode編碼,寫個python腳本轉換一下即可:

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
str = u'\u5927\u5bb6\u597d\uff0c\u6211\u662f\u0040\u65e0\u6240\u4e0d\u80fd\u7684\u9b42\u5927\u4eba\uff01\u8bdd\u8bf4\u5fae\u535a\u7c89\u4e1d\u8fc7\u767e\u771f\u7684\u597d\u96be\u3002\u3002\u0077\u0063\u0074\u0066\u007b\u006d\u006f\u0072\u0065\u006d\u006f\u0072\u0065\u005f\u0077\u0065\u0069\u0062\u006f\u005f\u0066\u0061\u006e\u0073\u007d'
str = str.encode('utf-8')
print str

得到flag:

wctf{moremore_weibo_fans}

4. 摩斯密碼

用python腳本跑一下摩斯密碼:

# -*- coding:utf-8 -*-
# 摩斯密碼表(自己可定義加密方式...)
CODE = {
        # 26個字母
        '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': '--..',
 
        # 10個數字
        '0': '-----',  '1': '.----',  '2': '..---',
        '3': '...--',  '4': '....-',  '5': '.....',
        '6': '-....',  '7': '--...',  '8': '---..',
        '9': '----.',
 
        # 16個標點符號
        ',': '--..--', '.': '.-.-.-', ':': '---...', ';': '-.-.-.',
        '?': '..--..', '=': '-...-',  "'": '.----.', '/': '-..-.',
        '!': '-.-.--', '-': '-....-', '_': '..--.-', '(': '-.--.',
        ')': '-.--.-', '$': '...-..-','&': '. . . .','@': '.--.-.'
 
        # 下面還可自行添加密碼字典
 
}
# print CODE
# 反轉字典(作為解密摩斯密碼的字典)
UNCODE = dict(map(lambda t:(t[1],t[0]),CODE.items()))
# print UNCODE
 
'''
將字符串轉換成摩斯密碼
params:需要轉換的字符串
'''
def stringToMorseAlphabet(msg):
    # message用於保存加密結果
    message = ''
    # msg = raw_input('Message:')
    # msg = 'this is test'
    print msg + '   ///對應的摩斯密碼為///',
    for c in msg:
        if c == ' ':
            message += ' '
        else:
            # upper():將所有小寫字母轉換成大寫字母
            message += CODE[c.upper()] + ' '
    return message
 
'''
將摩斯密碼還原成字符串
params:需要還原的摩斯碼
'''
def morseAlphabetToString(morseCode):
    # message用於保存解密結果
    message = ''
    list = morseCode.split(' ')
    # print list
    #print morseCode + '   ///對應的明文為///',
    for s in list:
        if s == '':
            message += ' '
        else:
            message += UNCODE[s]
    return message
 
 
# Test
# print stringToMorseAlphabet('I love you')
#print morseAlphabetToString(stringToMorseAlphabet('what the fuck!'))
print morseAlphabetToString('--  ---  .-.  ...  .  -.-.  ---  -..  .  ')

得到flag:

wctf{M O R S E C O D E}

但是有點無語,提交不正確,改成小寫,把空格去了提交過了,有點不知所措:

wctf{morsecode}

5.聰明的小羊

首先看題目描述:

一只小羊跳過了柵欄,兩只小樣跳過了柵欄,一坨小羊跳過了柵欄...

tn c0afsiwal kes,hwit1r  g,npt  ttessfu}ua u  hmqik e {m,  n huiouosarwCniibecesnren.

目測應該是柵欄密碼。何為柵欄密碼,這種密碼和凱撒密碼類似都是移位密碼,不同的事,柵欄密碼先將一個字符串分成N組,然后依次取出每個組的第一個字符第二個字符組合成新的數據。

然后暴力破解即可,窮舉其長度的因子:用python寫個腳本跑一下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def zhanlan(midata = None, zu = 0, len = 0 ):
    mindata=''
    for i in range(zu):
        for j in range(len):
            mindata = mindata+midata[i+zu*j]
    
    return mindata


if __name__ == '__main__':
    midata="tn c0afsiwal kes,hwit1r  g,npt  ttessfu}ua u  hmqik e {m,  n huiouosarwCniibecesnren."
    for zu in range(1,len(midata),1):
        if len(midata)%zu == 0:
            print zhanlan(midata,zu,len(midata)/zu)

最后得到flag:

wctf{C01umnar}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM