目录
技能展示
文章
日记
时间线
项目展示
分类
标签
Android Bash Burp C++ CS CTF DLL劫持 Docker Fastjson Fastjson2 FNV-1a FreeCMS FRP GetShell GitHub IPv6 Java JNDI John JS加密 JS逆向 K8s Kafka Kali lama-cleaner Linux mitmproxy MSF MySQL Nim Nmap NPS Office OID Payload Phar PHP phpMyAdmin POP链 PWN Pyinstaller Python RCE RSA Shellcode SNMP SQL注入 SSH SSRF Ubuntu USB Web Webshell Web安全 Windows XSS YAML Zookeeper 主机探测 代码审计 伪协议 免杀 内网 内网穿透 加密 加解密 参数 反序列化 反弹shell 命令 哈希碰撞 图像处理 域渗透 字符串逃逸 容器 密码学 密码破解 提权 数据库 文件上传 日志分析 未授权访问 权限维持 汇总 流量分析 消息队列 溯源 漏洞 漏洞分析 漏洞利用 端口扫描 编译 网络管理 资产探测 跨平台 运维 进程隐藏 逆向
目录
目录
869 字
4 分钟
easyusb
easyusb
0x00 题目
解压是一个pcapng文件,名字为easyUSB.pcapng
0x01 解题
这里的值是键盘键入的值,需要做的是将其提出来,然后通过密码本转换成相应的字符

使用wireshark的命令行版工具tshark进行分析流量包,通过下列命令:
1tshark -r .\easyUSB.pcapng -T fields -e usb.capdata2
3-r 指定流量包文件4-T 指定筛选的字段名称(可以通过右键进行复制字段名称)
复制到的结果是:usb.capdata
所以使用tshark进行筛选的时候使用的就是这个参数

然后通过脚本进行筛选数值
1#!/usr/bin/env python2
3import sys4import os5
6DataFileName = "usb.dat"7
8presses = []9
10normalKeys = {"04": "a", "05": "b", "06": "c", "07": "d", "08": "e", "09": "f", "0a": "g", "0b": "h", "0c": "i",11 "0d": "j", "0e": "k", "0f": "l", "10": "m", "11": "n", "12": "o", "13": "p", "14": "q", "15": "r",12 "16": "s", "17": "t", "18": "u", "19": "v", "1a": "w", "1b": "x", "1c": "y", "1d": "z", "1e": "1",13 "1f": "2", "20": "3", "21": "4", "22": "5", "23": "6", "24": "7", "25": "8", "26": "9", "27": "0",14 "28": "<RET>", "29": "<ESC>", "2a": "<DEL>", "2b": "\t", "2c": "<SPACE>", "2d": "-", "2e": "=", "2f": "[",15 "30": "]", "31": "\\", "32": "<NON>", "33": ";", "34": "'", "35": "<GA>", "36": ",", "37": ".", "38": "/",16 "39": "<CAP>", "3a": "<F1>", "3b": "<F2>", "3c": "<F3>", "3d": "<F4>", "3e": "<F5>", "3f": "<F6>",17 "40": "<F7>", "41": "<F8>", "42": "<F9>", "43": "<F10>", "44": "<F11>", "45": "<F12>"}18
19shiftKeys = {"04": "A", "05": "B", "06": "C", "07": "D", "08": "E", "09": "F", "0a": "G", "0b": "H", "0c": "I",20 "0d": "J", "0e": "K", "0f": "L", "10": "M", "11": "N", "12": "O", "13": "P", "14": "Q", "15": "R",21 "16": "S", "17": "T", "18": "U", "19": "V", "1a": "W", "1b": "X", "1c": "Y", "1d": "Z", "1e": "!",22 "1f": "@", "20": "#", "21": "$", "22": "%", "23": "^", "24": "&", "25": "*", "26": "(", "27": ")",23 "28": "<RET>", "29": "<ESC>", "2a": "<DEL>", "2b": "\t", "2c": "<SPACE>", "2d": "_", "2e": "+", "2f": "{",24 "30": "}", "31": "|", "32": "<NON>", "33": ":", "34": "\"", "35": "<GA>", "36": "<", "37": ">", "38": "?",25 "39": "<CAP>", "3a": "<F1>", "3b": "<F2>", "3c": "<F3>", "3d": "<F4>", "3e": "<F5>", "3f": "<F6>",26 "40": "<F7>", "41": "<F8>", "42": "<F9>", "43": "<F10>", "44": "<F11>", "45": "<F12>"}27
28
29def main():30 # check argv31 # if len(sys.argv) != 2:32 # print("Usage : ")33 # print(" python UsbKeyboardHacker.py data.pcap")34 # print("Tips : ")35 # print(" To use this python script , you must install the tshark first.")36 # print(" You can use `sudo apt-get install tshark` to install it")37 # print("Author : ")38 # print(" WangYihang <wangyihanger@gmail.com>")39 # print(" If you have any questions , please contact me by email.")40 # print(" Thank you for using.")41 # exit(1)42
43 # get argv44 # pcapFilePath = sys.argv[1]45 pcapFilePath = 'easyUSB.pcapng'46
47 # get data of pcap48 # os.system("tshark -r %s -T fields -e usbhid.data 'usb.data_len == 8' > %s" % (pcapFilePath, DataFileName))49 # os.system("tshark -r %s -T fields -e usbhid.data" % (pcapFilePath))50 os.system("tshark -r %s -T fields -e usb.capdata > %s" % (pcapFilePath, DataFileName))51
52 # read data53 with open(DataFileName, "r") as f:54 for line in f:55 presses.append(line[0:-1])56 # handle57 result = ""58 for press in presses:59 if press == '':60 continue61 if ':' in press:62 Bytes = press.split(":")63 else:64 Bytes = [press[i:i + 2] for i in range(0, len(press), 2)]65 if Bytes[0] == "00":66 if Bytes[2] != "00" and normalKeys.get(Bytes[2]):67 result += normalKeys[Bytes[2]]68 elif int(Bytes[0], 16) & 0b10 or int(Bytes[0], 16) & 0b100000: # shift key is pressed.69 if Bytes[2] != "00" and normalKeys.get(Bytes[2]):70 result += shiftKeys[Bytes[2]]71 else:72 print("[-] Unknow Key : %s" % (Bytes[0]))73 print("[+] Found : %s" % (result))74
75 # clean the temp data76 # os.system("rm ./%s" % (DataFileName))77
78
79if __name__ == "__main__":80 main()
得到加密脚本的脚本键入,格式化后输出

0x02 分析
本质上就是键盘键入的值在流量包中是固定格式的内容,在脚本中将4和5两个字符作为key进行匹配转换

0x03 问题
解出来的关键在于,是否判断大写字符,如果第1和第2两个字符不为00则就是用了shift键入,这时字母是大写,数字键是上标符号位,导致出现非预期

这里有输入!,导致如果未判断shift键入,就会输出11,而真实结果应该是!!

有两个字典,一个小写,一个大写

不周到的判断,只是用了一个字典

正确的结果

部分信息可能已经过时
目录
技能展示
文章
日记
时间线
项目展示
分类
标签
Android Bash Burp C++ CS CTF DLL劫持 Docker Fastjson Fastjson2 FNV-1a FreeCMS FRP GetShell GitHub IPv6 Java JNDI John JS加密 JS逆向 K8s Kafka Kali lama-cleaner Linux mitmproxy MSF MySQL Nim Nmap NPS Office OID Payload Phar PHP phpMyAdmin POP链 PWN Pyinstaller Python RCE RSA Shellcode SNMP SQL注入 SSH SSRF Ubuntu USB Web Webshell Web安全 Windows XSS YAML Zookeeper 主机探测 代码审计 伪协议 免杀 内网 内网穿透 加密 加解密 参数 反序列化 反弹shell 命令 哈希碰撞 图像处理 域渗透 字符串逃逸 容器 密码学 密码破解 提权 数据库 文件上传 日志分析 未授权访问 权限维持 汇总 流量分析 消息队列 溯源 漏洞 漏洞分析 漏洞利用 端口扫描 编译 网络管理 资产探测 跨平台 运维 进程隐藏 逆向
目录