ctf-BugkuCTF-misc
1.这是一张单纯的图片
使用winhex打开图片,在图片结尾发现一串&#开头的16进制串,直接对16进制字符hex解码即可
2.隐写
打开压缩包发现文件时坏的,放入tweakpng.exe中修复并加长高度,直接使用画图3D打开即可
3.telnet
解压发现是一个数据包,直接用wireshake打开,题目提到telnet,搜索telnet,按字节大小排序,阅读可直接看到答案
4.眼见非实(ISCCCTF)
开始得到的文件是zip,直接解压发现word文档,打不开,用winhex打开发现这是一个zip压缩包,改后缀名解压,发现是一个app的文件,直接打开查找即可发现结果
5.又一张图片,还单纯吗
将图片使用winhex打开,查询ffd8,ffd9,发现这个图片文件中是可以拆成两个图片文件而不丢失东西,打开后面那一个即可得到答案
6.猜
直接将图片放入百度识图中即可得到答案
7.宽带信息泄露
打开发现一个bin文件,根据题意我们可知这是一个路由配置文件,我们使用RouterPassView软件打开文件,查阅即可得到密码
8.隐写2
用binwalk打开图片文件发现图片尾部的zip文件,取出解压,发现一个提示和有密码的压缩包,打开提示最重要的是密码是三个数字,直接暴力**得到密码,解压又得到一张图片,使用winhex打开图片可在结尾发现flag,对flag中的内容进行base64解密,即可得到答案
9.多种方法解决
用winhex打开文件,发现提示image,base64和一串很长的base64编码的字符串,对字符串解码保存为png文件,二维码扫描即可得到答案
10.linux
解压获得linux镜像文件,在linux下使用mount文件挂载即可得到答案
11.中国菜刀
打开文件,查询TCPstream发现flag.tar.gz文件,在binwalk中检查分离解压即可得到结果
12.隐写3
解压文件,获得一个错误的png文件,放入tweakpng中修复并更改高度即可看到flag
13.做个游戏(08067CTF)
使用jd-gui对解压获得的程序进行反汇编,阅读反汇编获得程序即可得到key
14.细心的大象
使用winhex打开图片查找图片结尾发现图片中隐含了rar文件,分离出的rar是加密的,然后打开图像属性发现备注是一段字符串,使用base64解密即可得到rar文件解密密码,解密得到png图片,发现无法打开,放入tweakpng,修补并更正高度,打开即可看到flag
15.爆照(08067CTF)
用winhex打开文件查询jpg文件结尾发现该照片文件中包含着一个zip加密文件,解密即可得到8个文件,逐一检查发现部分是bmp文件,部分是jpg文件,打开88.jpg,即可发现二维码,扫描得到结果,点击888.jpg文件属性,发现备注的值,使用base64解密即可,使用winhex打开8888.jpg,查找图片结尾,发现该图片内含zip压缩包,打开压缩包发现二维码,扫描即可得到结果
16.图穷匕见
用winhex打开图片文件发现在图片即为之后有一串16进制数字,拷贝并再次放入winhex中(即进行hex解码),发现一大段坐标值,将其读出并画在图片上,保存,即可得到答案
from PIL import Image
fi=open('a.txt',"rb")
zuobiaostr=fi.read()
fi.close()
zuobiao=zuobiaostr.split(chr(10))
im=Image.new("1",(300,300))
for x in xrange(0,300):
for y in xrange(0,300):
im.putpixel((x,y),255)
for i in zuobiao:
zuobiaolist=i.split(",")
x=int(zuobiaolist[0][1:])
y=int(zuobiaolist[1][:-1])
im.putpixel((x,y),0)
im.save("2.jpg")
17. convert
打开发现一堆二进制数字,转为16进制后发现是zip文件,打开发现是一张图片,在图片属性主题处发现base64编码,解码即可得到答案。
18.听首音乐
下载发现一首歌曲,用Audacity打开可以发现摩尔电码,解密即可
19.好多数值
下载获得文件,发现是RGB数值,只需将其画在图中即可
from PIL import Image
list1=[]
fi=open("4.txt","rb")
while 1:
line = fi.readline()
if not line:
break
else:
list1.append(line)
fi.close()
im=Image.new("RGB",(503,122))
for i in xrange(len(list1)):
listrgb=list1[i][:-2].split(",")
im.putpixel((i/122,i%122),(int(listrgb[0]),int(listrgb[1]),int(listrgb[2])))
im.save("5.jpg")
20.妹子的陌陌
下载获取图片,使用binwalk可以发现在图片中有zip文件,分离发现该zip解压需要密码,将图片上红色的文字输入,即可解压,解压后获得一串摩斯电码,一个网址和一个aes的key,先解密摩斯电码获得一个网址(可以在线解密也可以脚本解密,脚本解密注意可能存在符号的摩斯电码与字母的相同)
#encode=utf-8
s="..../-/-/.--./---.../-..-./-..-././-./-.-./---/-.././.-.-.-/-.-./..../.-/..../..-/---/.-.-.-/-.-./---/--/-..-."
zimucodebook = {'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':"--.."}
shuzicodebook={'1':".----",'2':"..---",'3':"...--",'4':"....-",'5':".....",'6':"-....",'7':"--...",'8':"---..",'9':"----.",'0':"-----"}
fuhaocodebook={'.':".-.-.-",':':"---...",',':"--..--",':':"-.-.-.",'?':"..--..",'=':"-...-","'":'.----.',"/":"-..-.",'!':"-.-.--","-":"-....-","_":"..--.-",'"':'.-..-.',"(":'-.--.',")":'-.--.-',"$":'...-..-',"&":'....',"@":".--.-.","+":'.-.-.'}
cipher=""
ss = s.split("/")
print ss
for c in ss:
sign=False
for k in zimucodebook.keys():
if zimucodebook[k] == c:
cipher+=k
sign=True
break
if sign:
continue
for k in shuzicodebook.keys():
if shuzicodebook[k] == c:
cipher+=k
sign=True
break
if sign:
continue
for k in fuhaocodebook.keys():
if fuhaocodebook[k] == c:
cipher+=k
sign=True
break
if sign:
continue
print cipher
打开网址发现是一个在线解密的网址,我们注意在给出的那个网址最后的字符串无法理解,极有可能进行了aes加密,对其解密,打开网址即可得到二维码 ,扫描二维码即可得到结果
21.就五层你能解开吗
下载得到一个压缩包,根据题意我们可知第一步要先进行crc32碰撞,用winrar打开发现后面3个txt文件只有6个字节,可以进行crc32碰撞**,在网上找了一个脚本进行**
将三个txt对应的crc32进行**,组成一句有意义的话即为第一层密码,解压,得到一个压缩包CRC32 Collision.7z,再解压进入第二层,由题意可知这里是维吉尼亚加密,并给出了key和密文,只不过这里的key有10001条,需进行筛选,观察密文,发现开头有可能是the加密,以此为依据筛选,获得解压密码
s='rla xymijgpf ppsoto wq u nncwel ff tfqlgnxwzz sgnlwduzmy vcyg ib bhfbe u tnaxua ff satzmpibf vszqen eyvlatq cnzhk dk hfy mnciuzj ou s yygusfp bl dq e okcvpa hmsz vi wdimyfqqjqubzc hmpmbgxifbgi qs lciyaktb jf clntkspy drywuz wucfm'
fi=open("keys.txt","rb")
keystr=fi.read()
fi.close()
keylist=keystr.split('\n')
print len(keylist)
for i in keylist:
if i[:3]=="YEW":
key=i[:-1]
j=0
mingwen=""
for i in xrange(len(s)):
if s[i]>='a' and s[i]<='z':
mingwenint=ord(s[i])-ord(key[j%40])+ord('A')
j=j+1
if mingwenint>ord('z'):
mingwen+=chr(mingwenint-26)
elif mingwenint<ord('a'):
mingwen+=chr(mingwenint+26)
else:
mingwen+=chr(mingwenint)
else:
mingwen+=s[i]
print mingwen
解压文件进入第三层,这里的提示是sha1碰撞,根据提示这里的密文和其sha1值都有确实,暴力**补齐即可
import re
import hashlib
pwd="%s7%s5-%s4%s3?"
sha1="619c20c.a4de755.9be9a8b.b7cbfa5.e8b4365."
for a in xrange(32,128):
for b in xrange(32,128):
for c in xrange(32,128):
for d in xrange(32,128):
password=pwd%(chr(a),chr(b),chr(c),chr(d))
tmp=hashlib.sha1(password).hexdigest()
if re.findall(sha1,tmp):
print (tmp,password)
获得解压密码进入第四层发现这里需要两个md5相同的程序,其中一个程序输出给定,上网查询发现存在使用“构造前缀碰撞法”获得相同md5的程序,而其中一个即是我们题中的程序,我们将另一个程序输出作为密码即可解压进入第五层,第五层提示RSA,于是将解压得到的pem文件放入openssl中可以读到RSA的n,e,而这里的n,e都比较大,可用wiener-attack进行攻击,解出d,在对密文解密即可得到最后答案
22.Linux2
将下载文件解压使用notepad++打开,直接查找KEY{}即可得到答案。
推荐阅读