电子取证新视角:USB键盘流量提取密码方法研究与实现
本文最后更新于106 天前,其中的信息可能已经过时。

0x01 引言

在当今数字化时代,USB设备的广泛使用使得信息安全和电子取证领域面临着新的挑战与机遇。特别是USB键盘,作为一种常见的输入设备,其流量中可能包含用户输入的敏感信息,如密码和其他私人数据。因此,研究USB键盘流量提取密码的方法,不仅具有重要的学术意义,更在实际的取证工作中具有重要的应用价值。

首先,USB键盘通过USB接口与计算机连接,可以实时传输用户的输入信息。每当用户在键盘上输入字符时,这些信息都会以数字信号的形式被传输到计算机。通过捕获这些USB流量,我们可以重构用户的输入数据,进而提取出密码等敏感信息。

在具体实现过程中,我们可以使用如wireshark、tcpdump等工具采集USB流量。通过对捕获数据进行解析,我们可以提取出每个输入的字符,形成用户的输入记录。结合时间戳和上下文信息,可以准确还原用户在特定时刻所输入的密码。这一过程涉及到数据包的捕获、解码和分析,要求具备一定的计算机网络和数据处理能力。

然而,在进行USB键盘流量提取时,也需注意法律和伦理问题。电子取证工作必须在合法的范围内进行,确保不侵犯用户隐私。相关的提取和分析工作应当遵循相应的法规和政策,以确保取证过程的合法性和有效性。

0x02 实现过程

基础知识

USB协议数据部分在Leftover Capture Data域中,数据长度为八个字节。其中键盘击键信息集中在第三个字节中。

键位映射关系参考:《USB键盘协议中键码》中的HID Usage ID

如图,发现击键信息为0x06,即对应的按键为C

CTF题型

安全评测人员在对某银行卡密码输入系统进行渗透测试,截获了一段通过USB键盘输入6位数字密码的流量,其中也包含了一些其他无关的USB设备的流量,你能从中恢复出6位数字密码吗?最终提交的flag格式为flag。

使用kali的tshark命令把cap data提取出来:

tshark -r usb.pcap -T fields -e usb.capdata > usbdata.txt
tshark -r usb.pcap -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt #提取并去除空行

提取出来的数据可能会带冒号,也可能不带(有可能和wireshark的版本相关),但是一般的脚本都会按照有冒号的数据来识别

有冒号时提取数据的[6:8]
无冒号时数据在[4:6]

可以用脚本来加上冒号

# -*- coding: utf-8 -*-
f=open('usbdata.txt','r')
fi=open('out.txt','w')
while 1:
    a=f.readline().strip()
    if a:
        if len(a)==16: # 鼠标流量的话len改为8
            out=''
            for i in range(0,len(a),2):
                if i+2 != len(a):
                    out+=a[i]+a[i+1]+":"
                else:
                    out+=a[i]+a[i+1]
            fi.write(out)
            fi.write('\n')
    else:
        break

fi.close()

再用一个python脚本来提取鼠标移动坐标:

mappings = { 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:"'", 0x36:",",  0x37:"." }

nums = []
keys = open('out.txt')
for line in keys:
    if line[0]!='0' or line[1]!='0' or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0':
         continue
    nums.append(int(line[6:8],16))

keys.close()

output = ""
for n in nums:
    if n == 0 :
        continue
    if n in mappings:
        output += mappings[n]
    else:
        output += '[unknown]'

print 'output :\n' + output

BCFGIJGFEDCABACFEDCA7200[DEL]53[DEL]93
因为[DEL]是删除键,恢复出6位数字。所以flag: 720593

0x03 小结

本次总结了USB流量包的流量分析,对键盘流量有了简单的了解。

参考文章:

https://blog.csdn.net/qq_43625917/article/details/107723635

觉得有帮助可以投喂下博主哦~感谢!
作者:明弟有理想
版权声明: 本站所有文章,如无特殊说明或标注,均为本站原创发布。转载请注明文章地址及作者。
如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
文章声明:
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任,本人坚决反对利用文章内容进行恶意攻击行为,推荐大家在了解技术原理的前提下,更好的维护个人信息安全、企业安全、国家安全,本文内容未隐讳任何个人、群体、公司。请注意,本文并非文学作品,请勿过度理解。请大家自觉遵守《网络安全法》,感谢您的理解与支持!
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇