EAP-MD5計算方法


一、說明

領導要求確認設備進行802.1X認證時,是否直接將用戶名密碼明文傳給交換機。配好端口鏡像、搭好Radius環境后進行了抓包分析。

 

二、計算

2.1 802.1X認證過程

完整流程如下:

客戶端與交換機間的數據截獲如下,5個數據與上圖描述一致:

 

 

2.2 分析場景復現

配置的用戶名密碼為test/123456,在客戶端發往交換機----Nearest MAC地址01:80:c2:00:00:03,該地址為保留地址,目的地址該地址表示發送二層廣播包-----的第二和第四個包中發現了用戶名,但未發現密碼。

參考網上資料也說密碼是加密的,下邊第二張圖中的EAP-MD5 Value字段的值“51224bd42783bf78e1a5093474122801”即是加密后的密碼。

 

2.3 密碼計算

到這已經算完成了領導給的任務:設備將用戶名明文傳給交換機,密碼加密后傳給交換機。

但處理問題需要追根究底:密碼加密傳輸到底是怎么個加密法?你確定嗎?你能自己把密碼重新計算出來嗎?

網上資料來看密碼都是經過如下計算:

R = MD5(id||P||C)

“||”是直接拼接在后面的意思,但大多資料都沒說清這幾個值以什么類型拼接,自己計算時一直算不對,在此總結一下:

id----第三個數據包中的id字段值,以一字節長度整型拼接

P----密碼,以ASCII碼形式拼接

C----第三個數據包中返回的MD5值,bin十六進制形式。

從上圖可以看到交換機返回的id為4,MD5挑戰值為"9ec74cf5cbaa27781b1c6203766430fe"。而另外在Radius設置的密碼為123456

編寫以下代碼進行計算:

import hashlib
import binascii

# 我這里交換機返回的id為4,注意是整型
id = 4
# 我這里密碼是123456
password = "123456"
# 我這里交換機返回的md5鹽值是"9ec74cf5cbaa27781b1c6203766430fe"
challenge = "9ec74cf5cbaa27781b1c6203766430fe"

# 將id轉為一字節長度整型
id = id.to_bytes(1,"big")
# 將password進行編碼
password = password.encode("ASCII")
# 將challenge改成bin十六進制
challenge = binascii.a2b_hex(challenge)
# 拼接
con_value = id + password + challenge

# 計算。R = MD5(id||P||C)
md5_value = hashlib.md5(con_value).hexdigest()
pass

計算結果如下,得到的密碼串為“51224bd42783bf78e1a5093474122801”,與2.2圖二中的密碼串一致。

 

參考:

https://hal.inria.fr/hal-01534313/document

https://www.jianshu.com/p/b8b2b1b75207

https://www.huawei.com/ilink/en/download/HW_311147?Addr=


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM