BUUCTF MISC 81 - 100

发布时间 2023-04-28 14:22:04作者: EMCzero

81、吹着贝斯扫二维码

https://blog.csdn.net/m0_46631007/article/details/119965593
下载题目后得到很多未知格式的文件以及一个加密的压缩包
image.png
先用winhex随便查看一个文件,发现是JPG文件
image.png
使用cmd的ren命令批量重命名ren * *.jpg,发现是二维码碎片,但是不知道拼接的顺序
image.png
再用十六进制器查看图片,看看是否有其他提示。一般先直接到最后查看文件尾后是否藏有信息,发现每张的文件尾果然隐藏有信息,每张图片的数字都不一样,猜测可能是图片顺序。
image.png
于是尝试用python提取出文件尾的最后两个字节并对文件重命名,附上大佬代码

import os
from PIL import Image

# 目录路径
dir_name = r"./"
# 获取目录下文件名列表
dir_list = os.listdir('./')

# 从列表中依次读取文件
for file in dir_list:
    if '.jpg' in file:
        f = open(file, 'rb')
        n1 = str(f.read())
        n2 = n1[-3:]
        # 经过测试发现这里要读取最后3个字节,因为最后还有一个多余的字节,不知道是不是转字符串的原因导致在末尾多了一个字符
        f.close()  # 先关闭文件才能重命名,否则会报`文件被占用`错误
        os.rename(file, n2 + '.jpg')  # 重命名文件

image.png
获得图片顺序后用PS进行拼接(懒得拼了,抄抄大佬的作业,感谢!)
image.png
扫描得BASE Family Bucket ??? 85->64->85->13->16->32,提示是base编码,后面的数字应该是编码base85->base64->base85->rot13->base16->base32
首先是压缩包给出的base32编码GNATOMJVIQZUKNJXGRCTGNRTGI3EMNZTGNBTKRJWGI2UIMRRGNBDEQZWGI3DKMSFGNCDMRJTII3TMNBQGM4TERRTGEZTOMRXGQYDGOBWGI2DCNBY
解码得到3A715D3E574E36326F733C5E625D213B2C62652E3D6E3B7640392F3137274038624148
再进行base16解码::q]>WN62os<^b]!;,be.=n;v@9/17'@8bAH
再进行rot13解码::d]>JA62bf<^o]!;,or.=a;i@9/17'@8oNU
再进行base85解码:PCtvdWU4VFJnQUByYy4mK1lraTA=
再进行base64解码:<+oue8TRgA@rc.&+Yki0
最后进行base85解码:ThisIsSecret!233尝试用此字符串解压压缩包,得到flag

82、爬

下载得到一个不知格式的文件,用winhex查看发现是一个PDF文件
image.png
用福昕PDF编辑器移开图片后得到一串十六进字符串,转字符即可
image.png
77637466323032307b746831735f31735f405f7064665f616e645f7930755f63616e5f7573655f70686f7430736830707d

flag = bytes.fromhex('77637466323032307b746831735f31735f405f7064665f616e645f7930755f63616e5f7573655f70686f7430736830707d')
print(flag)
# b'wctf2020{th1s_1s_@_pdf_and_y0u_can_use_phot0sh0p}'

83、zip

解压题目给的压缩包后全是加密的压缩包,但里面都只有一个TXT,并且很小只有四个字节
image.png
可以用CRC32爆破,大佬脚本跑一下

import zipfile
import string
import binascii

string=string.printable
crc_s=''
for i in range(0,68):
    zip_name= "out" + str(i) + ".zip"    #读每个文件
    zip_crc=zipfile.ZipFile(zip_name,'r').getinfo('data.txt').CRC
    #读crc
    print(zip_crc)
    for a in string:
        for b in string:
            for c in string:
                for d in string:
                    s=a+b+c+d
                    #进行爆破
                    if zip_crc == (binascii.crc32(s.encode())):
                        print(s)
                        crc_s+=s
print(crc_s)

将爆破得到的所有压缩包里的txt中的内容按照文件顺序放在一起
z5BzAAANAAAAAAAAAKo+egCAIwBJAAAAVAAAAAKGNKv+a2MdSR0zAwABAAAAQ01UCRUUy91BT5UkSNPoj5hFEVFBRvefHSBCfG0ruGnKnygsMyj8SBaZHxsYHY84LEZ24cXtZ01y3k1K1YJ0vpK9HwqUzb6u9z8igEr3dCCQLQAdAAAAHQAAAAJi0efVT2MdSR0wCAAgAAAAZmxhZy50eHQAsDRpZmZpeCB0aGUgZmlsZSBhbmQgZ2V0IHRoZSBmbGFnxD17AEAHAA==
BASE64解密发现文件头虽然没有但是文件尾是RAR的,而且里面好像有文件
image.png
保存文件用十六进制器打开,添加文件头

  • RAR 文件头 52 61 72 21 1A 07 00
  • RAR 文件尾 C4 3D 7B 00 40 07 00

image.pngimage.png
修改文件后缀,打开即可得到flag

84、从娃娃抓起

根据题目提示:两种不同的汉字编码分别代表了汉字信息化道路上的两座伟大里程碑。);再看题目给出的另外一个文件
0086 1562 2535 5174
bnhn s wwy vffg vffg rrhy fhnv
请将你得到的这句话转为md5提交,md5统一为32位小写。
提交格式:flag{md5}
所以可以得到:
0086 1562 2535 5174 中文电码
人 工 智 能
bnhn s wwy vffg vffg rrhy fhnv 五笔编码
也 要 从 娃 娃 抓 起
然后将这句话转换为MD5得到flag
image.png

85、zips

下载题目得到一个加密的压缩包,用ziperello爆破密码
image.png
解压之后又得到一个加密压缩包,先用zipcenop康康是不是伪加密
image.png
破解伪加密之后得到两个文件,flag.zip又是加密的,先看setup.sh文件,执行这段python代码
image.png
image.png
大致为此文件压缩为flag.zip 时用的bash脚本,压缩包密码为当前系统时间戳。因为使用的时间戳肯定是当时的时间戳,然后题目又是2019年的,估计前两位15ARCHPR掩码爆破flag.zip(知道密码中的一部分,只需按规则构造其余部分)构造时小数点后两位是因为python2的精度为小数点后两位
image.png
解压得到flag

86、(╯°□°)╯︵ ┻━┻

https://blog.csdn.net/mochu7777777/article/details/105324802
打开文件得到如下信息,最后一排的字符串像十六进制
image.png
字符串长度为134,两位为一组截取此字符串,再转换为十进制发现均大于128,都减去128后得到ASCII码转为字符即可,脚本如下:

str = 'd4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd'
flag = ''
for i in range(0, len(str), 2):
    flag += chr((int(str[i :i + 2], 16)) % 128)
print(flag)

87、girlfriend

解压得到一个音频文件,那就先用Audacity康康
image.png
像是老年机按键声,用dtmf拨号识别一下wav文件
image.png
999*666*88*2*777*33*6*999*4*4444*777*555*333*777*444*33*66*3*7777
以上数字就是老年机的按键
R-C.jpg
999 ——> y
88 ——> u
777 ——> r
6 ——> m
4 ——> g
777 ——> r
333 ——> f
444 ——> i
66 ——> n
7777 ——> s
666 ——> o
2 ——> a
33 ——> e
999 ——> y
4444 ——> i
555 ——> l
777 ——> r
33 ——> e
3 ——> d

88、[XMAN2018排位赛]通行证

下载题目得到一串字符串a2FuYmJyZ2doamx7emJfX19ffXZ0bGFsbg==
先进行base64解码kanbbrgghjl{zb____}vtlaln
大致能看出点东西了,但是感觉字母顺序不对,尝试栅栏密码,先开始一直尝试的解密无法得到可解字符串,就尝试栅栏加密,栏数为7时发现可解字符串kzna{blnl_abj_lbh_trg_vg}
因为是XMAN所以还需要将字符串进行移位key1 #13: xman{oyay_now_you_get_it}

89、[MRCTF2020]千层套路

下载题目,得到提示和加密压缩包image.png
提示和文件名有关先尝试用0573解压,又得到一个加密的压缩包,疯狂套娃了属于是。
题目又提示python好用,那就直接上大佬脚本

import zipfile
name = '0573'
while True:
    fz = zipfile.ZipFile(name + '.zip', 'r')
    fz.extractall(pwd=bytes(name, 'utf-8'))
    name = fz.filelist[0].filename[0:4]
    fz.close()
zipfile.ZipFile(file[, mode[, compression[, allowZip64]]])
# 创建一个ZipFile对象,表示一个zip文件
# 参数file表示文件的路径或类文件对象(file-like object)
# 参数mode指示打开zip文件的模式,默认值为'r',表示读已经存在的zip文件
# 也可以为'w'或'a','w'表示新建一个zip文档或覆盖一个已经存在的zip文档
# a'表示将数据附加到一个现存的zip文档中
# 参数compression表示在写zip文档时使用的压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。
# 如果要操作的zip文件大小超过2G,应该将allowZip64设置为True。
ZipFile.namelist() 
# 获取zip文档内所有文件的名称列表
fz.extractall
# 解压压缩包中的所有文件至指定文件夹

运行脚本后得到很多压缩包,最后报错发现一个qr.zip压缩包
image.png
解压得到一个qr.txt文本,文本里全是(255,255,255) (0,0,0)
image.png
RGB三通道将得到的数据绘制成图像,学习大佬脚本
https://www.osgeo.cn/pillow/reference/Image.html#PIL.Image.Image.paste

from PIL import Image

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

for width in range(0,x):
    for height in range(0,y):
        line = file.readline()
        rgb = line.replace('(','').replace(')','').split(',')
        img.putpixel((width,height),(int(rgb[0]),int(rgb[1]),int(rgb[2])))
img.save('flag.jpg')
Image.new(mode, size, color=0)
# mode:模式,通常用"RGB"这种模式
# size:生成的图像大小
# color:生成图像的颜色,默认为0,即黑色。
file.readline()
# 每次读取一行数据
img.putpixel(xy, value)
# 修改给定位置的像素
# xy:像素坐标,表示为(x,y)
# value:像素值
# 返回值:具有像素的图像。

扫描得到的二维码即可得到flag

90、百里挑一

下载得到一个流量包,用wireshark查看,先导出http对象到文件夹中,发现有很多图片
image.png
exiftool查找是否存在flag字段
https://www.rmnof.com/article/exiftool-introduction/
exiftool.exe *|grep flag找到一半flag
image.png
wireshark抓取和分析HTTP数据包
Wireshark抓包工具的使用
tcp.stream追踪数据包,在tcp流114中发现exif提示,搜索}得到后半flag
tcp.stream eq <>:显示某条TCP连接从建立到终结,回话双方生成的所有数据包
image.png
又或者在确定flag在exif中,在wireshark的filter中输入:tcp contains 45:78:69:66(exif的十六进制),找到带flag的两个数据包。

91、[UTCTF2020]file header

下载的图片发现打不开,于是用winhex查看,发现没有文件头
image.png
PNG的文件头为89 50 4E 47,修改后即可得到flag
image.png

92、[SUCTF2018]followme

下载得到流量包,wireshark打开,导出HTTP查看,似乎实在爆破登录密码
image.png
直接save all导出文件,搜索文件中的关键字findstr "SUCTF" login*
findstr字符串需要双引号!!
image.png

93、[MRCTF2020]CyberPunk

下载得到一个exe可执行文件,运行一下,发现每隔十秒显示一次当前时间,但是当2020.9.17时才会获得flag
image.png
修改电脑系统时间为2020.9.17再打开文件即可
image.png

94、[安洵杯 2019]Attack

下载得到一个流量包,用wireshark先查看是否存在含有flag字段的数据包
ip contains "flag"
image.png
追踪HTTP流,发现一个flag.txt文件
image.png
提取得到一个加密的压缩包
image.png
没有提示了,回去导出HTTP对象,发现一个lsass.dmp文件(内存运行的镜像)
image.png

Lsass.exe

https://www.poftut.com/what-is-windows-lsass-exe-local-security-authority-subsystem-service/
https://product.pconline.com.cn/itbk/software/dnyw/1704/9090764.html
lsass.exe是系统进程,用于本地安全认证服务器,她为winlogon服务的用户验证生成一个进程。如果身份验证成功,Lsass将生成用户的访问令牌,用于启动初始外壳程序。该用户启动的其他进程将继承这一令牌。

mimikatz

https://github.com/gentilkiwi/mimikatz/releases/
可以从lsass.exe中获取Windows处于active状态的账号明文密码
将lsass.dmp复制到mimikatz目录中,管理员运行x64的mimikatz.exe,执行一下命令

# 提升权限
privilege::debug
# 载入dmp文件
sekurlsa::minidump lsass.dmp
# 读取登陆密码
sekurlsa::logonpasswords full

得到用户密码,猜测是压缩包的密码,解压之后得到flag
image.png

95、[SUCTF 2019]Game

下载得到一张图片和一个压缩包,先解压压缩包,发现一个index.html文件,打开搜索flag字符串,发现一串base32数据
image.png
解压得到suctf{hAHaha_Fak3_F1ag}
image.png
还不是最后的flag,压缩包的信息应该获取到了,康康给出的图片,foremost提取,winhex都未发现东西,放进ste中康康。在0通道中发现base64数据
U2FsdGVkX1+zHjSBeYPtWQVSwXzcVFZLu6Qm0To/KeuHg8vKAxFrVQ==
image.png
但是直接base解码得到是乱码
image.png
但是解码的前几个字符Salted__,这个是通过openssl加密如果不带base64就会出现Salted字段打头。所以应该是AES或者DES加密,最后发现是3DES加密,密钥为之前压缩包里发现的suctf{hAHaha_Fak3_F1ag}
image.png

96、USB

下载题目得到一个压缩包和一个key.ftm文件,先查看ftm文件,发现存在ZIP
image.png
用foremost提取一波得到一个key.pcap流量包,发现是USB数据包,直接使用UsbKeyboardDataHacker脚本提取内容
image.png
UsbKeyboardDataHacker在windows环境下使用需要把 usb.data_len == 8 两边的单引号去掉才能正常运行
image.png
得到key{xinan}接着去看233.rar,提示文件头损坏
image.png
010查看一波,提示第三块有误,RAR结构有四个块:标记块、归档头部块、文件快、结束块,分析RAR文件结构,发现文件块的位置应该是74并不是7A,修改为74后保存
image.png
修改后即可正常解压,得到一张图片和flag.txt,Ste打开233.png在Blue plane 0 通道发现二维码
image.png
扫描后得到fa{i3eei_0llgvgn2_sc0}
维吉尼亚密码
image.png
栅栏密码
image.png

97、[GUET-CTF2019]虚假的压缩包

解压得到两个加密的压缩包
image.png
虚假的压缩包为伪加密,zipcenop一波
java -jar ZipCenOp.jar r xxx.zip
image.png
打开文本得到
image.png
RSA解密:n=33 e=3 c=26

import gmpy2
n = 33
e = 3
pi = 20
c = 26
d = gmpy2.invert(e,pi)
m = pow(c,d,n)
print(m) # 5

用得到的答案是5解密真实的压缩包,得到一张图片和记事本
image.png
用010打开图片,发现高度有问题
image.png
修改一下高度
image.png
得到异或5的操作
image.png
打开亦真亦假的文本发现一串字符串,怀疑与它进行逐字符串异或操作康康大佬的脚本

f1 = open('./disk','r')
xor_data = f1.read()
f1.close()
result = ""
for i in xor_data:
    tmp = int(i,16) ^ 5
    result += hex(tmp)[2:]
print(result)

发现异或后输出的为504B0304这不就是压缩包的文件头嘛
image.png
保存成压缩包格式

import base64

f1 = open('./disk','r')
xor_data = f1.read()
f1.close()
result = ""
for i in xor_data:
    tmp = int(i,16) ^ 5
    result += hex(tmp)[2:]
f2 = open('./flag.zip','wb')
f2.write(base64.b16decode(result.upper()))
# 使用base16字母将二进制字符串解码为正常形式
# upper() 方法将字符串中的小写字母转为大写字母
f2.close()

压缩包里面是这样的目录级,感觉是个Word文档
image.png
打开得到一段文字
image.png
全选改一下文字颜色,发现flag
image.png

98、[BSidesSF2019]zippy

下载得到流量包,用wireshark查看一波,发现基本是TCP
image.png
追踪一下TCP流,大致为压缩了密码为supercomplexpassword的flag.zip的压缩包
image.png
用foremost分离得到一个加密压缩包,密码为supercomplexpassword得到flag

99、[UTCTF2020]basic-forensics

下载得到一个打不开的JPEG图片,先直接用notepad++查看一波,搜索flag字符串,好家伙直接就找到了

image.png

100、[RCTF2019]draw

https://blog.csdn.net/mochu7777777/article/details/105369804
下载题目得到一个文本
image.png
LOGO语言:儿童学习计算机编程的一种语言,针对儿童而制作的编程语言
LOGO入门指南LOGO网站
将文本里的代码放入LOGO解释器即可得到flag
image.png