Cat_Jump
下载附件打开:
把他丢进010编辑器里
查找CATCTF
得到flag:CatCTF{EFI_1sv3ry_funn9}
4433
下载附件打开:是一张图片
将他丢进winhex搜索flag啥也没有
使用kali binwalk看看图片发现没啥
使用steglove打开改变颜色发现下面一个二维码
使用QR Research扫描
得到一串摩斯密码:...--.----...--..
注意题目4433
摩斯密码解密
得到:VYGUD
在摩斯电码中存在一些常用的缩写,VY 代表 VERY,GUD 代表 GOOD,所以正确的flag是 VERYGOOD
查了下
这在摩斯电码里是verygood
得到flag:flag{VERYGOOD}
侧信道初探
下载附件打开有两张图片
根据题意,每个循环中或者执行if内语句,或者不执行。不执行的情况下消耗能量较少,执行的情况下消耗能量较多,需要时间也更长。因此每两条密集带中间的稀疏带宽度如果较短,代表0,如果较长,代表1。也即:
flag:SCTF{0110111010}
pyHAHA
下载附件:是一个pyc文件
拿到一个pyc
反编译
结果显示反编译不成功
猜测是pyc隐写
报错
扔进winhex
发现有压缩文件
且倒序了
f = open('PyHaHa2.pyc','wb')
with open('PyHaHa.pyc','rb') as g:
f.write(g.read()[::-1])
f.close()
正序后
发现少文件头03F30D0A
补上
在末尾发现
flag1: ec8d57d820ad8c586e4be0122b442c871a3d71cd8036c45083d860caf1793ddc
flag2: c40a0be335babcfbd8c47aa771f6a2ceca2c8638caa5924da58286d2a942697e
foremost分离
得到一个压缩包
里面有一个mp3
解压要密码
看了下
是伪加密
图示部分改为0008
解压得到mp3
在备注里有key
163 key(Don't modify):L64FU3W4YxX3ZFTmbZ+8/dx5jBNDPdsKv9gAgXYyj0/Z0Vl4ORaCLH5D0oN9v9nBBv6zxpBucgNeE2qqke4ugZs7dxriT5lfUpulX5PYMzSg2pqL6APTHQjtIHw16ZCRTMBBkInrUGSTklA2MwPLGkuDTmWfzjHqDWEK5LLRP6oiOXe0JeI9mLHzL2nm6T3/ianaPEzeH7lpE/ciWDyqFUXoTZWeyK0xTjYxBSj9RJFoaoIxmXk6P8MJq+EvcS7ratByRUvWLaUFhcXhJ1iRK58BKcVPS0hxkzA77WB1UnrUfpkS1U/F5uYmYWGZ3Cz2fTvJHcsE228LUnnybaoIoDyY6BvZVUitmA+VhhTHoIKsREyCzC3VXq/HuwwuHdCdftzXJpXPoJSNzWAZH0oGnF+WE7m5Fqd36dqp2srL5bgFjFnyZzIkxdaU+ZW+Rm7aIbrb7nK2Pp9iequOBV6rnKeHZyc3hzG4lVVapoXl/U2cvfVgIqVtnuJE4XM4NuUd
扔进audacity
无果
查了下
有个工具DeEgger Embedder
得到一堆base32
回头看看那个处理好的pyc
反编译得到
import base64
def get_base32_diff_value(stego_line, normal_line):
base32chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
for i in range(len(normal_line)):
if stego_line[i] != normal_line[i]:
return abs(base32chars.index(chr(stego_line[i]))-base32chars.index(chr(normal_line[i])))
return 0
# base32 隐写解密
def base32stego_decode(lines):
res = ''
for i in lines:
stego_line = i.strip()
normal_line = base64.b32encode(base64.b32decode(i.strip()))
diff = get_base32_diff_value(stego_line, normal_line)
if '=' not in str(stego_line):
continue
if diff:
res += bin(diff)[2:]
else:
res += '0'
return res
with open("Dream It Possible - extracted.txt", 'rb') as f:
file_lines = f.readlines()
en=open("encrypt.txt","w")
en.write(base32stego_decode(file_lines))
en.close()
得到encrypt
猜测是字符转图片
from PIL import Image
str=open("data.txt","r").read()
length=240
width=30
pic=Image.new("RGB",(length,width))
i=0
for x in range(length):
for y in range(width):
if str[i] == '0':
pic.putpixel([x,y],(0,0,0))
else:
pic.putpixel([x,y],(255,255,255))
i += 1
pic.show()
pic.save("Fl4g.png")
得到flag
传感器2
题目描述
推测温度传感器解码后报文第一个字节为起始位,并无数据,因此从第二个字节开始,得到传感器1中两个解码后的报文有效数据为为0x24d8893ca584100和0x24d8845abf34100
#!/usr/bin/python
def crc(x,y):
while(x>y):
l = len(bin(x)) - len(bin(y))
t = int(bin(y)[2:]+'0'*l,2)
x ^= t
return x
m = 0
for i in range(0x200):
if i < 100:
continue
if crc(0x24d8893ca584100,i) == 0x81 and crc(0x24d8845abf34100,i) == 0x19:
m = i
print i
break
print hex(crc(0x00024ddeadbeef4100,m))
print hex(crc(0x00024dbaada5554100,m))
根据crc校验算法,先由已知校验码算出y的值,再由除了第一个字节d的所有数据得到最后一个字节的crc校验码值,一个是0xb5,一个是0x15。
得到最终flag:{b515}
Russian-zips
下载附件:
得到一个压缩文件,解压需要密码
发现是伪加密
直接修复压缩文件即可解压
发现是Minecraft的地图文件
打开就得到了flag
ext3
下载附录,用winhex以十六进制打开,搜索flag,一直next找
题目描述光盘,将文件后缀改成iso解压缩找到该文件
打开为base64解码得到flag
flag为flag{sajbcibzskjjcnbhsbvcjbjszcszbkzj}
SimpleRAR
使用WinRAR打开附件,发现secret.png的文件头损坏了,并且还有一个flag.txt
打开flag.txt
将文件丢进winhex
我们要的是文件块而不是子块,于是更改7A为74,成功解压,发现是一张空白的图片,继续用winhex打开
发现是gif格式,将其重命名并用PhotoShop打开,发现有两个空白的图层
将两个图层分别提取出来,用StegSolve打开,不断点击箭头直到显示出图像
将两个图片合成补全二维码
使用QR-research扫描得到flag:flag{yanji4n_bu_we1shi}
base64stego
下载附件是个加密的文件
使用360压缩打开:
是一连串的base64编码解密得到
没啥信息,猜测base64隐写,使用python脚本
# 此方法用来将包含隐藏信息的字母转换为base64编码表对应的序列值(十进制数)并返回
def base64change(s):
table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' # base64编码表,恰好索引值对应字母
for i in range(len(table)):
if table[i] == s:
return i
# 此方法用来获取隐藏信息二进制字符串
def base64solve():
f = open('C:\\Users\\admin\\Desktop\\stego.txt','r')
lines = f.readlines()
flag_bin = ''
for line in lines:
# print(line)
l = line.strip() # 去掉两边的空格
if l[-1] == '=':
if l[-2] == '=': # 含有两个=则包含4bit信息
# 将返回的十进制转换为二进制数,由于返回的二进制数为0b开头,所以从第三位开始取,然后用0填充头部为4位,再取后四位隐藏的信息
flag_bin += bin(base64change(l[-3]))[2:].zfill(4)[-4:]
else:# 只含一个=则包含二bit信息
flag_bin += bin(base64change(l[-2]))[2:].zfill(2)[-2:]
#print(flag_bin)
flag = ''
for i in range(len(flag_bin)//8):
flag += chr(int(flag_bin[i * 8:(i + 1) * 8], 2))
print(flag)
if __name__ == '__main__':
base64solve()
得到flag:flag{Base_sixty_four_point_five}
功夫再高也怕菜刀
下载附件是一个流量包文件:
先放到kali使用binwalk命令查看,发现有一个压缩包文件
使用foremost分离得到一个压缩包:
发现文件被加密了,猜测流量包里有密码:
然后用追踪TCP流,发现第七个流就是我们需要的,,jpg格式是以:FFD8FF开头,以FFD9结尾然后用.jpg导出来
打开 010editer,新建文件,16 进制编辑模式,菜单》编辑》粘贴自》粘贴自 16 进制文件
另存为jpg文件打开得到密码
Th1s_1s_p4sswd_!!!
后打开压缩包输入密码得到flag
flag{3OpWdJ-JP6FzK-koCMAK-VkfWBq-75Un2z}
北京地铁
下载附件打开是一个文件和照片
题目描述:
将照片扔进stegsolve 发现lsb隐写
这应该是密文
7SsQWmZ524i/yVWoMeAIJA==
根据提示是AES
密钥应该在图片里
仔细看
发现魏公村的点颜色不一样
密码猜测是weigongcun
解密
得到flag:DDCTF{Q*2!x@B0}
恶臭的数据包
打开压缩包,有个流量分析包,用wireshark打开
看到是wifi,名字叫做mamawoxiangwantiequan
放进kali进行密码破解
aircrack-ng '/root/桌面/cacosmia.cap' -w /usr/share/wordlists/rockyou.txt
破解得到密码为12345678
解密数据包
随后用wireshark打开
找到了一个post请求,114514.png
看到了pk(压缩包)和flag.txt,应该是把png弄出来分离然后解压获得flag
选择原始数据,复制后导入winhex
把前面的请求删掉获得png图片
获得图片
对图片进行foremost分离操作,分离得到zip
继续找密码
看cookie值得到hint
去找dns,因为ping之前要先去dns解析
26rsfb.dnslog.cn
就是压缩包的密码
解压成功,得到flag{f14376d0-793e-4e20-9eab-af23f3fdc158}
知识点
- aircrack-ng破解无线密码
- 图片隐写
- JWT
- DNS
A-Weird-C-Program
tunnel
打开数据包,发现全是有base64的dns域名请求,使用tshark提取A记录的域名
tshark -Y "ip.dst==8.8.8.8 && dns.qry.type == 1" -r tunnel.pcap | awk '{print $(NF)}' | awk -F '.' '{print $1}' > b64.txt
使用脚本进行解码拼接,得到一个加密的zip:
import base64
dec = ""
with open("b64.txt","r") as f:
for line in f.readlines():
tmp = line.strip()
missing_padding = len(tmp) % 4
if missing_padding != 0:
tmp += b'='* (4 - missing_padding)
dec += base64.b64decode(tmp)
print(len(dec))
with open('flag.zip', 'w') as f:
f.write(dec)
但是flag.zip需要使用密码解密,猜测是base64解密
#存为exp然后python exp.py>2.txt保存添加等号后的base64信息
with open("./b64.txt", "r") as f:
x = f.readlines()
for i in x:
i = i.strip()
l = 4 - len(i) % 4
if l != 4:
i += "="* l
print(i)
然后使用base64隐写脚本得到密码
def inttobin(a, n):
ret = bin(a)[2:]
while len(ret) < n:
ret = '0' + ret
return ret
table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
f = open("2.txt", "r")
tmpbin = ''
res = ''
line = f.readline()
while line:
if line[-2] == '=':
if line[-3] == '=':
tmpbin += inttobin(table.index(line[-4]), 6)[2:]
else:
tmpbin += inttobin(table.index(line[-3]), 6)[4:]
line = f.readline()
quotient = int(len(tmpbin)/8)
for i in range(quotient):
res += chr(int(tmpbin[8*i:8*i+8], 2))
print(res)
得到密码
password: B@%MG"6FjbS8^c#r
然后解压得到flag图片
flag{D01n't_5pY_0nmE}
A-Weird-C-Program
下载附件是一个cpp后缀文件,使用devc++打开:
注意到有奇怪的间距又代码里说有隐藏信息
猜测这个空格和制表符是0和1
尝试得到
x = "000001110100 000001101000 000001100101 000001011111 000001100110 000001101100 000001100001 000001100111 000001011111 000001101001 000001110011 000001011111 000001010111 000001110000 000001010101 000001000001 000001001001 000001110100 000001110011 000001100001 000001100100 000001101101 000001101000 000001100001 000001101011 000001010 "
print(''.join([ chr(int(i,2)) for i in x.split() ]))
得到flag
flag:{WpUAItsadmhak}
抓住个黑客(无)
EASY_EVM(无)
你猜他是什么文件
下载附件
首先拿到的这是一个png文件,将文件丢入winhex
观察图片头部,发现是000000000000
但是通过观察文件尾部可以发现,是一个固定的字串 C4 3D 7B 00 40 07 00,所以我们必须把头部改为正常的rar头部才可以恢复
- 将开头的00 00 00 00 00 00 00 00替换为52 61 72 21 1A 07 01 00 ,修改文件后缀名为rar,得到一个加密的rar格式压缩包。
保存文件,后缀改成rar,打开后是个加密压缩文件
猜测弱密码123456打开
解密完后,得到一张1.png和一个test.zip
在test.zip里面藏有一个1.png,可以看到是一样的,猜测是明文攻击,所以导入arch工具
后得到 test_decrypted.zip 打开得到flag.txt
flag{3f76318f507fe7eb6422cd0703c64c88}
我们生活在南京-1
我们生活在南京-2
下载附件得到一个mp3音频,根据题目描述CW可知这是一个摩斯码
使用au打开看频谱图
短的为. 长的为- 得到:
..-. .-.. .- --. -.-. .-- .. ..... ....- - .-. ....- -.. .. - .. ----- -. -- ...-- - .... ----- -..
使用工具解密得:
题目要求小写,最终flag为:
flag{cwi54tr4diti0nm3th0d}
再见李华1
下载附件是一张图片,其中有md5,Stegsolve也没用,上HXD,经过分析发现其中是有文件的,如图所示:
直接放到kali中分离文件,使用foremost,得到一个压缩包
将压缩包拖进ARCHPR破解掩码破解
解压码为:15CCLiHua
解压结果如图:
最终flag{Stay hungry, Stay foolish.}
easy_misc(代码)
首先是一个压缩包,需要密码,进行密码爆破得到密码qwer。
解压后,得到一张图片:
打开链接,发现需要密码,盲猜png图片被改了高度。
使用爆破脚本得正确宽和高,在winhex改掉保存得
下载云盘文件 file.pcap 到本地打开后出现报错如图:
为了解决这种情况,先点OK,按快捷键 Ctrl+shift+s,选中第二个,然后点保存为 file.pcapng,做这一步为了方便,我们使用pyshark这个库解析时候,不会出现刚才打开 file.pcap 的报错信息。
2.sql注入
分析了一下数据包后,很明显的是延迟注入。
过滤器为http.request.uri.query.parameter contains "tologin",如图:
解密代码如下:
import re
import pyshark
# tshark_path这个路径要根据你自己情况更改,由于我不是默认安装目录所以我需要填写。
cap = pyshark.FileCapture("file.pcapng", tshark_path="D:/Program Files/Wireshark/tshark.exe", display_filter='http.request && http.request.uri.query.parameter contains "tologin"')
flag = list(39 * " ")
for c in cap:
# 由于我不太会解析xml,官方文档也没找到,所以使用最简单str() + re正则表达式
result = str(c["urlencoded-form"])[:300]
pos = re.findall("select flag from flag limit 0,1\),(.*?),", result)[0]
number = re.findall("select flag from flag limit.*?\)\)=(.*?),", result)[0]
flag[int(pos) - 1] = chr(int(number))
print("".join(flag))
flag为:flag{cd2c3e2fea463ded9af800d7155be7aq}
base编码(代码)
misc_xor
附件下载打开后发现是一段字符串
cidb~0f<f==0f634014`5g734c0=g34ag=f`fx
观察字符串没有发现什么规律,去看题目misc_xor,可以发现xor是异或的缩写
异或作为一个运算符,运用如下
我们可以使用异或进行加密,即把加密字符转化成二进制,再通过秘钥(二进制)加密形成加密字符,例如下图所示
知道如何进行异或解密后题目就很简单了,但是还需求出秘钥
因为题目给的字符串不长,且一般flag格式为flag{xxxx},猜测字符串开头'cidb'对应'flag',将其转换为二进制,去求秘钥
求得秘钥为5(00000101)
最后flag{5c9c885c361541e0b261f58b61db8cec}
简单的图片
下载附件是一张png图片:
先猜测LSB隐写的三通道000
RGB是红绿蓝 但他们的值代表的实际上是亮度
R的数字越大,则代表红色亮度越高;R的数字越小,则代表红色亮度越低。G,B同理
每个像素用R,G,B三个分量表示,那么一张图片就像一个矩阵,矩阵的每个单位就是(0~255,0~255,0~255)
而BGR的意思是位平面的顺序按照BGR的顺序进行排列
观察提取出来的最低位二进制
结合出题的是xsctf,猜测x,s,c,t,f分别对应着数字
0,1,2,3,4
['xxfxc', 'xxfst', 'xxtfc', 'xxfxt', 'xxfft', 'xxttc', 'xxffs', 'xxsft', 'xxftc', 'xxtfx', 'xxtfc', 'xxfcf', 'xxfxs', 'xxtfx', 'xxctx', 'xxfcx', 'xxtfx', 'xxsff', 'xxfsf', 'xxtfc', 'xxfxt', 'xxcxs', 'xxtfx', 'xxfsf', 'xxtfc', 'xxftx', 'xxfts', 'xxfxs', 'xxfcf', 'xxsfc', 'xsxxx']
则以上数据可以改写为
00402,00413,00342,00403,00443,00332,00441,00143,00432,
00340,00342,00424,00401,00340,00230,00420,00340,00144,
00414,00342,00403,00201,00340,00414,00342,00430,00431,
00401,00424,00142,01000
将5进制转化为十进制
102,108,97,103,123,92,121,48
117,95,97,114,101,95,65,110,
95,49,109,97,103,51,95,109,
97,115,116,101,114,47,125
将十进制用ASCII码转化为字符
flag{\y0u_are_An_1mag3_master/}
ASCII文本,十六进制,二进制,十进制,Base64转换器(在线ascii解码)
Misc流量分析
guess-xsctf(代码)
arrdeepee(代码)
神奇的压缩文件
得到的压缩包里有个txt
扔进winhex
发现PK,即有zip文件隐藏
用foremost和binwalk都失败
使用AlternateStreamView扫描得到flag.zip
就感觉最开始扫描出来的压缩包里的注释似乎可疑
得到1101100 1100011 1110100 1100110 111101 1011011 0110010 0011001 1011011 0011011 1011011 1110010 0110010 01111101
regexpire(pawn 代码)
Wireshark(HTTP)
1.打开wireshark
下载附件打开
导出HTTP
2.一般信息大多是藏在url,html,图片当中的
对http进行追踪在第一条的请求中存在网页的请求:在线图片添加/解密隐藏信息(隐写术)工具 - 站长辅助工具 - 脚本之家在线工具
一般这种题型的解题方向都在html,png,url中
省去选择的步骤直接全部恢复
发现有一个风景照的png 和俩个较大的文件
结合上述个给出的一个图像解密网址,将俩个较大文件尝试放入hex editor中删除多余的数据尝试将其也变为图片
(这时就需要了解一个知识
PNG图片固定以 89 50 4E 47 0D 0A 1A 0A (4个字节)开头
49 45 4E 44--IEND结尾)
删除多余数据
改其后缀名为.png查看图片内容俩个较大数据包就会得到下面俩张图片
查看给出的解密网站发现解密时还会需要一个密码所以考虑从带key的照片入手再把其拖入hex editor
保存再次查看图片
出现了key
这是就返回所给出的解密网站将风景照作为解密图片上传,密码为所给出的key进行解密
看到所给出的信息包含0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F所以判断可能是base16,上网寻找在线翻译工具进行解密
Mysterious-GIF(binwalk oppenssl)
picture
下载得到附件是一张图片
解题思路:
(1)将图片放入winnhex中查看
发现文件头是jpeg、jpg格式,将文件后缀改成jpg
再丢进kali中使用binwalk中分析
(2)binwalk分离图片
foremost分离失败,使用binwalk -e 尝试
得到两个文件
猜测是base64编码于是进行解码,可以使用在线解码网站或者python
解密有kp猜测为压缩包
使用python解密
import base64
str=""#base64码
target=base64.b64decode(str)
f=open(r"文件路径",'wp')
f.write(target)
f.close
(4)打开flag文件
出现KP字样,修改为PK,修改后缀为.zip
(5)解压文件
解压文件需要密码,根据提示得到:integer division or modulo by zero
解压得到
猜测是uuencode编码解码得到flag
CISCN{2388AF2893EB85EB1B439ABFF617319F}
Hidden Write
下载附件是一个png图片
放进steglove 和winhex无任何东西
strings查看图片字符串
习惯先用 strings maomao1.png 命令查看一下字符串信息,发现在png文件结尾表示IEND后面还存在字符串 ef4526a41ea,考虑还有其他字符串。
发现png文件结尾后还有一串字符串:ef4526a41ea,不知道是啥,先放着。
接下来zsteg一波png:·
发现有隐藏的png文件IHDR数据,提取出来并保存为l.png:·
010打开1.png,修复文件头:
打开修复后的1.png:
发现1.png和maomaol.png是一样的图片,但文件大小不一样,两张一样的png考虑盲水印:
得到output.png:
依稀能看到字符串:903ef},应该是flag的后半段。·
接下来寻找flag的前半段,没有其它信息,再次zsteg新得到的图片l.png看一下:
发现还隐藏有png文件的IHDR数据,再次提取出来并保存为2.png:
010打开2.png,修复文件头:
发现再次得到一张一样的图片,那就再次zsteg新得到的图片2.png看一下:
得到f1ag的前半段:hxb2018{490fe1033073e985.
将flag的前半段和后半段拼接提交发现不对,想起还有最开始png结尾后的字符串:
ef4526a41ea,猜测为f1ag的中间部分。
最后拼接3部分字符串得到flag:
hxb2018{490fe1033073e985ef4526a41ea903ef}
miao~
得到一个jpg图片
在Audacity中打开,查看频谱图,得到密码CatCTF
在deepsound中打开wav文件,得到flag.txt
打开flag.txt发现是兽语
得到flag:CatCTF{d0_y0u_Hate_c4t_ba3k1ng_?_M1ao~}
[中等] QR1
打开附件为一张图片
细看有一些小点
使用Stegsolve查看是否为图片隐写
发现图片太大了
压缩一下
压缩成533X533
放入工具中得到二维码
扫描得到flag
flag{AHA_U_Kn0w_QR_c0d3_312468ed-ea59-4fe9-9cd2-b5e9d8b39498}
Misc文件类型
下载文件给了一串16进制
使用16进制转ascii
前面是46ESAB即BASE64倒序,删除前面7个字符进行baSe64解密:
得到flag
Time_losing
下载附件解压后得到stego下的47个txt文件。
2.根据题目提示时间2033-05-18 11:33:20将得到的txt文件修改时间减去该时间。
3.得到47个整数。
4.将这些整数转换成ASCII码即可得到flag。
XMan{seems_to_be_related_to_the_special_guests}
摩斯电码
下载附件是个wav音频丢入Audacity中查看频谱图
猜测长的为-,短的为.
最后得到- .... . ... . -.-. .-. . - .-- -.. ..-. .-.. .- --. .. ... -- --- .-. . ... .
摩斯密码解密得
得到flag{THESECRETWDFLAGISMORESE}
CatCatCat
下载附件是一个图片和txt文件:
将猫猫.jpg图片放在kali中
使用命令strings 猫猫.jpg | grep flag
发现有敏感内容出现,提示密码为catflag
我养了一只兔子的文件中,首行字母为U2F,根据首行字母为U2F和刚刚得到的密码,可以推断为rabbit加密方式
Rabbit加密-Rabbit解密-在线Rabbit加密解密工具
将rabbit解密后的内容放入到base91解密器中进行解密
Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org]
可以看到解密内容中有很多. ! ? 符号,上网查阅资料后,该语言为Ook语言
使用Ook to Text,得到flag
CatCTF{Th1s_V3ry_cute_catcat!!!}
流量分析(http)
picture3(文件分离,base64隐写)
附件是一张图片,老样子,先丢进binwalk里,分离出来一个txt文件:
可以看到很多base64的字段,用base64隐写试试:
flag就在里面:flag{Ba5e_64OFive}
第四扩展FS(取证题)
解压后只有一张图片
二、解题思路
jpg文件首先用binwalk工具查看是否有隐写,进行分离图片,后发现有zip的文件,打开有个file.txt文件有密码,查看jpg图片的备注有东西,应该是密码,打开文件后出现一些数据,后进行词频分析得到flag。
三、解题过程
先用binwalk工具查看
发现有中间有个zip的文件,利用foremost工具解出文件
打开zip的文件发现里面有txt文件
但是有密码,看一下源jpg的图片发现备注里有东西
这个应该就是密码,打开文件发现一堆的数据
from collections import Counter
f=open('file.txt','r')
f_read=f.read()
res = Counter(f_read)
print(res)
DCTF{ka1f4NgxlntAi}
jpg(逆向异或)
import base64
f = open("ZmxhZy5jb2Rl", "rb")
data = f.read()
f.close()
file_name = base64.b64decode("ZmxhZy5jb2Rl")
f = open(file_name, "wb")
f.write(base64.b64decode(data))
f.close()
运行后
s = [0x51, 0x5B, 0x56, 0x50, 0x0A, 0x58, 0x45, 0x4D, 0x68, 0x42,
0x68, 0x70, 0x52, 0x43, 0x68, 0x63, 0x5F, 0x52, 0x19, 0x74,
0x07, 0x73, 0x04, 0x68, 0x71, 0x06, 0x77, 0x0E, 0x37]
flag = ''
for i in s:
flag += chr(i ^ 0x37)
print(flag)
得到flag为:RCTF{orz_u_Get_The.C0D3_F1@9}
流量分析(sql注入)
下载附件得到一个流量包
找到get语句
id=1'%20and%20ascii(substring((select%20keyid%20from%20flag%20limit%200,1),1,1))=32%23
substring函数取字符串的特定位置,从1取到38
查看每个位置对应的ascii码
当ascii码正确时,取下个位置
简单写个脚本
import re
with open("1.pcapng", "rb") as f:
contents = f.read()
res = re.compile(r'0,1\),(\d+),1\)\)=(\d+)%23').findall(str(contents))
dic = {}
for a, b in res:
if a in dic:
if int(b) > dic[a]:
dic[a] = int(b)
else:
dic[a] = int(b)
flag = ""
for i in range(1,39):
flag += chr(dic[str(i)])
print(flag)
得到flag
traffic
下载附件是一个流量包文件打开:
只有简单的icmp,dns和tls包,判断问题在icmp包长度上
编写脚本
str=[144,150,139,145,165,91,109,151,122,114,106,119,93,167]
for i in range(-50,50):
flags=''
for j in str:
flags +=chr(i+j)
if 'flag' in flags#判断flags中包含flag的
print(flags)
得到flag:flag{1CmPG@M3}
LooL
题目描述:iVBORw0KGgoAAAANSUhEUgAAABwAAAAUCAIAAAARPMquAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3goNFiAI385k0QAAAPVJREFU......
下载附件是一张lol的图片,后面发现跟题目附件没有关系:
0x01 base64转图片
题目描述一段base代码,看见iVBO开头的基本就可以判定是图片了,因为解码后是PNG头。将代码粘贴复制到base64转图片网站,可以得到一张图片,保存为1.png。
利用exiftool工具查看图片信息,发现Dctf和一串数值,天真以为这就是flag,结果提交不对。
md5解密字符串:brainloller,提交也不对。
0x02 brainloller
下一步利用 bftools.exe 隐写工具,具体命令是bftools.exe decode brainloller 1.png --output 1.txt,打开1.txt发现是一段brainfuck代码。
++++++++[>+>++>+++>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++>+++++++++++++>++++++++++++++>+++++++++++++++>++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>+.-<<<<<<<<<<<<<<<>>>>>>>>>>>>>>-.+<<<<<<<<<<<<<<>>>>>>>>>>>>>>>---.+++<<<<<<<<<<<<<<<>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<>>>>>>>>>>>>>+.-<<<<<<<<<<<<<>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<>>>>>>>>>>>>>>>-.+<<<<<<<<<<<<<<<>>>>>>>>>>>>>---.+++<<<<<<<<<<<<<>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<.
得到flag:youdidwell
Pixel-Princess
下载附件是一个压缩包里面有照片binwalk得到一个zip包和jpg照片,图片上写有Passpharase:BaD_DR4G0N
steghide extract -sf 文件路径
输入密码
神秘的交易
下载得到logicdata格式文件。Saleae Logic打开。
可以看到有时钟电平clk和数据电平data。查4442卡手册可以得知指令格式为:
1、每个指令从时钟高电平时数据下降沿后开始,数据从低位到高位的顺序发送。每个命令由三个字节组成:控制字节、地址字节、数据字节。时钟高电平数据电平上升沿代表本次命令结束。
2、与加密密钥相关的指令类型是0x33,用于校验口令。而4442卡的口令为三字节。
因此我们需要找到这样一串数据:
0x33 0x01 flag[1] 0x33 0x02 flag[2] 0x33 0x03 flag[3]
在6s950ms处找到这串数据:
第一段:
因此密钥的第一个字节是0x40。重点是在时钟电平找到开始和结束标志(表现为一个较宽的峰),然后从数据电平按从高到低读取数据。第二段和第三段就在第一段后,各相隔3位。以此类推得到flag。
得到flag:flag:SCTF{403110}
secret_in_the_center
下载附件打开是个无后缀文件:
使用winhex打开:
发现为压缩包头,修复文件头将后缀改成zip解压缩发现一个文本文件打开
共三行,每行两段46位的十进制数字。如果将其看作三角形的三个顶点,然后根据题目提示计算三角形的重心:
x1, y1 = 1284127282371497062677311074762266138188682452, 1061034162220021178928947580605340250986215805
x2, y2 = 3340934738305796487992773649714719725826419120, 3521272815040026806681782376130203385829188680
x3, y3 = 2227289825537197658661849099809813150550946084, 2200795509400016754176113985081377116143242930
x = (x1 + x2 + x3) // 3
y = (y1 + y2 + y3) // 3
x = hex(x)[2:]
y = hex(y)[2:]
print(x, y)
输出:
后猜测为ascii,ascii解码得到flag:
Flying_High
下载得到gz压缩包,tar解压:
得到4个bin文件,file看一下:
需要用到UBI Reader。安装后解压四个文件:
for i in `ls *.bin`; do ubireader_extract_files $i -o extracted_$i; done
在image3.bin中找到可疑信息:
打开视频找到flag。
flag:HITB{96ac9a0458279711e5d61f10849e6c58}
Usb-probing
打开照片后得到flag:
flag:ALEXCTF{SN1FF_TH3_FL4G_OV3R_U58}
happy_puzzle(修复文件)
godwave(曼彻斯特编码)
Hidden_secret
下载得到Hidden secret文件夹,内含1、2、3三个文件。查看后发现内容均为大量十六进制数字。
题目给了三个文件,第一个文件1,开头是03 04 14 00,很像压缩包开头,补个50 4B,保存成zip后,用7-zip打开压缩包,发现2.jpg其中有个1.txt
2.txt中有提示:
将1.jpg中1.txt分离出来
K<jslc7b5'gBA&]_5MF!h5+E.@IQ&A%EExEzp\\X#9YhiSHV#
base92解码得到flag:
unctf{cca1a567c3145b1801a4f3273342c622}
disordered_jpg
下载得到jpg文件,打开显示已损坏。十六进制编辑器打开:
可以观察到文件头部是乱序的,可以大致看到文件头FF D8和Exif块开头FF E1 XX XX 45 78 69 66的痕迹。对比一下:
很明显该文件以每四个字节为单位进行了反序,同时因为总字节长度除4余1,最后一字节D9是正常的。
写python脚本将其修复:
jpg = open('2.jpg', 'rb').read()
tmp = b''
l = (len(jpg) - 1) // 4
for i in range(l):
tmp += jpg[4 * i + 3].to_bytes(1, 'big')
tmp += jpg[4 * i + 2].to_bytes(1, 'big')
tmp += jpg[4 * i + 1].to_bytes(1, 'big')
tmp += jpg[4 * i].to_bytes(1, 'big')
# .to_bytes(1, 'big')将数字转换为字节,其中1是字节位数,big是高位在前
out = open('out.jpg', 'wb')
out.write(tmp)
得到out.jpg:
flag:flag{F098996689560BBB1B566EBC10D5E564}