routersploit 实战:针对 Mikrotik 路由器 Telnet 服务的默认口令字典攻击模块详解
2026/9/23 1:12:55 网站建设 项目流程

routersploit 实战:针对 Mikrotik 路由器 Telnet 服务的默认口令字典攻击模块详解

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

导读

本文围绕 routersploit 中的creds/routers/mikrotik/telnet_default_creds模块展开,讲解如何使用该框架对 Mikrotik 路由器的 Telnet 服务执行默认口令字典攻击(Default Credentials Dictionary Attack):从模块加载、参数配置到运行与结果解读,并深入源码剖析其底层 Telnet 认证探测与多线程调度原理。读完本文,你将掌握在 routersploit 中针对嵌入式设备 Telnet 服务批量验证默认口令的完整方法与可复用的模块扩展思路。

模块概述:它是做什么的

creds/routers/mikrotik/telnet_default_creds是 routersploit 认证凭据(creds)类模块家族中的一员。根据官方文档 telnet_default_creds.md 的定义:

Module performs dictionary attack with default credentials against Mikrotik Router Telnet service. If valid credentials are found, they are displayed to the user.

即:该模块使用一组“默认口令”字典,针对 Mikrotik 路由器的 Telnet 服务进行暴力验证;一旦发现可用的用户名/口令组合,会立即在终端中展示给用户。它面向的是仍保留出厂默认口令、或使用弱口令的 Mikrotik 设备(如 RouterOS 管理的路由器),属于安全评估/渗透测试中的常见环节。

在 telnet_default_creds.py 中,模块的元信息将适用设备声明为"Mikrotik Router",作者为 routersploit 核心维护者 Marcin Bury。该模块类直接继承自通用模块telnet_default(见 telnet_default.py),因此它复用了通用 Telnet 默认口令攻击的全部逻辑,仅通过覆盖目标端口、线程数和默认字典来定制出“Mikrotik 专属”行为。

快速上手:完整验证步骤

按照官方文档 telnet_default_creds.md 中的 Verification Steps,在 routersploit 交互式控制台中的完整操作流程如下:

  1. 启动框架:./rsf.py
  2. 加载模块:use creds/routers/mikrotik/telnet_default_creds
  3. 设置目标:set target [TargetIP]
  4. 执行攻击:run
  5. 若发现有效口令,框架会将其显示给用户

官方文档给出的典型运行场景(Scenario)如下:

rsf > use creds/routers/mikrotik/telnet_default_creds rsf (Mikrotik Router Default Telnet Creds) > set target 192.168.1.1 [+] target => 192.168.1.1 rsf (Mikrotik Router Default Telnet Creds) > run [*] Running module... [*] Target exposes Telnet service [*] Starting default credentials attack against Telnet service [*] thread-0 thread is starting... [-] Telnet Authentication Failed - Username: 'admin' Password: 'admin' [-] Telnet Authentication Failed - Username: '1234' Password: '1234' [-] Telnet Authentication Failed - Username: 'root' Password: '12345' [-] Telnet Authentication Failed - Username: 'root' Password: 'root' [+] Telnet Authentication Successful - Username: 'user' Password: 'user' [*] thread-0 thread is terminated. [*] Elapsed time: 5.389287948608398 seconds [+] Credentials found! Target Port Service Username Password ------ ---- ------- -------- -------- 192.168.1.1 23 telnet user user

从输出可以清晰看到攻击的完整生命周期:先探测目标是否暴露 Telnet 服务,再逐条尝试默认口令组合(失败的以[-]标记、成功的以[+]标记),最终以表格形式汇总全部有效凭据。

模块参数详解:可配置选项与取值范围

虽然官方文档只展示了target一个参数,但该模块实际暴露了多个可调选项。下面结合 telnet_default_creds.py 与其父类 telnet_default.py 的源码,逐一说明:

参数默认值类型说明
targetOptIP目标 IPv4/IPv6 地址,或ip:port格式的文件(file://前缀)。校验逻辑见 option.py 的OptIP,非法的 IP 会被拒绝
port23OptPort目标 Telnet 端口,合法范围为 1~65535(见OptPort实现)
threads1(父类默认 8)OptInteger并发线程数。Mikrotik 模块将其覆盖为 1,即默认串行执行,避免对设备造成过大压力
defaultsadmin:admin(父类为内置 wordlist)OptWordlist用户名:口令 字典,支持两种形式:逗号分隔的内联字典,或file://指向的外部字典文件
stop_on_successtrueOptBool命中第一组有效凭据后是否立即停止(继承自父类)
verbositytrueOptBool是否逐条打印认证尝试过程(继承自父类)

关于defaults的两种用法:

  • 内联形式:set defaults admin:admin,user:user,root:root,模块会按逗号切分后逐条尝试;
  • 文件形式:set defaults file:///path/to/creds.txt,文件中每行一个username:password条目。OptWordlist的读取与校验逻辑在 option.py:以file://开头时逐行读取并去除首尾空白,否则按逗号切分。

说明:当前仓库中 Mikrotik 模块的默认字典被精简为admin:admin(见 telnet_default_creds.py),而父类默认引用wordlists.defaults内置词表。实际使用时强烈建议通过file://挂载自定义字典文件以扩大覆盖面。

攻击流程:从探测到输出结果的完整调用链

第一步:服务探测(check)

模块运行时会先调用check()确认目标确实开启了 Telnet 服务(见 telnet_default.py)。底层由TelnetClient.test_connect()完成(见 telnet_client.py):建立 TCP 连接并等待Login:/login:/Username:/username:提示符,5 秒内能拿到登录提示即判定为“目标暴露 Telnet 服务”;否则打印Target does not expose Telnet service并中止攻击。

第二步:字典迭代与多线程调度

探测通过后,模块将defaults包装成线程安全的LockedIterator,再通过run_threadsthreads参数启动多个工作线程(见 telnet_default.py)。每个工作线程的target_function会循环取出下一组username:password(按:切分一次),调用telnet_client.login()尝试认证,成功则把(target, port, protocol, username, password)追加到self.credentials列表(见 telnet_default.py)。

第三步:认证判定逻辑(核心)

认证尝试的核心实现在 telnet_client.py 的login()方法:

  1. 建立 Telnet 连接(超时TELNET_TIMEOUT = 30.0秒);
  2. 等待登录提示,发送用户名 +\r\n
  3. 等待密码提示,发送密码 +\r\n
  4. 再等待一段响应,检查其中是否出现Incorrect/incorrect字样:
    • 若未出现错误提示,且响应中包含#$>等 Shell 提示符特征,或响应长度超过 500 字节(源码注释特别注明这是为了兼容 Mikrotik 这类大 Banner 设备),则判定认证成功;
    • 否则判定失败并打印Telnet Authentication Failed - Username: '...' Password: '...'

这个“大 Banner 即成功”的特殊分支正是本模块为 Mikrotik 等设备定制的重要细节:部分 Mikrotik 设备登录后返回的欢迎 Banner 很长且不带Incorrect字样,若按常规逻辑会误判为失败,因此源码显式加入了len(res) > 500的兜底判定。

第四步:结果汇总

所有线程结束后,若self.credentials非空,打印Credentials found!并以表格形式输出Target / Port / Service / Username / Password五列(见 telnet_default.py);否则打印Credentials not found

与同族模块的关系:Mikrotik 默认口令全家桶

telnet_default_creds并非孤立模块,routersploit 为 Mikrotik 提供了一整套默认口令攻击模块(见 routersploit/modules/creds/routers/mikrotik 目录):

  • telnet_default_creds.py — Telnet 服务(端口 23);
  • ssh_default_creds.py — SSH 服务(端口 22),结构与 Telnet 版完全一致,仅继承自generic.ssh_default
  • ftp_default_creds.py — FTP 服务(端口 21);
  • api_ros_default_creds.py — Mikrotik RouterOS 专有 API 服务(依赖 apiros_client.py)。

这四个模块均采用“继承通用实现 + 覆盖专属参数”的工厂模式:每个设备厂商目录下的模块只需声明targetportthreadsdefaults四个关键差异点,即可复用全部攻击逻辑。这意味着同一套默认凭据字典可以通过多条服务路径(Telnet/SSH/FTP/API)验证 Mikrotik 设备,评估覆盖面更完整。

自动化与测试:如何验证模块行为

该模块配有对应的自动化测试 test_telnet_default_creds.py,使用pytest+threat9_test_bed的 Telnet 模拟服务(见 conftest.py 中的generic_targetfixture,基于TelnetScenario.AUTHORIZED场景)验证:

def test_check_success(generic_target): exploit = Exploit() assert exploit.target == "" assert exploit.port == 23 assert exploit.threads == 1 assert exploit.defaults == ["admin:admin"] assert exploit.stop_on_success is True assert exploit.verbosity is True exploit.target = generic_target.host exploit.port = generic_target.port assert exploit.check() is True assert exploit.check_default() is not None assert exploit.run() is None

该测试同时验证了三点关键行为:模块默认参数(端口 23、单线程、admin:admin字典、成功后停止、开启详细输出);check()能正确识别模拟 Telnet 服务;check_default()在模拟环境中能实际命中有效凭据。测试通过AUTHORIZED场景模拟一台接受登录的 Telnet 服务端,印证了上述认证判定逻辑(等待提示符 → 发送凭据 → 检查响应)在真实调用链上的正确性。

实战建议与注意事项

  1. 合法性前提:默认口令攻击本质是凭据爆破行为,只应在获得明确授权的目标(自有设备、靶场、渗透测试合同范围内)上使用。
  2. 控制并发:Mikrotik 模块默认threads = 1,这是有意为之——嵌入式设备资源有限,过高并发易触发服务宕机或防火墙封禁;如需加速,可在set threads N后小幅上调并观察设备响应。
  3. 扩充字典:默认字典仅含admin:admin,实际效果有限。建议通过set defaults file:///path/to/wordlist.txt挂载包含厂商出厂口令与常见弱口令的字典文件,格式为每行username:password
  4. 结合多条服务路径:Mikrotik 设备常同时开放 Telnet 与 SSH。若 Telnet 未开启或已禁用,可无缝切换到 ssh_default_creds.py 或 ftp_default_creds.py 继续验证同一套凭据。
  5. 解读 Banner 特判:源码中针对大 Banner(响应 > 500 字节)的“视为认证成功”判定是 Mikrotik 场景的经验性兜底,使用时需结合输出结果人工复核,避免 Banner 误导造成误报。

总结

creds/routers/mikrotik/telnet_default_creds是 routersploit 中“厂商化默认口令攻击”模块的标准范例:通过继承通用 telnet_default.py 并覆盖设备专属参数,以极少的代码量实现了针对 Mikrotik 路由器 Telnet 服务的完整默认凭据探测。理解它的参数体系、认证判定细节(尤其是大 Banner 兜底逻辑)与多线程调度方式,不仅能直接指导实战操作,也能帮助你在需要时为其他设备型号编写同类的定制化 creds 模块。

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

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

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

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

立即咨询