linux支持peap代码,linux - 在EAP-PEAP身份验证下从WiFi客户端中提取PMK,以在Wireshark上进行分析 - 堆栈内存溢出...

我发现了让wpa_supplicant输出PMK的两种方法:

简单方法:使用-K选项以及一些调试选项(例如-dd )调用wpa_supplicant 。 这将在调试输出中包括键(密码等)。

困难的方法:更改wpa_supplicant的代码以输出密钥。 鉴于存在-K选项,这种方式不必要地困难,但这是我尝试的第一件事(不要问)。 我在下面总结了如何进行此操作,这对于希望更改wpa_supplicant代码的人来说可能很有趣。

2)困难的方法:更改wpa_supplicant代码

我可以通过更改wpa_supplicant的代码来找到答案,使其在身份验证期间输出PMK。 在我的情况下,客户端设备是运行Raspbian GNU / Linux 7(wheezy)的Raspberry Pi模型B +,V1 2,它使用的是wpa_supplicant的旧版本,即v1.0,2012-05-10 。

对于任何想知道的人,我都更改了源文件src/rsn_supp/wpa.c ,函数wpa_supplicant_key_neg_complete() ,以输出PMK,如下所示:

static void wpa_supplicant_key_neg_complete(struct wpa_sm *sm,

const u8 *addr, int secure)

{

// pass the pmk (pairwise master key) to a hex string.

int i;

// hex str to hold pmk. 1024 bit

// should be enough (the pmk is supposed to be 256 bit, thus 32 byte, thus

// 64 hex chars)

char pmk_str[1024] = {'\0'};

char * pmk_ptr = pmk_str;

// use os_snprintf() (as used by other methods in wpa.c)

for (i = 0; i < sm->pmk_len; i++) {

// wpa_msg(sm->ctx->msg_ctx, MSG_INFO,

// "WPA: pmk[%d]: %02X", i, sm->pmk[i]);

pmk_ptr += sprintf(pmk_ptr, "%02X", sm->pmk[i]);

}

*(pmk_ptr + 1) = '\0';

wpa_msg(sm->ctx->msg_ctx, MSG_INFO,

"WPA: Key negotiation completed with "MACSTR": \

\n\tPMK=%s \

\n\t[PTK=%s GTK=%s]",

MAC2STR(addr),

pmk_str,

wpa_cipher_txt(sm->pairwise_cipher),

wpa_cipher_txt(sm->group_cipher));

(...)

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值