题目链接: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而且居然有录制视频会议解答,真的很贴心,点赞!