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系统下一个目录,获取用户名和密码需要用SAMsystem两个文件。

把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.,解压出keygpg两个无后缀文件。

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 部分题解(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章

BugkuCTF WEB解题记录 16-20

BugkuCTF WEB解题记录 21-25

BugkuCTF 计算器

BugkuCTF 部分题解(随缘更新)

BugkuCTF web2

BugkuCTF sql注入