routersploit Cisco 路由器 SSH 默认口令探测模块实战:ssh_default_creds 使用与源码解析
2026/9/23 1:55:16 网站建设 项目流程
  • 网络安全
  • 嵌入式

【免费下载链接】routersploit

Exploitation Framework for Embedded Devices

项目地址:https://gitcode.com/gh_mirrors/ro/routersploit
点击查看免费下载

导读

creds/routers/cisco/ssh_default_creds是 routersploit(嵌入式设备渗透测试框架)中针对Cisco 路由器 SSH 服务的默认口令字典攻击模块。本文以该模块文档为主线,完整讲解其在交互式命令行中的加载、配置与运行流程,并结合模块源码、SSH 客户端底层实现与单元测试,剖析参数含义、攻击执行链路和结果判定机制。读完本文,你将能独立使用该模块对 Cisco 路由器开展默认凭据安全检测,并理解框架中 SSH 凭据模块的统一设计范式。

模块概览:功能与定位

该模块属于 routersploit 的creds(凭据类)模块族,核心功能是对 Cisco 路由器开放的 SSH 服务执行默认凭据字典攻击,一旦找到有效的用户名/密码组合,会立即在终端中展示给使用者。

其元信息定义在 模块源码 中:

  • 模块名称:Cisco Router Default SSH Creds
  • 模块描述:针对 Cisco Router SSH 服务的字典攻击,发现有效凭据后展示给用户
  • 作者:Marcin Bury(threat9)
  • 适用设备:Cisco Router

从代码继承关系看,该模块直接继承自通用的 ssh_default 模块,因此它本质上是"通用 SSH 默认凭据攻击引擎 + Cisco 专用参数预设"的组合——这也是整个creds/routers/*目录下所有厂商模块(如 FTP、Telnet 变体)共用的设计模式。

快速上手:三步完成 Cisco SSH 默认凭据检测

按照 模块文档 的验证步骤,使用流程如下:

  1. 启动框架:./rsf.py
  2. 加载模块:use creds/routers/cisco/ssh_default_creds
  3. 设置目标:set target [TargetIP]
  4. 执行攻击:run
  5. 若发现有效凭据,结果将以表格形式展示

完整的交互式会话示例如下(来自模块文档):

rsf > use creds/routers/cisco/ssh_default_creds rsf (Cisco Router Default SSH Creds) > set target 192.168.1.1 [+] target => 192.168.1.1 rsf (Cisco 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 Successful,最终结果表中包含目标 IP、端口、服务类型、用户名和密码五个字段。

参数详解:五个可配置项及其默认值

模块暴露的选项定义在 模块源码,由基类 ssh_default 补充完整:

参数类型默认值说明
targetOptIP目标 IPv4 / IPv6 地址,或file://前缀的 ip:port 列表文件
portOptPort22目标 SSH 服务端口
threadsOptInteger1并发线程数(注意:Cisco 模块覆盖了基类的默认值 8)
defaultsOptWordlistadmin:admin用户名:密码 组合,或file://前缀的凭据字典文件
stop_on_successOptBooltrue命中第一组有效凭据后是否停止(继承自基类)
verbosityOptBooltrue是否逐条打印认证尝试过程(继承自基类)

各参数类型的行为由 option.py 中的对应选项类约束:

  • OptIP:通过正则严格校验 IPv4 / IPv6 格式,非法地址直接报错Invalid address. Provided address is not valid IPv4 or IPv6 address.(见 option.py)。
  • OptPort:强制转换为整数并校验0 < port <= 65535(见 option.py)。
  • OptWordlist:这是最灵活的选项——支持逗号分隔的内联列表(如admin:admin,cisco:cisco),也支持file://前缀指向的外部字典文件;其__get__方法会在取值时自动把文件逐行读入并去除首尾空白(见 option.py)。
  • OptInteger:支持十进制或十六进制(int(value, 16))字符串到整数的转换。
  • OptBool:仅接受true/false两个取值。

这里有一个容易被忽略的细节:Cisco 模块将defaults预设为admin:adminthreads预设为 1,而通用基类默认加载的是 defaults.txt 全量字典(共 653 行)并使用 8 线程。原因是 Cisco 的 SSH 登录尝试属于慢速密码认证,单凭据单线程更稳妥、更不易触发目标设备的锁定或 IDS 告警。若需要更全面的覆盖,可在运行时覆盖defaults为框架内置全量字典:set defaults file:///routersploit/resources/wordlists/defaults.txt(按实际仓库绝对路径调整),该字典中即包含admin:ciscocisco:ciscoCisco:Cisco等典型 Cisco 组合。

攻击执行链路:从 run 到认证成功的源码级剖析

1. 服务探测(check)

run()首先调用attack(),其第一步是check()(见 ssh_default.py):创建一个 SSH 客户端并调用test_connect()尝试连接。底层实现在 ssh_client.py:

  • 使用固定用户名root+ 12 位随机密码发起连接(random_text(12));
  • 若抛出paramiko.AuthenticationException,说明目标确实存在 SSH 服务(只是拒绝该凭据),判定探测成功;
  • 若抛出其他异常(连接超时、拒绝等),判定目标未开放 SSH,模块直接返回,不做后续攻击。

这是整套框架creds模块"先探测、后攻击"安全模式的标准实现——不会对非 SSH 目标发起无意义的爆破

2. 多线程字典攻击(attack)

服务探测通过后,模块输出Starting default credentials attack against SSH service,随后进入核心攻击循环(见 ssh_default.py):

  1. LockedIterator(self.defaults)包装凭据列表,保证多线程安全迭代;
  2. run_threads(self.threads, self.target_function, data)threads数量启动工作线程(示例输出中的thread-0即来源于此);
  3. 每个工作线程在target_function中循环取出一条username:password(按首个冒号切分,split(":", 1)),调用ssh_client.login(username, password)尝试认证;
  4. 认证成功且stop_on_success为 true 时,调用running.clear()通知所有线程停止;
  5. 命中的凭据追加到self.credentials列表;
  6. 全部线程结束后,若credentials非空,则打印成功提示并以表格输出(表头为 Target、Port、Service、Username、Password),否则输出Credentials not found

3. 单次认证的底层实现(login)

每次认证最终落到 SSHCli.login,底层使用paramiko

  • 连接参数包括timeout=SSH_TIMEOUT(8.0 秒)与banner_timeout=SSH_TIMEOUT
  • 显式关闭look_for_keysallow_agent,确保只使用字典提供的用户名密码,不做本机密钥或 SSH Agent 干扰;
  • 捕获paramiko.AuthenticationException时输出[-] SSH Authentication Failed - Username: '...' Password: '...',对应文档示例中的失败日志;
  • 认证成功则输出[+] SSH Authentication Successful - ...并返回 True。

值得注意:verbosity参数贯穿整个调用链——login中的print_error/print_success均受其控制,若将verbosity设为false,攻击过程将静默执行,只输出最终结果表。

与其他 Cisco 凭据模块的横向对比

creds/routers/cisco目录下,除了本文的 SSH 模块,还并列存在两个同族模块,共用同一套"继承通用引擎 + 覆盖参数"的设计:

  • ftp_default_creds.py:针对 FTP 服务,默认端口 21,同样预设admin:admin、单线程;
  • telnet_default_creds.py:针对 Telnet 服务,默认端口 23,参数结构完全一致。

三个模块唯一差异在于继承的基类(ssh_default/ftp_default/telnet_default)及默认端口,攻击流程、参数体系与输出格式保持统一。这也解释了为什么 docs 目录下三个文档的 Verification Steps 几乎逐字相同——它们共享同一套使用契约。

单元测试与验证

仓库为每个凭据模块都配套了 pytest 测试,见 test_ssh_default_creds.py:

  • 断言模块默认参数:target == ""port == 22threads == 1defaults == ["admin:admin"]stop_on_success is Trueverbosity is True
  • 针对测试桩目标执行check()断言返回False(测试环境未真实部署 SSH 服务时探测失败属预期行为),check_default()返回Nonerun()返回None

这些测试既锁定了模块参数契约,也验证了"无有效凭据时优雅退出、不抛异常"的容错路径,可用于在 CI 中回归验证模块行为。

使用建议与安全提示

  1. 授权前提:该模块仅用于对已获授权的目标设备进行安全评估。对未授权设备发起凭据爆破可能违反当地法律法规,请务必在隔离的实验环境或明确授权的渗透测试项目中操作。
  2. 线程数控制:Cisco 设备 SSH 登录通常较慢,且多次失败可能触发账户锁定或日志告警。建议保持默认单线程,或在确认目标抗性后再调大threads
  3. 字典扩展:框架内置的 defaults.txt 收录了 653 条常见默认凭据(含大量 Cisco 惯用组合),可作为file://字典的起点;也可结合目标型号历史默认口令自建字典,覆盖更广。
  4. 结果解读:命中后输出的表格即最终审计证据,建议同时记录Elapsed time与日志级别输出,作为评估报告的凭据发现时间线参考。

总结

creds/routers/cisco/ssh_default_creds是 routersploit 凭据检测模块族中极具代表性的一员:通过继承通用 SSH 攻击引擎并预设 Cisco 专用参数,仅需use → set target → run三步即可完成对 Cisco 路由器 SSH 服务的默认凭据检测。理解其"探测-爆破-汇总"三段式执行链与参数体系后,你可以举一反三,熟练使用框架内所有厂商的 FTP / SSH / Telnet 默认凭据模块,并可根据实际场景灵活定制字典与并发策略。

  • 网络安全
  • 嵌入式

【免费下载链接】routersploit

Exploitation Framework for Embedded Devices

项目地址:https://gitcode.com/gh_mirrors/ro/routersploit
点击查看免费下载

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

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

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

立即咨询