萌新赛部分MISC(签到、千字文、劝退、qrcode)

admin 2022年1月5日23:03:23CTF专场评论11 views3149字阅读10分29秒阅读模式

>

>

萌新赛部分MISC(签到、千字文、劝退、qrcode)

hdxw

萌新赛杂项_签到

http://game.ctf.show/r2/
hint: n进制转字符串/base-n

第一步:发现并提取隐藏信息

图片显示“fl4g_1s_n0t_h3r3”的意思是真flag不在图片里

隐藏信息在网页源码里,img标签和body标签之间。

提取隐藏信息的方法很多,下面列举几种

  1. F12,Elements,选中body标签,右键"Edit as HTML"
  2. 网页上右键,查看网页源代码,细心的可以发现浏览器的横向滚动条很长
  3. Ctrl+S,保存网页到本地文件
  4. curl http://game.ctf.show/r2/

这种不可见字符的隐藏方法还常见于压缩包的注释

第二步:解码

“空白”一共两种类型,空格和制表符

可以在文本编辑器中把全部“空格”替换为“0”,“\t”替换为“1”

得到二进制后转字符串,得到摩尔斯码
-.... -.... -.... -.-. -.... .---- -.... --... --... -... ....- -.. -.... ..... -.... . -.... --... ....- -.. -.... ..... -.... . -.... --... ....- ....- -.... .---- --... -..

摩尔斯解码得到十六进制,虽然是32位但是不是md5,“flag”转16进制后666开头(知识点)
666C61677B4D656E674D656E6744617D

十六进制转字符串得到flag

import re

# 二进制转字符串
def bin2str(bin):
    b = re.findall(r'.{8}',bin)
    string = ''
    for i in b:
        string += chr(int(i,2))
    return string

# 十六进制转字符串
def hex2str(hexStr):
    b = re.findall(r'.{2}',hexStr)
    str = ''
    for i in b:
        str += chr(int(i,16))
    return str

摩尔斯解码 http://www.zhongguosou.com/zonghe/moErSiCodeConverter.aspx

萌新赛杂项_千字文(写代码)

hint:使用pyzbar可以识别二维码(加个白边框,食用更佳)

附件是个二维码,内容是“这里只有二维码”

二维码中每一个格(25px*25px)也是一个二维码

因为rgb的值只调整了1,所以肉眼不可见,但可以用Stegsolve看出来

有大佬直接ps切割,然后在线批量扫成功通关

这里预期还是写代码实现,所以加了一个提示信息

直接识别25*25的二维码会失败,加一个1px的白边框就能识别(或者据说放大也能识别)

虽然有的拼音字符识别有错误,但flag还是可以正常出来的

from pyzbar import pyzbar
from PIL import Image

def decode_qr_code(img):
    txt = pyzbar.decode(img, symbols=[pyzbar.ZBarSymbol.QRCODE])
    if len(txt):
        return txt[0].data.decode("utf-8")
    else:
        return ""

img = Image.open("千字文.png")
for w in range(2,27):
    for h in range(2,27):
        qrcode = Image.new('RGB', (27, 27),color=(255,255,255))
        wq = w*25
        hq = h*25
        for x in range(wq,wq+25):
            for y in range(hq,hq+25):
                r,g,b = img.getpixel((x,y))
                color = b
                if color == 254:
                    color = 0
                elif color == 1:
                    color = 255
                qrcode.putpixel((x-wq+1,y-hq+1), (color,color,color))
        # qrcode.show()
        txt = decode_qr_code(qrcode)
        if "flag" in txt:
            print(w,h,txt)

萌新赛杂项_劝退警告(读代码)

题如其名
hint:python lambda参考的unctf2019-Think ,混淆用的这个http://www.onelinerizer.com/
final hint: 你与flag的距离可能只是一个数字(check[0]改为check[1])

第一层:解压出题目

动图尾部附加了压缩包,可以分离出来,也可以直接改扩展名为.zip

ctf中会遇到的解压缩包方法就那几种,爆破、明文攻击、伪加密

万变不离其宗,只要明白了各自的特点轻松松解压(除非有明确的提示需要爆破才用爆破)

一、压缩包注释提示做数独,解压密码是填完整的数独。

数独的英文是“sudoku”,压缩包里有同名图片是伪加密的数独图片

解数独得到解压密码,推荐一个在线玩数独的网站(与题目无关)https://www.oubk.com/

二、第二个压缩包有注释,压缩包里有一个“说明”文件,把压缩包注释的文字保存到文件,明文攻击

通过群里大佬的交流,发现这里有几个坑。

保存文件的大小不一致:电脑记事本保存时文件编码是ANSI(另存为时可以看到编码),每个汉字2字节;使用文本编辑器保存utf-8时需要没有bom头,bom头多占3字节

明文攻击无法停止:明文攻击时指定秘钥(文件crc32),明文攻击开始后第一步是恢复文件,当看到第二步的恢复口令时就可以停止了

三、第三个压缩包注释提示了密码位数和首尾两位,这里使用“爆破”的变形——掩码,掩码值是42????32

第二层:图片隐写

解压出文件“open your eye”,提示使用silenteye,密码默认,提取出flag.txt

第三层:反编译pyc

提取出的flag.txt,hex转为pyc文件,使用uncompyle6反编译得到源码

源码是lambda表达式,不能美化,没有恢复工具,本想考察读代码的能力

给出了混淆方法,可以通过简单的代码混淆后的状态推理出题目的源码结构(整体把握,总共有三个方法:encode、decode、check)

最后无奈hint给出了修改方法(一血没有提示就做出来了),执行后输出flag

或者也可以用re大佬@ThTsOd的方法,如下改完后当re做

import time

# 代码

time.sleep(3)

萌新赛杂项_qrcode

这题本打算添加到普通misc里的,放到萌新赛算是福利题了

625位二进制,正好是25*25二维码的大小

方法1:1全部替换为█,0全部替换为空格,替换后二维码宽度不够比较难识别,可以1替换为两个█,0替换为两个空格

方法2:python读文件写到图片并解码

from pyzbar import pyzbar
from PIL import Image

def decode_qr_code(img):
    txt = pyzbar.decode(img, symbols=[pyzbar.ZBarSymbol.QRCODE])
    if len(txt):
        return txt[0].data.decode("utf-8")
    else:
        return "decode fail"

qrcode = Image.new('RGB', (27, 27),color=(255,255,255))
f = open("qrcode.txt")
txt = f.read()
x=y=1
for i in txt:
    if i == "1":
        color = 0
    else:
        color = 255
    qrcode.putpixel((x,y), (color,color,color))
    x += 1
    if x > 25:
        x = 1
        y += 1
# qrcode.show()
print(decode_qr_code(qrcode))

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月5日23:03:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  萌新赛部分MISC(签到、千字文、劝退、qrcode) http://cn-sec.com/archives/719841.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: