GDOUCTF2023-misc方向WP

misc_or_crypto?

bmp里面是RSA的私钥和加密密文,在线直接解一下
image-20230421124808212

Hidden In Plain Sight

图片数据里提示了exiftool,看一下前两个图片exif信息,很明显AttributionName拼接是flag值

image-20230421123139159

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mk03O1kH-1682052296988)(https://c.img.dasctf.com/images/2023421/1682051520212-782d0af8-402b-4aa3-bc73-4bff4a5155f1.png)]

由于默认读取是以字符串大小顺序读取的,需要以文件名数字大小读取

image-20230421123428863

linux下:
exiftool -AttributionName -b -ext png $(ls -v *.png) > flag.txt
ls -1v *.png | xargs exiftool -AttributionName -b > flag.txt
windows下:
dir /b /on *.png | xargs exiftool -AttributionName -b > flag.txt

ls -1vdir /b /on 部分会将当前目录下的 .png 文件按照文件名中的数字大小顺序进行排序,并作为参数传递给 exiftool-b 参数表示以二进制方式输出 Attribution Name 的内容,将其写入 flag.txt 文件中。

得到flag

一开始以为还有一步flag在有6b88805329********************78这串16进制的图片里(

谁家flag这么奇怪啊!!

image-20230421124838510

Matryoshka

压缩包套娃,每个password里是英文的算式,结果是同级压缩包的密码

image-20230416201131475
一个坑,结果如果为负要取绝对值
简单写个脚本跑一下即可:

  • 建议自己写的时候加上个打印的操作监视运行过程
import re
import os
import zipfile


# 定义数字与字符的对应关系
char_to_digit = {
    'zero': '0',
    'one': '1',
    'two': '2',
    'three': '3',
    'four': '4',
    'five': '5',
    'six': '6',
    'seven': '7',
    'eight': '8',
    'nine': '9',
    'plus':'+',
    'times':'*',
    'minus':'-',
    'mod':'%'
}

def change(string):# 将字符串中的单词转换为数字
    expression = string
    for char, digit in char_to_digit.items():
        expression = expression.replace(char, digit)
    # 分离出操作数和运算符
    tokens = re.findall(r'\d+|[+*]|[-]|[%]', expression)
    print(tokens)
    # 从左到右依次计算
    result = int(tokens[0])
    for i in range(1, len(tokens), 2):
        operator = tokens[i]
        operand = int(tokens[i+1])
        if operator == '+':
            result += operand
        elif operator == '*':
            result *= operand
        elif operator == '-':
            result -= operand
        elif operator == '%':
            result %= operand
    result=abs(result)
    return str(result)


# 压缩包的总层数
num_layers = 10

# 构造密码字典,键为层数,值为对应层的密码
passwords = {}
passwords[num_layers] = 'password1000.txt' # 最外层的压缩包的密码已知
for i in range(num_layers - 1, 0, -1):
    password_filename = 'password{}.txt'.format(i + 1)
    passwords[i] = password_filename

def extract_all(name, level):
    password_file = os.path.join(os.path.dirname(name), "password" + str(level) + ".txt")
    password = open(password_file).read().strip()
    # print(password)
    password = change(password)
    # print(password)
    print(f"正在解压{name},使用的密码为:{password}")


    with zipfile.ZipFile(name) as zf:
        try:
            zf.extractall(pwd=password.encode())
        except:
            print(f"解压{name}失败,密码错误")
            return
        else:
            print(f"{name}解压成功")

        namelist = zf.namelist()
        for item in namelist:
            if item.endswith(".zip"):
                extract_all(item, level-1)

extract_all("Matryoshka1000.zip", 1000)



pixelart

文件尾有个大小的提示

image-20230416201537007

把图片放大后可以看到有隐藏的像素点,根据文件尾的提示,每12个像素提取一次即可

image-20230416201607176

from PIL import Image

im = Image.open('arcaea.png')
pix = im.load()
width = im.size[0]
height = im.size[1]
# 新图像的宽度和高度(每12个像素生成一个新像素)
new_width = width // 12
new_height = height // 12

# 创建一个新的图像对象
new_img = Image.new("RGB", (new_width, new_height))
for x in range(0,width,12):
    for y in range(0,height,12):
        rgb=pix[x, y]
        new_img.putpixel((x//12,y//12),(int(rgb[0]),int(rgb[1]),int(rgb[2])))
new_img.save('new_image.png')
        

得到fakeflag

image-20230416201707803

zsteg

image-20230416201741944

getnopwd

store,pcapng,一眼明文攻击

image-20230416201815321

echo -n "00004D3C2B1A01000000FFFFFFFFFFFFFFFF" | xxd -r -ps > pcap_plain1

image-20230416201920044

DO_NO_BE_MISDIRECTED是个docx文件,少了个文件头,随便找个docx文件头复制过来修一下

啥也不是

image-20230416202042538

流量包是wacom的数位板流量

image-20230416202132932

tshark提取一下

tshark -r keyboard.pcapng -T fields -e usbhid.data | sed '/^\s*$/d' > usbdata.txt

数位板流量的分析可以参考一下zys的博客数位板流量分析探索 - zysgmzb - 博客园 (cnblogs.com)

image-20230416202701975

当然可能由于版本的不同,直接套用脚本是不太行的

这里观察一下usb的数据可以发现,主要改变的数据是第5-12位,猜测5-8对应x,9-12对应y

image-20230416202612816

import os
import matplotlib.pyplot as plt
data=[]
lines=[]
line=[]
with open('usbdata.txt',"r") as f:
    for i in f.readlines():
        if i!='\n':
              lines.append(i.strip('\n'))
X = []
Y = []
for i in lines:
        # print(i)
        x0=int(i[4:6],16)
        x1=int(i[6:8],16)
        x=x0+x1*256
        y0=int(i[8:10],16)
        y1=int(i[10:12],16)
        y=y0+y1*256
        X.append(x)
        Y.append(-y)
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_title("result")
ax1.scatter(X, Y, c='b', marker='o')
plt.show()

image-20230416203037674

有些冗余数据,要清理一下,由于没找到具体的开发文档,就手动多次尝试后发现前四位为02f1是所需数据

import os
import matplotlib.pyplot as plt
data=[]
lines=[]
line=[]
with open('usbdata.txt',"r") as f:
    for i in f.readlines():
        if i!='\n':
              lines.append(i.strip('\n'))

for i in lines:
        if i[0:4] =="02f1":
                data.append(i)
print(data)
X = []
Y = []
for i in data:
        # print(i)
        x0=int(i[4:6],16)
        x1=int(i[6:8],16)
        x=x0+x1*256
        y0=int(i[8:10],16)
        y1=int(i[10:12],16)
        y=y0+y1*256
        X.append(x)
        Y.append(-y)
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_title("result")
ax1.scatter(X, Y, c='b', marker='o')
plt.show()

image-20230416203328875

t3stify

根据提示

image-20230416203433640

audacity分别将左右声道分离出来后根据音量差得到新的wav文件(原始数据)

  • [::-1]是因为wav是little-endian格式
  • [:2]切片是因为用audacity提取的单声道对应的另一个声道的数据为0x00
  • 由于计算的是wav的原始数据差,wav文件头需要去掉
fl = open('l', 'rb')
fr = open('r', 'rb')
len = 31163904//4
data = []
for i in range(len):
    ll = fl.read(4)[:2][::-1]
    rr = fr.read(4)[2:][::-1]
    if ll !=b'':
        numl = int(bytes.hex(ll), 16)
        numr = int(bytes.hex(rr), 16)
        print(numl-numr)
        data.append(abs(numl-numr))

with open('all', 'wb') as f:
    for j in data:
        f.write(bytes.fromhex(hex(j)[2:].zfill(4))[::-1])
    f.close()

原始数据导入audacity

image-20230416204139860

中间可以找到一段摩斯,解得ARCAEA1F1E33

image-20230416204203015

作为deepsound的key

image-20230416204314689

Ez Forensics

image-20230416204406542

mysql的数据库文件被分别打包在四个压缩包里了,提取压缩包的过程就不讲了,拿取证软件直接一把梭,或者diskgenius挂载一下,文件系统硬翻或者搜就好了,其中3.zip被删除了,但可以在mysql.exe(是个zip)里面找到

而后根据mysql的数据库文件格式frm,MYD,MYI,opt,用file命令对比一下

image-20230416204721115

可以看出后缀.1是frm文件,.2是MYD文件,.3是MYI文件,只要将后缀更改之后,放到软件里即可正确识别mysql表,我这里用火眼自带的数据库分析软件,用DB Browser for SQLite或者navicat也完全可以的

最长列名

image-20230416204932928

版本和字符集,字符集要改成UTF-8

件搜就好了,其中3.zip被删除了,但可以在mysql.exe(是个zip)里面找到

而后根据mysql的数据库文件格式frm,MYD,MYI,opt,用file命令对比一下

image-20230416204721115

可以看出后缀.1是frm文件,.2是MYD文件,.3是MYI文件,只要将后缀更改之后,放到软件里即可正确识别mysql表,我这里用火眼自带的数据库分析软件

最长列名

image-20230416204932928

版本和字符集,字符集要改成UTF-8

image-20230416204954082

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: kbd-misc-2.5.1是一个Linux操作系统下的键盘输入处理工具包,它包含了一些常用的工具和驱动程序,如loadkeys、dumpkeys、kbd_mode等。这些工具可以帮助用户配置和管理Linux系统下的键盘输入设备,包括设置键盘映射、键盘布局、键盘模式等。同时,kbd-misc-2.5.1还提供了一些驱动程序,如atkbd、ps2mouse等,用于支持各种类型的键盘和鼠标设备。kbd-misc-2.5.1是一个开源项目,它的源代码可以在GitHub上免费获取和更新,支持多种Linux发行版和硬件平台。 ### 回答2: kbd-misc-2.5.1 是一个开源软件包,其中包含了一些与键盘和输入设备有关的工具和驱动程序。这个软件包是在Linux内核中使用的,并提供了一些用于处理和管理键盘和输入设备的功能。 kbd-misc-2.5.1 软件包中的一些主要功能包括: 1. 键盘驱动程序:这个软件包提供了一些用于驱动各种类型的键盘的驱动程序。这些驱动程序允许操作系统与键盘进行通信,接收来自键盘的输入,并将其发送给应用程序。 2. 控制台工具:kbd-misc-2.5.1 还包含了一些用于控制台显示的工具。这些工具可以配置控制台的字体、颜色和布局等属性,提供了一些命令行工具来管理控制台的显示内容。 3. 输入法支持:该软件包还提供了对输入法的支持。它包含了一些输入法引擎和库文件,可以将输入法的功能集成到系统中,并提供输入法切换和输入法配置等功能。 4. 键盘映射:kbd-misc-2.5.1 还提供了一些工具和配置文件,用于定义键盘的映射规则。这允许用户自定义键盘的按键功能,以满足个人偏好或特定需求。 总之,kbd-misc-2.5.1 是一个用于处理和管理键盘和输入设备的开源软件包。它提供了一些驱动程序、工具和配置文件,允许用户自定义键盘和控制台的设置,并提供输入法支持和键盘映射功能。 ### 回答3: kbd-misc-2.5.1 是一个用于 Linux 操作系统的桌面键盘和控制台控制工具集。 kbd-misc-2.5.1 提供了一系列实用程序和工具,用于访问和管理 Linux 系统中的键盘和控制台。其中包括一些用于控制键盘布局和映射的工具,以及一些用于处理键盘输入的实用程序。这些工具可以帮助用户在 Linux 系统中调整和定制键盘的功能和行为。 kbd-misc-2.5.1 还包含一些用于控制台中显示的字符和图形的程序。这些程序可以提供更丰富的字符和图形显示效果,使控制台界面更加美观和易于使用。 该工具集还提供了一些用于处理输入事件和生成键盘事件的库和驱动程序。这些库和驱动程序可以与操作系统内核进行交互,以实现键盘输入的捕获和处理。 总的来说,kbd-misc-2.5.1 是一个功能丰富的工具集,用于在 Linux 系统中控制和定制键盘和控制台的功能和行为。它提供了一些实用程序、工具、库和驱动程序,帮助用户充分利用键盘和控制台的功能,提高系统的易用性和个性化定制能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值