在openWrt上使用freeradius进行4次握手失败?

时间:2017-07-25 04:03:33

标签: openwrt freeradius

我在freeradius-server上使用openWrt来获取SIMI IMSI。因为我确实有一些sim值(rand,sres,kc),我改变了源代码使用假值。它可以成功验证。但是在4次握手的过程中,失败了!它只有一次握手。

我使用wireshark捕获了一些包,任何人都可以帮我分析原因或者有更好的方法来获取im openWrt

eap-sim认证过程

eap-sim authenticate process

握手1 of 4

handshake 1 of 4

1 个答案:

答案 0 :(得分:1)

我找到了原因! 在开始时,我没有sim值(RAND,sres,kc),所以我创造了一些假值。代码需要正确的 msk 值来构建PMK包,如下所示:

static int eap_sim_sendsuccess(EAP_HANDLER *handler)
{
    unsigned char *p;
    struct eap_sim_server_state *ess;
    VALUE_PAIR **outvps;
    VALUE_PAIR *newvp;

    /* outvps is the data to the client. */
    outvps= &handler->request->reply->vps;
    ess = (struct eap_sim_server_state *)handler->opaque;

    /* set the EAP_ID - new value */
    newvp = paircreate(ATTRIBUTE_EAP_ID, PW_TYPE_INTEGER);
    newvp->vp_integer = ess->sim_id++;
    pairreplace(outvps, newvp);

    p = ess->keys.msk;   //**look here**!
    add_reply(outvps, "MS-MPPE-Recv-Key", p, EAPTLS_MPPE_KEY_LEN);
    p += EAPTLS_MPPE_KEY_LEN;
    add_reply(outvps, "MS-MPPE-Send-Key", p, EAPTLS_MPPE_KEY_LEN);
    return 1;
}

所以,它构建了一个错误的PMK包。手机接到了1/4的握手并将其扯下来。