menu Ga1@xy's Wor1d
MRCTF部分wp
1103 浏览 | 2020-03-27 | 阅读时间: 约 4 分钟 | 分类: wp,MISC | 标签: Misc,比赛wp
请注意,本文编写于 244 天前,最后修改于 124 天前,其中某些信息可能已经过时。

第一次出题,可能水平不是很高,如果给师傅带来了不是很好的做题体验,还请师傅多多包涵~

ezmisc

附件链接:https://pan.baidu.com/s/17F-ghwo1sCSqWa7SkwdUcQ

提取码:mcp7

下载附件得到一张png图片,在windows下能打开看到,拖进kali中会显示CRC error,由此可以推断图片的宽度/高度有问题,又因为图片宽度有问题时在windows下无法正常打开图片,所以本题为图片高度有问题,修改图片高度即可看到flag:MRCTF{1ts_vEryyyyyy_ez!}

附上有关CRC错误的隐写分析网址:https://www.bbsmax.com/A/gVdnlMVXJW/

ctfwiki中也有很详细的介绍:https://ctf-wiki.github.io/ctf-wiki/misc/picture/png-zh/

你能看懂音符吗

附件链接:https://pan.baidu.com/s/1msVDEskKDmkTtyfzv7t5VQ

提取码:8ac0

下载附件,解压时报错,放进winhex查看,发现rar文件头错误,将6152修改为5261后再解压,即可得到一个word文档,打开后发现内容被隐藏,搜索word隐写可知其隐写方式,将被隐藏的内容显示出来,得到一串音符,在线网址解密音符即可得到flag

word隐写方式(供参考):https://blog.csdn.net/q_l_s/article/details/53813971

解密网址:https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=yinyue

flag:MRCTF{thEse_n0tes_ArE_am@zing~}

古典密码知多少

附件链接:https://pan.baidu.com/s/1ulYiCu30X6uKJZ3uoRQs5Q

提取码:xy6t

猪圈密码,圣堂武士密码,标准银河字母,且已提示都为大写字母
解密可得 FGCPFLIRTUASYON , 图片里也提示fence ,故尝试栅栏密码
每组字数为3时即可解得flag:MRCTF{CRYPTOFUN}

Hello,misc_world!

附件链接:https://pan.baidu.com/s/1kNc2oD5AkfJuzuCPL_qY5w

提取码:m4ly

下载附件得到一张红蓝图和一个加密的rar包,binwalk分离图片可以得到一个加密的zip包

  • 第一种解法(其实是俺的预期解,但是师傅们给了更简单的解法,可见解法二)

根据图片所给名称,可以判断图中隐藏了信息,由于图片中只有红色和蓝色,故可以想到将图片中的红色和蓝色像素块转换成 0 & 1 序列并重新构建,以此可以还原得到一张图片:

生成脚本:

from PIL import Image
import bitstring

with open('1.png','rb') as f:
    bitcon = bitstring.Bits(f)
    im = Image.new('RGB',(1024,780),(255,0,0))
    pim = im.load()
    for i,val in enumerate(bitcon.bin):
        if val == '0':
            pim[i%1024,i/1024] = (0,0,255)
    im.save('red_blue.png')

解题脚本:

from PIL import Image
import bitstring

im = Image.open('try to restore it.png')
width = im.size[0]
height = im.size[1]
pim = im.load() # 读取图片的像素信息
bin_result = ''
for h in range(height):
    for w in range(width):
        if pim[w,h][0] == 255: # 判断是否是红色(R,G,B)[0]表示第一通道
            bin_result += '1'
        else:
            bin_result += '0'

# print bitstring.BitArray(bin=bin_result).bytes.encode('hex')
with open('result.png','wb') as f:
    f.write(bitstring.BitArray(bin=bin_result).bytes)

注:由于刚开始无法确定长宽的内外循环关系及红蓝对应关系,故可以进行多次尝试

还原得到图片,看图获得解压zip包的密码:

  • 第二种解法

stegsolve查看图片,Save Bin可直接得到图片:

解开压缩包后得到一个文档,文档中信息:

127
255
63
191
127
191
63
127
127
255
63
191
63
191
255
127
...

观察可知文档中只含有 127 255 63 191 这四个数字,将这四个数字转化为二进制,可以看到这四个数字的二进制形式中 只有最高两位的二进制数不同 ,将其最高两位提取出来组合在一起转化为ASCII,可以得到rar密码:

fp = open('out.txt','r')
a = fp.readlines()
p = []
for i in a:
 p.append(int(i))

s = ''
for i in p:
 if i == 63:
     a = '00'
 elif i == 127:
     a = '01'
 elif i == 191:
     a = '10'
 elif i == 255:
     a = '11'
 s += a

import binascii

result = ''
for i in range(0,len(s),8):
 result += chr(int(s[i:i+8],2))

print result

得到rar包的解压密码:0ac1fe6b77be5dbe

解压可以得到一个zip包,看zip包里的内容可以知道这是一个 docx 文件,改后缀为docx得到最终的文件

将文件内容全选改为深色,可以看到在文档的最下方藏有几串字符

ps:如果用word打开的话可以看到有最后的换行符存在,可以判断文档中隐藏了内容

将每一长串的字符用base64解码,可以得到6行只由 0 & 1 组成的字符串

在文档左侧(word和WPS都可)查找字符就可以观察到flag,包裹上 MRCTF{} 就是最终的flag

flag: MRCTF{He1Lo_mi5c~}

千层套路

附件链接:https://pan.baidu.com/s/1DioikoHUoQueYL-LNA5sgw

提取码:8qjx

主要考察python脚本编写能力

虽然是千层套娃但是为了不那么毒瘤其实只有两层

第一层,自动化解压zip

试几次就知道zip的解压密码都是对应名字,可以写脚本

#coding=utf-8
import os
import zipfile


orginal_zip = "0573.zip"

while True:
    tag = orginal_zip
    orginal_zip = zipfile.ZipFile(orginal_zip)
    for contents in orginal_zip.namelist():
        password = contents[0:contents.find('.')]
    print password
    orginal_zip.setpassword(tag[:-4])
    try:
        orginal_zip.extractall()
    except:
        break
    if(len(tag)>6):
        os.system("rm "+tag)
    orginal_zip=password+".zip"

再附上bash的脚本(跑起来会比python的更快些):

#!/usr/bin/env bash

while [ -e *.zip ]; do
  files=*.zip;
  for file in $files; do
    echo -n "Cracking ${file}… ";
    password=${file%%.*}
    if [ -z "${password}" ]; then
      echo "Failed to find password";
      break 2;
    fi;
    echo "Found password: \`${password}\`";
    unzip -q -P "${password}" "$file";
    rm "${file}";
  done;
done;

然后第二层就是qr.txt

里面一堆

(255, 255, 255)
(255, 255, 255)
(255, 255, 255)
(255, 255, 255)
(255, 255, 255)
(255, 255, 255)
(255, 255, 255)
...

显然是像素点

用PIL库搞下

#coding=utf-8
from PIL import Image

x = 200    #x坐标  通过对txt里的行数进行整数分
y = 200    #y坐标  x * y = 行数

im = Image.new("RGB", (x, y))
file = open('qr.txt')

for i in range(0, x):
    for j in range(0, y):
        line = file.readline()  #获取一行的rgb值
        line = line[:-2]
        line = line[1:]
        print line
        rgb = line.split(", ")  #分离rgb,文本中逗号后面有空格
        im.putpixel((i, j), (int(rgb[0]), int(rgb[1]), int(rgb[2])))

im.save('flag.png')

拿到二维码,扫一下拿到flag

flag:MRCTF{ta01uyout1nreet1n0usandtimes}

不眠之夜

附件链接:https://pan.baidu.com/s/1tYb7iBwjcHxwI1FvzWQpKw

提取码:b1ok

拼图题,可以手动拼图,一共120块不算特别多,手动拼的话建议用ppt,可以自动对齐比较方便

第二种方法可以用gaps,在此我详细介绍一下用gaps的解法

注:有关montage命令和gaps用法详细可见kali命令篇misc工具这两篇博客

首先得到120张图,用gaps的话需要先将这120张图拼到一起形成一个大图,这里我用montage命令实现:

montage *jpg -tile 10x12 -geometry 200x100+0+0 out.jpg

在得到一张大图之后,就可以用gaps来进行还原:

gaps --image=out.jpg --generations=40 --population=120 --size=100

得到flag:MRCTF{Why_4re_U_5o_ShuL1an??}

A Signal From ISS

附件链接:https://pan.baidu.com/s/1OUKjJqpjUfKPQOoer6I_kQ

提取码:whiw

题目描述:

You received some radio voice. Warn: DO NOT PLAY IT LOUD

一道无线电题,下载附件得到wav的音频文件,题目描述已经提示千万不要放太大声,听起来是真的要命……

用手机软件就可以解:https://play.google.com/store/apps/details?id=xdsopl.robot36

打开软件播放音频,音频结束即可得到flag:merak{r3ce1ved_4n_img}

CyberPunk

附件链接:https://pan.baidu.com/s/1Y9opNmWqvAJzcio1U40zdg

提取码:bdpp

签到题,改下电脑的时间就可以得到flag(据出题人所说)

flag:MRCTF{We1cOm3_70_cyber_security}

Unravel!!

附件链接:https://pan.baidu.com/s/1Gv91lJ91Fb80Z0SkQl7t7g

提取码:io49

先对附件中的图片binwalk,得到名为aes.png的图片,内容为Tokyo

根据音频文件名称所给的提示信息,用winhex查看文件,可以在最后发现字符串

U2FsdGVkX1/nSQN+hoHL8OwV9iJB/mSdKk5dmusulz4=

将字符串用aes解密可得压缩包的密码:CCGandGulu

解压得到第二个音频,直接用silenteye解密即可得到flag:MRCTF{Th1s_is_the_3nd1n9}

发表评论

email
web

全部评论 (暂无评论)

info 还没有任何评论,你来说两句呐!