首页 > 其他分享 >Misc_XCTF_WriteUp | base64stego

Misc_XCTF_WriteUp | base64stego

时间:2023-12-05 17:12:28浏览次数:43  
标签:binary 比特 WriteUp base64 Misc base64stego stego line 末尾

题目

提示:
菜狗经过几天的学习,终于发现了如来十三掌最后一步的精髓

题目:

分析

尝试打开压缩包,发现需要密码。但准备爆破的时候被提示 zip 未被加密:


猜测是 zip 伪加密,打开十六进制文件,发现数据区的全局方式位标记第 2/4 个数是偶数 0,而目录区的第 2/4 是奇数 9:


将 9 改为偶数 0 保存,打开压缩包,是一个 base64 编码的文件:


将文件内容 base64 解码:
import base64

stego = open("D:/Firefox/download/unlock/stego.txt", 'r', encoding='utf-8')
stego_decode = open("D:/Firefox/download/unlock/stego_decode.txt", 'w')
for line in stego.readlines():
    line = line.strip()
    stego_decode.write(base64.b64decode(line.encode("gb18030")).decode("gb18030"))


得到隐写术的 wiki 内容:

找了一圈没找到 flag,难道是…… base64 隐写?

编辑文件名的时候翻译了“隐写”一词,得到 “steganography”。


base64 加密是将文本每个字节 8 比特的数据按每 6 比特分组,当最后一个分组字节数不足 6 比特时用 0 补充,同时每补充 2 个 0 就在编码后的 base64 文本末尾补充一个 =。因为 6 和 8 的最大公约数为 2,因此最后一个分组缺少的字节只有可能为 2 或 4 比特,即编码后的 base64 字节末尾最多可能补充 2 个 =

在此基础上,base64 隐写是利用加密过程中最后一个分组补充 0 的位置写入隐藏信息。因为 base64 解码是根据编码结果末尾的 = 符号数判断填充的比特数,故更改原文最后一个分组的补充字节不会影响解码。

根据隐写原理,更改 python3 代码如下:

stego = open("D:/Firefox/download/unlock/stego.txt", 'r', encoding='utf-8')  # 以读方式打开文件stego.txt


def base64_index(c):  # base64解码为二进制数对照表
    base64_table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    for i in range(len(base64_table)):
        if c == base64_table[i]:
            return i


def steganography():
    binary = ''  # 存储二进制串
    for line in stego.readlines():  # 按行读取
        line = line.strip()  # 去掉末尾\n
        if line[-1] == '=':
            if line[-2] == '=':  # 如果末尾有俩=
                # 对倒数第3个base64字符(填充了0的字符)查表
                # ->转为二进制
                # ->将开头的'0b'换成'0000',否则取的末尾比特数可能不足,如0101会被输出为101
                # ->join()将list转为str
                # ->输出最后4比特
                binary += ''.join([bin(base64_index(c)).replace('0b', '0000') for c in line[-3]])[-4:]
            else:  # 如果末尾只有一个=
                # 对倒数第2个base64字符(填充了0的字符)查表
                # ->转为二进制
                # ->将开头的'0b'换成'0000',否则取的末尾比特数可能不足,如0101会被输出为101
                # ->join()将list转为str
                # ->输出最后2比特
                binary += ''.join([bin(base64_index(c)).replace('0b', '0000') for c in line[-2]])[-2:]

    for i in range(len(binary) // 8):  # 步长8遍历binary字符串
        print(chr(int(binary[i * 8:(i + 1) * 8], 2)), end='')  # 每8字节从二进制字符串转十进制值->转字符串->无换行打印


if __name__ == '__main__':
    steganography()

得到 flag,将可打印字符按格式提交即可。

Flag

flag{Base_sixty_four_point_five}

参考

成功解决UnicodeDecodeError: 'utf-8' codec can't decode-【评论区-第1条-知一】-知乎
Base64原理以及隐写术-棒棒鸡不棒-腾讯云开发者社区
Python File(文件) 方法-菜鸟教程
Python读取txt文本三种方式-年少纵马且长歌-知乎
Python strip()方法-菜鸟教程
Python3 join()方法-菜鸟教程
Python 基础教程 _ 菜鸟教程

标签:binary,比特,WriteUp,base64,Misc,base64stego,stego,line,末尾
From: https://www.cnblogs.com/Guanz/p/17874825.html

相关文章

  • Web_XCTF_WriteUp | upload1
    题目分析根据题目可知该题考查文件上传漏洞。用BurpSuite的内置浏览器打开环境。新建记事本编写一句话木马脚本:<?php@eval($_POST['r00ts']);?>保存为jpg格式。打开拦截,上传脚本。拦截到数据包:将脚本后缀名更改为php后放行:打开中国蚁剑并初始化,在数据管......
  • Web_XCTF_WriteUp | Web_php_include
    题目分析对php代码进行分析:<?php//php开头show_source(__FILE__);//对当前源文件进行高亮显示echo$_GET['hello'];//收集get表单中hello的数据输出$page=$_GET['page'];......
  • Misc_BUUCTF_WriteUp | 另外一个世界
    题目分析一套检查下来,在StegSolve切换通道的时候发现甜饼怪左上角有一部分像素不正常:但在切换通道的过程并没有发现什么异常。binwalk也没有发现隐藏文件:唯一可疑的只剩文件最后的二进制串:将二进制字符转换为文本:套上格式后提交成功。Flagflag{koekj3s}参......
  • Misc_BUUCTF_WriteUp | 隐藏的钥匙
    题目提示:路飞一行人千辛万苦来到了伟大航道的终点,找到了传说中的Onepiece,但是需要钥匙才能打开OnePiece大门,钥匙就隐藏在下面的图片中,聪明的你能帮路飞拿到钥匙,打开OnePiece的大门吗?注意:得到的flag请包上flag{}提交题目:分析图片没有备注。查看十六进制文件发现存在......
  • Misc_BUUCTF_WriteUp | 小明的保险箱
    题目提示:小明有一个保险箱,里面珍藏了小明的日记本,他记录了什么秘密呢?。。。告诉你,其实保险箱的密码四位纯数字密码。(答案格式:flag{答案},只需提交答案)注意:得到的flag请包上flag{}提交题目:(jpg文件分析在文件详细信息里看见备注有东西:按url找过去:是死路。010Edi......
  • 比赛的题misc和ctfshow中的
    base64/4 利用base16啊 misc50 我感觉挺难的,看了好几个wp才勉勉强强搞懂,首先进行解压缩之前需要进行一次爆破吧,破解密码出来为123456,然后得到一大串数字,然后将其转化为十六进制,这里需要用到大佬们的脚本,我写不出来,就会得到一个新的文件,然后用那个010工具上手,然后后面就用到......
  • 【?】Web_BUUCTF_WriteUp | [GXYCTF2019]Ping Ping Ping
    题目分析ping一个任意ip:拼一个命令试试:看来是命令执行漏洞,直接查看flag.php,发现存在空格过滤:尝试绕过空格过滤:还有{}符号过滤。过滤了flag关键字,尝试绕过:过滤了单双引号。\符号、\$+数字、\$+@没有用。变量拼接没有输出。看看index.php:......
  • Web_XCTF_WriteUp | unserialize3
    题目分析根据题目指向,这题是反序列化漏洞。分析代码:classxctf{public$flag='111';//变量flag初始化为111publicfunction__wakeup(){//“__wakeup”:PHP魔术方法,在序列化后立即被调用exit('badrequests');//输出“badrequests”}?code=......
  • Misc_XCTF_WriteUp | reverseMe
    题目分析把图片左右反转:提取文字,得到Flag。Flagflag{4f7548f93c7bef1dc6a0542cf04e796e}参考图片转文字在线-图片文字提取-网页OCR文字识别-白描网页版......
  • 【misc】谷歌pixel截图漏洞
    这道题来源于Hackgame2023的“奶奶的睡前flag”这道题目附件是一张图片根据题目的提示,谷歌的亲儿子可以搜索到这个pixel的截图漏洞搜索 Pixel截图bug,可以发现很多新闻报道:Pixel手机自带的系统截图工具存在漏洞,裁剪图片并不会删除原图,而是将裁剪后的图片的数据直接写在原图......