不怎么玩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,其他的没啥问题。
其他的题目基本都没啥难点,可能