河北省2019CTF线上赛部分题解

Posted kevinbruce656

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了河北省2019CTF线上赛部分题解相关的知识,希望对你有一定的参考价值。

后期补充,写到哪算哪,不按顺序。

1.Doc什么鬼

基础题,Winhex下打开。
技术图片
非常明显的zip文件头,将文件直接后缀改成zip。

技术图片
提取Flag.xml并打开即可得到flag。

2.爱因斯坦

基础题,将misc2.jpg用binwalk打开,可以发现压缩包以及其中的flag.txt。
技术图片

直接将图片后缀改成zip,需要密码。
用winhex查看16进制数据时发现好多0区域,其中有一段不被0包围的,是压缩包密码:this_is_not_password。
解压即可得到flag。

3.mimi

基础题,但过程略多。

这个题给了一个mp3文件和一个压缩包。压缩包需要密码,mp3文件的音频无任何异常。猜测压缩包密码在音频文件中,用mp3stego可以解出。考虑到MP3stegp需要密码,我用百度云听歌识曲,利用歌名Canon作为密码可以解出。
技术图片

密码

pqiem*zoei$%h

解压出来的文件这个样子:
技术图片

像图片转的base64,写个脚本解一下。一开始会发现解完打不开,因为缺少png的文件头,补上就行。

import base64
a = b'\\x89\\x50\\x4e\\x47\\x0d\\x0a\\x1a\\x0a'
with open('pic_png.txt') as f:
    r = f.read()

rlt = base64.b64decode(r)
rlt = a+rlt
with open('flag.png','wb') as f:
    f.write(rlt)

技术图片

4.真是假

文件打开后有341个字,只有真和假。将真假分别替换成1和0。考虑到341不能拆成8个一组或者偶数个一组,暂时想不到好方法,但是341可以开方,于是得到一个29*29的矩阵。打印一下发现很像二维码,于是将其化成图,在扫描即可得到flag。

from PIL import Image
img = Image.new("RGB",(29,29))
a = ''#真假的数据省略,太长了
a = a.replace('真','1')
a = a.replace('假','0')
pix = []
for i in range(29):
    pix.append(a[29*i:29*i+29])
for i in range(29):
    for j in range(29):
        if pix[i][j]=='1':
            img.putpixel((i,j),(255,255,255,0))
        else:
            img.putpixel((i,j),(0,0,0,0))
img.save("flag.png")

结果扫一下二维码就行,我用微信扫的。

技术图片

5.奇怪的数字

基础题,看看九宫格键盘就可以了。举个例子,33就是第三个格的第三个字母。

文件内容

33 53 21 41 43 74 43 53 63 83 32 71 42 63 62 32

flag

flagisilovemyphone

待续

以上是关于河北省2019CTF线上赛部分题解的主要内容,如果未能解决你的问题,请参考以下文章

河北师范大学ctf挑战赛全国赛道wp

[CTF]GUET梦极光杯线上赛个人WP

第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem L. 跑图-题解

第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem H. 神殿-题解

第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem G. 520-题解

第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem K. Bitmap-题解