iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0
Security

網路安全基礎概念與實作系列 第 11

Day 11: 模擬彩虹表攻擊

  • 分享至 

  • xImage
  •  

昨天學了五種不同的密碼攻擊手法,今天我想要更加深入了解彩虹表攻擊,透過實作來更直觀了解彩虹表攻擊的運作原理。彩虹表攻擊依靠預先計算出的雜湊值,當攻擊者獲得一個系統的密碼雜湊值後,他們可以通過彩虹表迅速查找出明文密碼,而不必即時重新計算雜湊。透過 Python 來模擬彩虹表攻擊,使用一個簡單的字典來存儲密碼和它們的雜湊值,並嘗試進行配對。

步驟:

  1. 將常用密碼轉成雜湊值,生成彩虹表。
  2. 固定雜湊值,利用生成的彩虹表來進行攻擊測試。

過程:

需要有 hashlib 才能生成雜湊值,但這個模組是 Python 內建,因此不需要額外安裝。

import hashlib

password_list = ['admin', '123456', 'a123456', '12345678', '1qaz2wsx']# 列出常見的密碼列表

rainbow_table = {}# 建立彩虹表 (密碼 -> 雜湊值)

for password in password_list:# 生成雜湊值並儲存在彩虹表中
    hash_value = hashlib.md5(password.encode()).hexdigest()  # 用 MD5 算法算出雜湊值
    rainbow_table[hash_value] = password  # 把雜湊值跟原密碼對應起來

print("生成的彩虹表:")# 顯示生成的彩虹表
for hash_val, password in rainbow_table.items():
    print(f"密碼: {password}, 雜湊值: {hash_val}")

def rainbow_table_attack(hash_value):# 模擬攻擊,給定一個雜湊值,找到對應的密碼
    return rainbow_table.get(hash_value, "未找到對應的密碼")

target_hash = hashlib.md5('123456'.encode()).hexdigest()  # 假設我們拿到的是 '123456' 的雜湊值

print("\n攻擊測試中...")# 執行彩虹表攻擊
cracked_password = rainbow_table_attack(target_hash)
print(f"破解成功!原始密碼是: {cracked_password}")

說明:

  1. 我把常見的密碼放在 password_list 裡,包括 admin, 123456, a123456, 12345678, 和 1qaz2wsx,這些是我查資料時發現很多人都會用的弱密碼。
  2. 用 MD5 算法把每個密碼轉換成一個獨特的雜湊值,然後把這些對應關係(密碼 -> 雜湊值)儲存在一個字典裡,生成彩虹表。
  3. 假設攻擊者拿到密碼123456的雜湊值,然後用這個雜湊值去彩虹表裡比對,看能不能找到對應的明文密碼。
  4. 程式執行後,如果彩虹表裡有這個雜湊值,那就能馬上找到對應的密碼。在這個例子中,雜湊值是123456,所以破解結果應該會是123456。

彩虹表的關鍵在於預先計算,提前把常見密碼的雜湊值算出來並儲存,這樣攻擊的時候只需要查找,比逐一嘗試每個密碼要快很多。但如果加了鹽值(Salt),攻擊就會不容易成功。


上一篇
Day 10: 密碼攻擊手法概論
下一篇
Day 12: 密碼破解工具
系列文
網路安全基礎概念與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言