use*_*280 3 python encryption wireless wireshark wpa
我试图为WPA握手数据包计算MIC,但不幸的是,它失败了。更确切地说,我采用了802.1x数据包(如规范所述)。
MIC = HMAC_MD5(MIC Key, 16, 802.1x data)
Run Code Online (Sandbox Code Playgroud)
这是相关的代码:
mic = hmac.new(ptk[0:16],data)
print "mic: " + mic.hexdigest() + "\n"
Run Code Online (Sandbox Code Playgroud)
从hmac库获取hmac.new的位置:
import hmac,hashlib,binascii
Run Code Online (Sandbox Code Playgroud)
显然,用于加密的密钥包括成对的Transcient密钥的前16个字节(即所谓的密钥确认密钥)。PTK由名为cowPatty的程序确认。因此,我可以排除这两个因素是错误的。这是我的802.1x数据,由十六进制值0103引入:
01030077fe010a001000000000000000
01ae11df37f5fb100665ce0c849f5950
c0e7901da3224ddfc9e9434babad5512
73000000000000000000000000000000
00000000000000000000000000000000
00e8b4b90bfc3fd97b657afeb66262ae
940018dd160050f20101000050f20201
000050f20401000050f202
Run Code Online (Sandbox Code Playgroud)
Wireshark计算的MIC为:
e8b4b90bfc3fd97b657afeb66262ae94
Run Code Online (Sandbox Code Playgroud)
我计算的MIC为:
5492624bb538b52d6aa6261c692bd595
Run Code Online (Sandbox Code Playgroud)
不幸的是,我做什么都不重要,我永远无法计算相同的MIC。也许有些专家提供了宝贵的意见,我们将不胜感激!
最好的祝福!
这是来自第二条消息的EAPOL数据(在逻辑链接控件之后立即开始),采用四向握手方式:
unsigned char eapol[] =
{
'\x01', // Version
'\x03', // Type
'\x00','\x77', // Length
'\xfe', // Key Descriptor Type
'\x01','\x0a', // Key information
'\x00','\x10', // Key length
// Replay counter
'\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x01',
// WPA Key Nounce
'\x77','\xd6','\x54','\xad','\x0c','\x1f','\xea','\x2f',
'\x20','\x99','\xf1','\xdd','\x1c','\xae','\xdb','\xd8',
'\xf7','\xe8','\x86','\xb0','\x81','\x60','\xed','\x7f',
'\x70','\xdd','\xbb','\x33','\xb6','\xf1','\xd9','\x98',
// Key IV
'\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
'\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
// Key RSC
'\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
// Key ID
'\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
// MIC **************** CHANGE HERE ********************
// '\x0a','\x62','\x24','\x07','\x11','\x36','\xd5','\x67',
// '\x87','\xc0','\x7b','\x82','\x6b','\x06','\xf7','\xff',
'\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
'\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00',
// Key Data Length
'\x00','\x18',
// Key Data
'\xdd','\x16','\x00','\x50','\xf2','\x01','\x01','\x00',
'\x00','\x50','\xf2','\x04','\x01','\x00','\x00','\x50',
'\xf2','\x04','\x01','\x00','\x00','\x50','\xf2','\x02'
};
Run Code Online (Sandbox Code Playgroud)
确保将MIC字段的16个字节替换为“ \ x00”,并且已经准备好根据Michael算法计算出有效的EAPOL数据。
另外,请确保您使用的是基于WPA版本的正确算法。WPA1使用带有MD5哈希函数的HMAC,WPA2使用带有SHA1哈希的HMAC,如在aircrack-ng源代码中所看到的:
if (ap->wpa.keyver == 1)
HMAC(EVP_md5(), ptk[j], 16, ap->wpa.eapol, ap->wpa.eapol_size, mic[j], NULL);
else
HMAC(EVP_sha1(), ptk[j], 16, ap->wpa.eapol, ap->wpa.eapol_size, mic[j], NULL);
Run Code Online (Sandbox Code Playgroud)
我认为python在HMAC对象中默认使用MD5。
| 归档时间: |
|
| 查看次数: |
3097 次 |
| 最近记录: |