BUUCTF

BUUCTF

J_R_R

2025-07-22 发布15 浏览 · 0 点赞 · 0 收藏

image.png

base64多次解码

脚本:

import base64

def decode(f):
    n = 0  # 初始化解码次数计数器
    while True:
        try:
            f = base64.b64decode(f)  # 尝试解码Base64
            n += 1  # 解码成功,计数器加1
        except:
            # 解码失败时输出结果
            print('[+]Base64共decode了{0}次,最终解码结果如下:'.format(n))
            print(str(f, 'utf-8'))  # 将字节转换为UTF-8字符串
            break  # 退出循环

if __name__ == '__main__':
    f = open('./flag.txt', 'r').read()  # 读取文件内容
    decode(f)  # 调用解码函数

outguess解密或者steghide解密

根据题目和flag.txt文件提示,猜测为outguess隐写
![[Pasted image 20250717152905.png

图片的备用信息,存在社会核心价值观加密
![[Pasted image 20250717152826.png]]Pasted image 20250717152826.png

mmm.jpg文件:
![[Pasted image 20250717153048.png]]Pasted image 20250717153048.png
有信息,可能就是要outguess解密的文件

abc可能就是outguess隐写(kali)的密钥
解密:

outguess -k 秘钥 -r 加密后的图片 输出文件名[自己命名]                //提取文件

![[Pasted image 20250717155619.png]]Pasted image 20250717155619.png

steghide解码(随波有):

steghide extract -sf 图片文件载体 [-p 密码也可能不设]        //提取文件
//在 图片文件载体 中提取隐藏的文件.
十六进制转字符串(坐标),坐标绘制二维码

文件隐写16进制,分离出后用脚本转化字符串成坐标
![[Pasted image 20250717162540.png]]Pasted image 20250717162540.png
用gnuplot工具转坐标为二维码
在使用gnuplot之前需要先将坐标格式转换成gnuplot可以识别的格式:

with open('result.txt', 'r') as res:  # 坐标格式文件比如(7,7)
    re = res.read()
    res.close()
    
with open('gnuplotTxt.txt', 'w') as gnup:   # 将转换后的坐标写入gnuplotTxt.txt
    re = re.split()
    tem = ''
    for i in range(0, len(re)):
        tem = re[i]
        tem = tem.lstrip('(')
        tem = tem.rstrip(')')
        for j in range(0, len(tem)):
            if tem[j] == ',':
                tem = tem[:j] + ' ' + tem[j+1:]
        gnup.write(tem + '\n')
    gnup.close()

转化后,打开gnuplot.exe
输入:

plot "文件绝对路径"

![[Pasted image 20250717165201.png]]Pasted image 20250717165201.png

![[Pasted image 20250717165329.png]]Pasted image 20250717165329.png

盲文加密解密

注意:盲文如果是从虚拟机里面复制出来的,还需要复制到文本一边,才能进行转

![[Pasted image 20250717172234.png]]Pasted image 20250717172234.png

随波盲文解密:
![[Pasted image 20250717173818.png]]Pasted image 20250717173818.png

音频隐写---摩斯密码

音频文件,放到Audacity看看。看到有两条音轨,放大下面的那条音轨,看到这一串音频,有很多分组,分组内由粗的音块和细的音块组成,类似莫尔斯电码的“-”和“.”,同时明显听出是摩斯密码
![[Pasted image 20250717174719.png]]Pasted image 20250717174719.png
图中标红的就是两段摩斯密码提现

按照第一个红框代表“.“,第二个”-”,第三个红框代表“ ”(空格):
![[Pasted image 20250717175032.png]]Pasted image 20250717175032.png
注意两个摩斯中间有空隙但不代表是空格

第一段:..-. ----- ..--- ----. -... -.. -.... ..-. ..... ..... .---- .---- ...-- ----. . . -.. . -... ---.. . ....- ..... .- .---- --... ..... -... ----- --... ---.. -....
第二段:..-. ----- ..--- ----. -... -.. -.... ..-. .....

![[Pasted image 20250717175310.png]]Pasted image 20250717175310.png

![[Pasted image 20250717175357.png]]Pasted image 20250717175357.png

两段明文字符有重复,将第一段转换为小写字母,作为flag值。(符合题目的要求:小写的32位字符)

多个base64解码

![[Pasted image 20250717180250.png]]Pasted image 20250717180250.png
利用脚本跑:

base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
binstr=""
strings = open('./base64.txt').read()
e = strings.splitlines()
for i in e:
    if i.find("==") > 0:
        temp = bin((base64.find(i[-3]) & 15))[2:]
        # 取倒数第3个字符,在base64找到对应的索引数(就是编码数),取低4位,再转换为二进制字符
        binstr = binstr + "0" * (4 - len(temp)) + temp  # 二进制字符补高位0后,连接字符到binstr
    elif i.find("=") > 0:
        temp = bin((base64.find(i[-2]) & 3))[2:]  # 取倒数第2个字符,在base64找到对应的索引数(就是编码数),取低2位,再转换为二进制字符
        binstr = binstr + "0" * (2 - len(temp)) + temp  # 二进制字符补高位0后,连接字符到binstr
str = ""
for i in range(0, len(binstr), 8):
    str = str + chr(int(binstr[i:i + 8], 2))  # 从左到右,每取8位转换为ascii字符,连接字符到字符串
print(str)
NTFS 交换数据流 实现隐藏文件

NTFS交换数据流(Alternate DataStreams,简称ADS)是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流。通俗的理解,就是其它文件可以“寄宿”在某个文件身上。利用ADS数据流,我们可以做很多有趣的事情,同时对于企业安全来说这类问题也隐藏着巨大的风险。

例如:txt文件“寄宿”在txt文件上
方法一:
在1.txt文件所在的文件夹,右键选择“在终端中打开”,打开命令行输入以下命令,回车打开flag.txt文件
![[Pasted image 20250717182348.png]]Pasted image 20250717182348.png

方法二:
可以用NtfsStreamsEditor或AlternateStreamView工具打开存放1.txt文件的文件夹,扫描出现隐藏文件文件

字频分析

将文本中出现的字符次数统计安装大到小的顺序排序,输出
脚本:

alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+- =\\{\\}[]"
strings = open('C:/Users/HelloCTF_OS/Desktop/脚本\MISC/字频分析工具/flag.txt').read()  #绝对路径

result = {}
for i in alphabet:
    counts = strings.count(i)
    i = '{0}'.format(i)
    result[i] = counts

res = sorted(result.items(), key=lambda item: item[1], reverse=True)
for data in res:
    print(data)

for i in res:
    flag = str(i[0])
    print(flag[0], end="")

![[Pasted image 20250717184459.png]]Pasted image 20250717184459.png

凯撒加密

![[Pasted image 20250717184846.png]]Pasted image 20250717184846.png

JS颜文字加密的密文(AAEncode编码)

![[Pasted image 20250717185345.png]]Pasted image 20250717185345.png

![[Pasted image 20250717185441.png]]Pasted image 20250717185441.png

16进制的rar压缩包格式

文件头52617221,这其实是RAR文件的十六进制签名
一个rar的压缩包hex转化为了16进制,只需将16进制转化为字节(hex)即可
将txt放入随波,利用工具转hex,后缀改为rar
![[Pasted image 20250717190049.png]]Pasted image 20250717190049.png

010editor的ebcdlc编码

![[Pasted image 20250717191357.png]]Pasted image 20250717191357.png
根据提示,该密码就是:摂m墷m卪倕ⅲm仈Z
只不过是因为某种编码导致乱码了,用010editor的ebcdlc编码打开看看
![[Pasted image 20250717191540.png]]Pasted image 20250717191540.png
![[Pasted image 20250717191649.png]]Pasted image 20250717191649.png
得到密码wllm_is_the_best_team!

请前往 登录/注册 即可发表您的看法…