RouterSploit 实战:使用 ssh_default_creds 模块对 ZTE 路由器执行默认 SSH 凭据字典攻击
2026/9/23 2:22:47 网站建设 项目流程

RouterSploit 实战:使用 ssh_default_creds 模块对 ZTE 路由器执行默认 SSH 凭据字典攻击

【免费下载链接】routersploitExploitation Framework for Embedded Devices项目地址: https://gitcode.com/gh_mirrors/ro/routersploit

导读

本文围绕 RouterSploit 中的creds/routers/zte/ssh_default_creds模块展开,讲解如何对 ZTE 路由器上暴露的 SSH 服务执行默认凭据字典攻击,并在命中后自动展示有效账号密码。读完本文,你将掌握该模块的加载方式、参数配置、完整攻击流程,以及其底层基于 paramiko 的 SSH 认证与多线程字典攻击的实现原理,可直接在 RouterSploit 交互终端中复现整个操作。

模块功能概述

creds/routers/zte/ssh_default_creds是 RouterSploit 中针对ZTE Router(中兴路由器)的默认凭据审计模块。其核心职责是:

  • 对目标 ZTE 路由器的 SSH 服务执行基于默认凭据的字典攻击(dictionary attack);
  • 一旦发现有效的用户名与密码组合,立即将其展示给用户;
  • 支持多线程并发,加快爆破速度。

模块在源码中注册的设备类型为"ZTE Router",其实现继承自通用 SSH 默认凭据模块 ssh_default.py,并通过 ssh_default_creds.py 注入 ZTE 专属的默认凭据列表。

快速上手:验证步骤(Verification Steps)

原文档给出了完整的操作路径,在 RouterSploit 交互终端中依次执行即可:

  1. 启动 RouterSploit:
    ./rsf.py
  2. 加载 ZTE SSH 默认凭据模块:
    use creds/routers/zte/ssh_default_creds
  3. 设置目标 IP:
    set target [TargetIP]
  4. 执行攻击:
    run
  5. 若找到有效凭据,模块会将结果显示在终端中。

其中./rsf.py为仓库根目录下的主入口脚本,负责启动 Python 3 环境并拉起交互解释器(详见 rsf.py)。需要注意的是,RouterSploit 仅支持 Python 3,若在 Python 2 环境中启动会直接提示并退出。

实战场景演示

下面是对目标192.168.1.1执行模块的完整输出,可直接作为操作参照:

rsf > use creds/routers/zte/ssh_default_creds rsf (ZTE Router Default SSH Creds) > set target 192.168.1.1 [+] target => 192.168.1.1 rsf (ZTE Router Default SSH Creds) > run [*] Running module... [*] Target exposes SSH service [*] Starting default credentials attack against SSH service [*] thread-0 thread is starting... [-] SSH Authentication Failed - Username: 'admin' Password: '12345' [-] SSH Authentication Failed - Username: 'admin' Password: '123456' [-] SSH Authentication Failed - Username: 'Admin' Password: '12345' [-] SSH Authentication Failed - Username: 'Admin' Password: '123456' [+] SSH Authentication Successful - Username: 'admin' Password: 'admin' [*] thread-0 thread is terminated. [*] Elapsed time: 2.3932292461395264 seconds [+] Credentials found! Target Port Service Username Password ------ ---- ------- -------- -------- 192.168.1.1 22 ssh admin admin

从输出中可以清晰看到整个攻击链路:模块首先探测目标是否暴露 SSH 服务,随后逐条尝试默认凭据,失败记录为SSH Authentication Failed,命中记录为SSH Authentication Successful,最终以表格形式汇总输出Target / Port / Service / Username / Password五列结果,并统计总耗时。

模块源码与核心参数解析

ZTE 专属模块的源码非常精简(ssh_default_creds.py),它通过继承通用 SSH 默认凭据模块,仅重定义元信息与四个关键参数:

参数默认值类型说明
target""OptIP目标 IPv4 / IPv6 地址,也支持file://指向的ip:port列表文件
port22OptPort目标 SSH 端口,默认 22
threads1OptInteger并发线程数(ZTE 模块默认 1,通用模块默认 8)
defaultsadmin:admin,ZXDSL:ZXDSL,user:user,on:on,root:Zte521,root:W!n0&oO7.OptWordlist以逗号分隔的用户:密码组合,或file://指向的字典文件

其中内置的 6 组 ZTE 默认凭据为:admin:adminZXDSL:ZXDSLuser:useron:onroot:Zte521root:W!n0&oO7.。这一点也由测试用例 test_ssh_default_creds.py 直接断言验证(assert exploit.defaults == [...])。

参数类型的底层约束

各参数的校验逻辑定义在 option.py 中:

  • OptIP会校验地址必须是合法的 IPv4 或 IPv6,否则抛出OptionValidationError
  • OptPort将值转为整数并要求落在0 < value <= 65535区间;
  • OptWordlist支持两种取值方式:直接传入user:pass,user2:pass2字符串(按逗号切分),或传入file:///path/to/wordlist指向的本地字典文件(按行读取并 strip 空白),文件不存在时同样会校验报错。

这意味着你可以通过set defaults file:///home/user/zte_creds.txt的方式,将自定义字典喂给该模块,实现更大规模的默认凭据审计。

底层攻击流程与实现原理

该模块的实际攻击逻辑由父类 ssh_default.py 提供,主要包含三个环节:

1. 服务探测(check)

check()方法调用ssh_client.test_connect(),向目标 SSH 端口发起一次携带随机密码(random_text(12))的连接尝试(见 ssh_client.py 中的test_connect)。若返回paramiko.AuthenticationException,说明端口上确实存在 SSH 服务(认证失败恰恰证明服务在响应),此时输出Target exposes SSH service并返回True;若连接超时或出现其他异常,则判定目标未暴露 SSH,直接终止攻击。

2. 字典迭代与多线程并发

攻击入口attack()使用LockedIterator包装凭据列表,保证多个线程从同一数据源取凭据时不会重复或冲突;随后通过run_threads()启动指定数量的线程并发执行target_function(线程调度实现在 exploit.py 的run_threadsLockedIterator中)。每个线程不断从迭代器中取出user:pass组合,切分后交给 SSH 客户端尝试登录。

3. SSH 认证与结果汇总

认证核心在 ssh_client.py 的login()方法中:基于 paramiko 的SSHClient.connect()完成认证,设置timeoutbanner_timeout均为 8 秒,并显式关闭look_for_keysallow_agent,避免本机密钥干扰纯密码爆破。认证失败打印SSH Authentication Failed,成功则打印SSH Authentication Successful并将结果追加到self.credentials

攻击结束后,attack()会检查self.credentials

  • 非空:输出Credentials found!并以Target / Port / Service / Username / Password表格打印全部命中结果;
  • 为空:输出Credentials not found

父类中还提供了两个可调参数:stop_on_success(命中后是否立即停止其余线程,默认True)与verbosity(是否显示每次认证尝试,默认True),均可通过set命令调整。

多目标批量审计

attack()方法带有@multi装饰器(见 exploit.py)。当target被设置为file://开头的文件路径时,模块会自动读取文件中每行ip:port的目标并逐个执行攻击,适合对网段内多台 ZTE 设备做批量默认凭据巡检。

自动化接口与测试验证

除了交互式使用,该模块还面向自动化场景暴露了check_default()接口:它被@mute装饰器静默化,不向 stdout 输出任何内容,仅返回命中的凭据列表或None,便于被上层脚本(如自动扫描工具)复用。

对应的单元测试 test_ssh_default_creds.py 验证了:

  • 模块默认参数:target == ""port == 22threads == 1defaults与内置 6 组凭据一致;
  • stop_on_success is Trueverbosity is True
  • 针对未运行 SSH 服务的测试目标,check()返回Falsecheck_default()返回Nonerun()正常返回且不报错。

这为在 CI 环境或自动化脚本中安全地回归测试该模块提供了参考范例。

使用注意事项

  • 该模块属于凭据审计类模块,请仅在已获授权的目标上使用,遵守当地法律法规与测试授权边界;
  • 默认凭据列表仅覆盖常见 ZTE 设备出厂配置,若目标已修改口令,可结合set defaults file://...扩展自定义字典;
  • ZTE 模块默认threads = 1,如需加速可set threads 8提升并发,但过高的并发可能触发目标设备的安全防护或影响稳定性;
  • 若目标 SSH 端口非默认 22,务必通过set port同步修改,否则check()阶段会直接判定目标未暴露 SSH 而中止攻击。

延伸阅读

  • 同系列 ZTE 模块:creds/routers/zte/telnet_default_credscreds/routers/zte/ftp_default_creds可覆盖其余管理协议;
  • 通用模块源码:ssh_default.py;
  • SSH 客户端实现:ssh_client.py;
  • 参数类型与校验:option.py;
  • 线程调度与多目标装饰器:exploit.py。

【免费下载链接】routersploitExploitation Framework for Embedded Devices项目地址: https://gitcode.com/gh_mirrors/ro/routersploit

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询