NepCTF 2022 MISC <签到题>(极限套娃)

题目链接:CTFm

这道题融合了图片隐写、py脚本编写和usb流量分析

下载题目附件,是个gz压缩包,无加密直接打开,里面是一张图片


图片长这样

盲猜图片隐写,打开虚拟机使用binwalk工具康康,确实有多文件包含,binwalk -e xxx.jpg

进行文件分离。得到如下文件。

         这里“极限套娃”的面目显露出来了,zip里再次嵌套了zip,一直套了老多层,不慌,写个脚本给它全解压了

exp.py

import os
import zipfile

dir = "D:\\迅雷下载\\新\\"

n = 0
s2 = ""


def jieya():
    i = 232
    for x in range(10000):
        print(i)
        zpf = zipfile.ZipFile(dir + str(i) + ".zip")
        list = zpf.namelist()  # 得到压缩包里所有文件
        for f in list:
            zpf.extract(f, dir)  # 循环解压文件到指定目录,密码
        print(str(i) + "解压成功" )
        i = i - 1

jieya()

 路径和i自己看着改改

        全解压完了,几百个zip不用全看,只要看套娃的最后一层,也就是最后解压的zip就行,打开1.zip里边一个pcap,好家伙流量分析也整上了。

        使用wireshark看看是什么类型的流量,确定是键盘流量后(其实看文件名就知道了keyboard就是键盘)再使用tshark(kali自带工具)进行流量分析

 tshark -r keyboard.pcap -T fields -e usbhid.data > 1.txt

usb流量分析指令如上

得到1.txt

文本有许多空行和干扰项,我们先使用正则过滤一下

 

“^$”是空行 其余是干扰项,过滤后的键盘流量十分清晰

接下来要科普一下键盘流量的构成:

键盘流量

键盘数据包的数据长度为8个字节,击键信息集中在第3个字节

BYTE1 --
       |--bit0:   Left Control是否按下,按下为1 
       |--bit1:   Left Shift  是否按下,按下为1 
       |--bit2:   Left Alt    是否按下,按下为1 
       |--bit3:   Left GUI    是否按下,按下为1 
       |--bit4:   Right Control是否按下,按下为1  
       |--bit5:   Right Shift 是否按下,按下为1 
       |--bit6:   Right Alt   是否按下,按下为1 
       |--bit7:   Right GUI   是否按下,按下为1 
BYTE2 -- 暂不清楚,有的地方说是保留位
BYTE3--BYTE8 -- 这六个为普通按键

例如:
键盘发送 02 00 0e 00 00 00 00 00,
表示同时按下了Left Shift + ‘k’,即大写K。

以上资料来源链接:https://www.jianshu.com/p/92064f2e9dcb

查阅资料可以知道

0x04:"A",  0x05:"B",  0x06:"C", 0x07:"D",
0x08:"E", 0x09:"F", 0x0A:"G",  0x0B:"H", 
0x0C:"I",  0x0D:"J", 0x0E:"K", 0x0F:"L", 
0x10:"M", 0x11:"N",0x12:"O",  0x13:"P", 
0x14:"Q", 0x15:"R", 0x16:"S", 0x17:"T", 
0x18:"U",0x19:"V", 0x1A:"W", 0x1B:"X", 
0x1C:"Y", 0x1D:"Z", 0x1E:"1", 0x1F:"2", 
0x20:"3", 0x21:"4", 0x22:"5",  0x23:"6", 
0x24:"7", 0x25:"8", 0x26:"9", 0x27:"0", 
0x28:"\n", 0x2a:"[DEL]",  0X2B:"    ", 0x2C:" ", 
0x2D:"-", 0x2E:"=", 0x2F:"[",  0x30:"]", 
0x31:"\\", 0x32:"~", 0x33:";",  0x34:"'", 
0x35:"<GA>",0x36:",",0x37:".",0x38:"/",
0x39:"<CAP>",0x3a:"<F1>",0x3b:"<F2>", 0x3c:"<F3>",
0x3d:"<F4>",0x3e:"<F5>",0x3f:"<F6>",0x40:"<F7>",
0x41:"<F8>",0x42:"<F9>",0x43:"<F10>",0x44:"<F11>",
0x45:"<F12>"

除了基本字母的键位对应以外,要注意的就是

第一个字节为’02‘时为左shift键,为’20‘时为右shift键

第三个字节为’2a’时为<DEL>键,删除单个字母

第三个字节为'39'时为<CAPS>键,大小写转换(这个转换对于之后输入的字母也同理)

本来想从网上借助师傅们的脚本来解的,奈何不适配,自己调也觉得麻烦,索性自己一个一个按表对照过去,好在量并不大,这项工作得以轻松完成

即便是过滤后的文本中也是存在着相当的干扰项,不过还是catch the flag了!

小结:

这道题融合了图片隐写、py脚本编写和usb流量分析等考点,难度不高,适合签到。

ps:感谢nepctf主办方举办的比赛,不仅做了wp而且居然有录制视频会议解答,真的很贴心,点赞!

 

 


版权声明:本文为GSflyy原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。