目录
- 1.[GUET-CTF2019]虚假的压缩包
- 2.[SWPU2019]Network
- 3.[MRCTF2020]Hello_ misc
- 4.[MRCTF2020]Unravel!!
- 5.[ACTF新生赛2020]music
- 6.[CFI-CTF 2018]webLogon capture
- 7.[MRCTF2020]pyFlag
1.[GUET-CTF2019]虚假的压缩包
打开附件 得到两个加密压缩包
因为没有线索我就先从虚假压缩包下手了
用010 Editor 打开发现是伪加密 把09-00之后保存就能正常打开了
得到了这个 上网搜索了之后得知这是:RSA算法
RSA算法原理(简单易懂) - insistYuan - 博客园 (cnblogs.com)
学习了一下 解出来明文是:5
所以压缩包密码就是:答案是5
打开压缩包获得一张图片和一段文本
于是先分析图片
用010Editor打开图片
jpg
的图片却是png
的文件头 于是把后缀名改为png
再次打开图片
显示crc错误 于是我修改了一下宽高
改了几次都把图片改变形了 于是跑了个脚本
# -*- coding: utf8 -*-
import os
import binascii
import struct
misc = open("1.png","rb").read()
# 爆破宽
for i in range(1024):
data = misc[12:16] + struct.pack('>i',i)+ misc[20:29] #IHDR数据
crc32 = binascii.crc32(data) & 0xffffffff
if crc32 == 0x1670BAE6: #IHDR块的crc32值
print(i)
print("hex:"+hex(i))
# 爆破高
for i in range(1024):
data = misc[12:20] + struct.pack('>i',i)+ misc[24:29]
crc32 = binascii.crc32(data) & 0xffffffff
if crc32 == 0x1670BAE6:
print(i)
print("hex:"+hex(i))
然后把高改了得到正常的图片
打开修改好的图片 显示了个异或
再根据另外一个文件可以得知应该是要将文本异或
然后又跑了个脚本
original = open("亦真亦假",'r').read()
flag = open("flag",'w')
for i in original:
tmp = int(i,16)^5
flag.write(hex(tmp)[2:])
跑完脚本得到一个名为flag文档
导入到010Editor中 发现了zip的文件头
涉及到一个知识点:doc文件本身也是一种zip
于是保存为docx
再次打开电脑可能会出现报错
于是需要调一下配置 调完重启就可以正常打开了
(37条消息) Word打开文件错误提示用文本恢复转换器打开文件_ztnhnr的博客-CSDN博客_文本恢复转换器
搜索flag
被隐藏了 于是更改一下颜色
得到结果:flag{_th2_7ru8_2iP_}
2.[SWPU2019]Network
打开附件 里面就四种类型的数字:63/127/191/255
将其各自转换为二进制
00111111
01111111
10111111
11111111
只有前两位是变化的,这就是TTL隐写
脚本:取出前两位,重新组合,再以8位一组,转换为16进制字符,再将16进制字符转换为字符
import binascii
f=open('1.txt','r')
s=''
for i in f.readlines():
if i == "63\r\n":
a='00'
if i == "127\r\n":
a='01'
if i == "191\r\n":
a='10'
if i == "255\r\n":
a='11'
s+=a
data=''
for i in range(0,len(s),8):
data+=chr(int(s[i:i+8],2))
data=binascii.unhexlify(data)
print(data)
跑完脚本 保存为txt 在010中导入16进制
然后显而易见这是个压缩包
打开之后 发现需要密码 但是没有提示 所以我猜测是伪加密
改完之后打开
得到base64文本
这是多次base解码套娃 找了个脚本跑了一下
# -*- encoding: utf-8 -*-
import base64
f = open('flag.txt','rb').read()
while True:
f = base64.b64decode(f)
if b'{' in f:
print(f)
break
else:
continue
结果:flag{189ff9e5b743ae95f940a6ccc6dbd9ab}
3.[MRCTF2020]Hello_ misc
打开附件得到一个加密的压缩包和一个损坏的png图片
先分析图片:
用010Editor打开之后显示有
于是在kali里面binwalk分析一下
看到了有压缩包
直接foremost分离出来
打开需要密码
于是用Stegsolve查一下 在red0通道可得到一张图片
于是save bin打开 得到密码
密码:!@#$%67*()-+
打开压缩包
发现这就是上面刚做过的ttl隐写
再用上面的脚本跑一下
rar-passwd:0ac1fe6b77be5dbe
所以这就是最开始压缩包的密码
打开压缩包得到新的压缩包 但是根据上一题的经验我得知这个压缩包一定也是docx
于是改名字打开
全选把黑色字体改为红色之后得到下面这段base密码
逐行base解码
脚本:
import base64
with open('flag.txt','r') as file:
for i in file.readlines():
line = str(base64.b64decode(i),'utf-8')
print(line)
隐隐约约感觉像是由0构成的形状 然后把1替换掉
import base64
with open('data.txt','r') as file:
for i in file.readlines():
line = str(base64.b64decode(i),'utf-8')
print(line.replace('1',''))
结果就是:flag{He1Lo_mi5c~}
4.[MRCTF2020]Unravel!!
打开附件得到一段音频、一张图片以及一个加密的压缩包
先分析音频:
根据提示:看文件结尾
于是用010Editor打开拉到结尾
解码:U2FsdGVkX1/nSQN+hoHL8OwV9iJB/mSdKk5dmusulz4=
发现了:Salted__
于是去搜索了一下
这个是通过openssl
加密如果不带base 64就会出现Salted
字段的头
再看base64的前几个字段U2Fsd
确定是AES加密
然后去分析图片:
在kali里面binwalk
分析一下
于是直接foremost
得到下面这张图片
明文是:Tokyo
应该是上面AES加密的密码
明文是:CCGandGulu
这就是压缩包的密码
然后解压压缩包,得到音频文件,使用SilentEye
进行解密得到flag
结果是:flag{Th1s_is_the_3nd1n9}
5.[ACTF新生赛2020]music
打开附件获得一个m4a文件
用010Editor打开
文件异常而且发现了很多个的A1
看了其他人的wp得知:对原文件进行了异或
于是:用010 Editor
在工具->十六进制运算->二进制异或
对整个文件内容进行异或
ctrl + s 保存 恢复文件
再次打开文件就正常了
听内容得到flag{abcdfghijk}
6.[CFI-CTF 2018]webLogon capture
打开附件得到一个流量包
打开流量包 追踪tcp流 发现了password
搜索了一下得知:这是URL编码的密码
于是找了一个在线网站解码
网址:在线URL解码编码工具_蛙蛙工具 (iamwawa.cn)
得到结果:flag{1ns3cur3_l0g0n}
7.[MRCTF2020]pyFlag
打开附件得到三张图片
用010Editor分别打开这三张图片
拉到底部 发现了zip的文件头
以及其它提示
按照提示将part1 part2 part3拼接到新的文件上
然后ctrl+s保存
用ARCHPR爆破密码
密码是:1234
打开压缩包
根据提示应该使用的是下面这些base编码
base16 base32 base85
但是在线网站解不开
看了其他人的wp这需要跑一个脚本
#!/usr/bin/env python
import base64
import re
def baseDec(text,type):
if type == 1:
return base64.b16decode(text)
elif type == 2:
return base64.b32decode(text)
elif type == 3:
return base64.b64decode(text)
elif type == 4:
return base64.b85decode(text)
else:
pass
def detect(text):
try:
if re.match("^[0-9A-F=]+$",text.decode()) is not None:
return 1
except:
pass
try:
if re.match("^[A-Z2-7=]+$",text.decode()) is not None:
return 2
except:
pass
try:
if re.match("^[A-Za-z0-9+/=]+$",text.decode()) is not None:
return 3
except:
pass
return 4
def autoDec(text):
while True:
if b"MRCTF{" in text:
print("\n"+text.decode())
break
code = detect(text)
text = baseDec(text,code)
with open("flag.txt",'rb') as f:
flag = f.read()
autoDec(flag)
跑完脚本得到flag
flag{Y0u_Are_4_p3rFect_dec0der}