IDF实验室-CTF训练营-牛刀小试CTF

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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}

 

以上是关于IDF实验室-CTF训练营-牛刀小试CTF的主要内容,如果未能解决你的问题,请参考以下文章

CTF训练-牛刀小试-被改错的密码

IDF实验室-简单编程-字符统计 writeup

IDF实验室-简单编程-特殊的日子 writeup

IDF实验室-python ByteCode writeup

IDF实验室WORD隐写术

IDF实验室-简单的ELF逆向 writeup