BugkuCTF 部分题解(持续更新)
Posted z.volcano
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BugkuCTF 部分题解(持续更新)相关的知识,希望对你有一定的参考价值。
之前做的题在BugkuCTF 部分题解(一)
佛系更新
1月2日更新了简单套娃DX、做题要细心-1
MISC
简单套娃DX
下载得到8080个无后缀文件,随便用010editor打开几个,发现都是png文件,不过都存在一些问题,先写脚本给这些文件加上png后缀
import os
path = r'E:\\desktop\\XD' #文件夹所在地址
for i in os.listdir('./XD'): #文件夹名字
oldname = os.path.join(path,i)
newname = os.path.join(path,i+'.png')
os.rename(oldname,newname)
加上后缀后只有一部分文件可以正常打开,剩下的就需要修改,前面发现部分文件缺失了8字节文件头
,写脚本对这种文件进行修复,成功修复了1046
个文件,说明还有很多图片是其他种类的错误,需要一一找出
import os
out = 'output' #存放修复后的文件的文件夹
if not os.path.exists(out):
os.makedirs(out)
for i in os.listdir('./XD'): #文件夹名字
file = open('./XD/'+i, 'rb').read()
if file[1:4] != b'PNG':
file = int(0x89504E470D0A1A0A).to_bytes(8, 'big') + file
f = open('./output/' + i + '.png','wb')
f.write(file)
f.close()
比如说有一些文件是IDAT块跑到IHDR块前面去了
这个过程最好是拿一个正常的png文件过来进行比对,同时使用010editor的模板功能,可以节省很多时间,最后发现有如下几类错误
1.文件头缺失8字节(89504E470D0A1A0A) 如aAnLOyuK文件
2.IDAT块跑到IHDR块前面。如aAWyDGMo文件
3.IHDR块的长度位和标记位替换为00。如aAFRoNjh文件
4.图片的宽高被修改了(正确的应该是5*5) 如abFdgotH文件
5.Color type被修改成不是0的数。 如ABmgLXTn文件
6.IDAT块的长度被改为0. 如aAWrIqiP文件
7.IDAT块标记位被删除。如abQZgrjo文件
八神师傅还是很贴心的,每个文件最多一种错误,而且翻了前十个文件就能找出所有种类的错误,写出最终脚本。
import os
out = 'output' #存放修复后的文件的文件夹
if not os.path.exists(out):
os.makedirs(out)
for i in os.listdir('./XD'): #文件夹名字
file = open('./XD/'+i, 'rb').read()
if file[1:4] != b'PNG': #文件头缺失
file = int(0x89504E470D0A1A0A).to_bytes(8, 'big') + file
elif file[8:16] == b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00': #IHDR块的长度位和标记位替换为00
file = file[:8] + int(0x0000000D49484452).to_bytes(8, 'big') + file[16:]
elif file[33:37] == b'\\x00\\x00\\x00\\x00' and file[37:41] == b'IDAT': #IDAT块的长度被改为0
len_idat = file.index(b'eXIf') - 49
file = file[:33] + int(len_idat).to_bytes(4, 'big') + file[37:]
elif file[12:16] != b'IHDR': #IHDR块位置错误
file = file[:8] + file[-37:-12] + file[8:-37] + file[-12:]
elif file[16:24] != b'\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x05': #图片宽高被修改
file = file[:16] + int(0x0000000500000005).to_bytes(8, 'big') + file[24:]
elif file[1:4] == b'PNG' and file[12:16] == b'IHDR' and file[37:41] != b'IDAT': #IDAT块标记位被删除
file = file[:37] + b'IDAT' + file[37:]
elif file[1:4] == b'PNG' and file[12:16] == b'IHDR' and file[25] != b'\\x00': # Color type被修改
file = file[:25] + b'\\x00' + file[26:]
f = open('./output/' + i, 'wb')
f.write(file)
f.close()
随后得到了8080个5*5的小方块,挨个查看它们的exif信息,可以发现这两个值均不相同,写脚本挨个输出,发现x对应的最大值是449,y对应的是19,应该是坐标
写脚本画图
import os
from PIL import Image
img = Image.new('RGB',(450*5,20*5),(255,255,255)) #乘以5是因为一张小图是5*5
for i in os.listdir('./output'): #文件夹名字
file = open('./output/'+i, 'rb').read().hex()
x = int(file[-64:-56], 16) #x坐标
y = int(file[-48:-40], 16) #y坐标
x*=5
y*=5
im = Image.open('./output/'+i)
img.paste(im,(x,y,x+5,y+5))
img.save('out.png')
做题要细心-1
这个位置有一串二进制,拿出来
注意到file.gif文件尾有额外数据,看特征是文件头不全的gif文件
补全文件头,010editor打开,在类似的位置看到另一串二进制
连在一起,转字符得到Nnb77_buG
,查看第二个gif的exif信息,发现一个字符串,base64解码得到Ax_S
第二个图片的第20帧有一串字符,md5解密得到bugku
,至此flag找全了
简单取证1
下载得到windows系统下一个目录,获取用户名和密码需要用SAM
和system
两个文件。
把SAM和SYSTEM文件放到Win32文件夹下,运行mimikatz,执行命令
所以flagadministrator-QQAAzz_forensics
南城旧梦
mmz.bmp文件尾有一段DE@@=<6J:DB625K4
,rot47解码后得到stoolkeyisqeadzc
意思是使用工具stool
,密码是qeadzc
,这个工具使用的话要直接把图片拖进去,解密的话是这个选项,输入密码就可以解出Key.txt
,得到把酒言欢.rar的密码mmzbudaiwowuwuwu~~~##
倾听.txt是SNOW隐写
,解密可以得到密码表
(1)1 2 3 4 5 6 (2)1 2 3 4 5 6 (3)1 2 3 4 5 6
! @ # $ % ^ p f f d e h v f s a e y
(4)1 2 3 4 5 6 (5)1 2 3 4 5 6 (6)1 2 3 4 5 6
/ * - + . ? F G S F H H " " / \\ | :
(7)1 2 3 4 5 6 (8)1 2 3 4 5 6 (9)1 2 3 4 5 6
r o k u g s f J L Y G W J O P N G W
(10)1 2 3 4 5 6
F S A S D T
游戏规则在九菊.docx
中有描述
看不懂规则,所以用密码表中所有的字符组成字符串,用Accent RAR Password Recovery
爆破
!@#$%^pffdehvfsaey/*-+.?FGSFHH/\\|:rokugsfJLYGWJOPNGWFSASDT
最后跑出密码是%ee.
,解压出key
和gpg
两个无后缀文件。
key中的内容是
;3%5;3%5;3%5;2 ;5 ; ;%4;3%5;4 ;5
;2 ;open _ ,$0;2 ; ;5 ; ;3;2 ;1%2;4 ; ;5 ;3 ;5
;2 ;7 ;5 ; ;;while (<_>) ;5 ; ;5 ;1%6;2
;3%5;2%7; ;7 ;2;s;%; ;g;3 ;1%7;2; ;5
;8 ; ;;s’([; ])(\\d)’ $1x$2 ; ‘ge;; ; s’\\S’;'g; ;4;
s; ;#;g; ; ;5 ; ;5 ; ;5 ; ;5 ; s;;; ;g; ;3 ;
;3%5;3%5;3%5;3%5;; print ;%5;5%3;2
这个是混淆后的perl代码,直接运行得到secunet
另一个gpg的话可以在kali下直接运行,输入密码secunet
即可
成果狗成果狗
图片文件尾有额外数据,是一段base64+一个jpg文件的数据+另一段base64
,这里按照先后命名为图片1、图片2、bs1、bs2
.
两段base64解完再hex解密,没有什么特征…结合题目描述,把bs1
经过base64解码后得到数据放到图片1文件尾部(插入FFD9之前)
,接着图片高度改高。
另一段同理。
以上是关于BugkuCTF 部分题解(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章