RouterSploit 实战:TP-Link 路由器 Telnet 默认凭据字典攻击模块 telnet_default_creds 深度解析
RouterSploit 实战TP-Link 路由器 Telnet 默认凭据字典攻击模块 telnet_default_creds 深度解析【免费下载链接】routersploitExploitation Framework for Embedded Devices项目地址: https://gitcode.com/gh_mirrors/ro/routersploit导读本篇文章聚焦 RouterSploit 中creds/routers/tplink/telnet_default_creds模块它以字典攻击方式对 TP-Link 路由器开放的 Telnet 服务尝试登录命中后直接向用户输出有效的用户名与密码。文章既给出从启动框架到拿到结果的完整操作步骤与真实运行输出也结合仓库源码模块实现、通用基类、Telnet 客户端与选项解析器逐层拆解其攻击流程、参数含义与判定逻辑帮助你在授权测试场景下快速复用该模块并具备按需定制凭据字典与批量目标的能力。模块定位与功能概述官方文档 docs/modules/creds/routers/tplink/telnet_default_creds.md 对该模块的描述非常明确Module performs dictionary attack with default credentials against TP-Link Router Telnet service. If valid credentials are found, they are displayed to the user.即该模块针对 TP-Link 路由器的 Telnet 服务执行默认凭据字典攻击一旦发现有效凭据便展示给用户。它属于creds凭据模块族位于routersploit/modules/creds/routers/tplink/目录下与该目录中的ftp_default_creds.py、ssh_default_creds.py共同覆盖 TP-Link 设备的 FTP、SSH、Telnet 三类默认凭据探测场景。从模块注册信息telnet_default_creds.py可以看到nameTP-Link Router Default Telnet CredsdevicesTP-Link RouterauthorMarcin Buryroutersploit 模块作者模块源码解析继承链路与参数默认值TP-Link 专属模块本身非常精简其核心是继承通用 Telnet 默认凭据模块再覆写目标类型与默认参数。完整源码如下telnet_default_creds.pyfrom routersploit.core.exploit import * from routersploit.modules.creds.generic.telnet_default import Exploit as TelnetDefault class Exploit(TelnetDefault): __info__ { name: TP-Link Router Default Telnet Creds, description: Module performs dictionary attack against TP-Link Router Telnet service. If valid credentials are found, they are displayed to the user., authors: ( Marcin Bury marcin[at]threat9.com, # routersploit module ), devices: ( TP-Link 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, User:Pass or file with default credentials (file://))关键设计点继承链TP-Link 模块 → 通用 Telnet 默认凭据模块routersploit/modules/creds/generic/telnet_default.py→ TelnetClient 客户端基类routersploit/core/telnet/telnet_client.py→ Exploit 基类。所有攻击逻辑都由通用层提供厂商模块只需声明目标设备并设定默认参数这种通用逻辑 厂商参数的模式在 RouterSploit 的 creds 模块族中广泛使用。覆写默认值与通用模块相比TP-Link 模块将threads从默认 8 改为1将defaults从项目通用词表改为admin:adminTP-Link 设备最常见的出厂默认组合。这一点在单元测试中也有断言见下文测试章节。继承属性由于继承通用模块stop_on_success命中后是否停止与verbosity是否显示每次尝试结果两个选项会自动带入无需在厂商模块中重复声明。快速上手指南验证步骤文档给出的标准验证步骤如下对应 docs/modules/creds/routers/tplink/telnet_default_creds.md启动框架./rsf.pyrsf.py 是入口脚本仅支持 Python 3 环境启动时会创建轮转日志文件routersploit.log加载模块use creds/routers/tplink/telnet_default_creds设置目标set target [TargetIP]执行攻击run若发现有效凭据模块会将其展示给用户。其中target支持 IPv4、IPv6 地址也支持file://前缀指定的批量目标文件详见下文批量目标一节Telnet 端口默认 23可通过set port修改。完整场景演示与输出解读文档附带的完整运行场景如下我们逐段解读其含义rsf use creds/routers/tplink/telnet_default_creds rsf (TP-Link Router Default Telnet Creds) set target 192.168.1.1 [] target 192.168.1.1 rsf (TP-Link 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模块先执行连通性检查check()确认目标 23 端口存在 Telnet 服务后才开始攻击[*] thread-0 thread is starting...因为 TP-Link 模块默认threads 1所以只有thread-0一个线程在消费凭据队列[-] ... Authentication Failed每次登录失败都会按verbosity设置打印注意场景中依次尝试了多组凭据admin:admin、1234:1234、root:12345、root:root说明实际运行时通过defaults选项替换了比模块默认更完整的字典例如项目自带的通用默认凭据词表见 routersploit/resources/wordlists/init.py 中通过pkg_resources加载的defaults.txt[] Telnet Authentication Successful - Username: user Password: user命中有效凭据结尾的结果表格由 printer.py 中的print_table生成包含 Target / Port / Service / Username / Password 五列方便直接引用Elapsed time由 exploit.py 的run_threads统计从线程启动到全部结束的实际耗时。攻击流程与底层原理攻击主流程位于通用模块 telnet_default.py 中调用链如下run() → attack() → check() 连通性探测 → run_threads(threads, target_function, LockedIterator(defaults))run()初始化凭据结果列表后调用attack()check()通过telnet_create()建立 Telnet 客户端并调用test_connect()能收到Login:/login:/Username:/username:提示即认为服务开放attack()被multi装饰器包装——如果target以file://开头则逐行读取目标文件、对每个ip:port目标重复执行攻击exploit.pyrun_threads()按threads数量启动线程每个线程从LockedIterator中取出下一组username:password进行尝试LockedIterator使用互斥锁保证多线程下凭据不会被重复消费exploit.py。单组凭据的登录判定细节真正执行登录的是 telnet_client.py 中的TelnetCli.login()其判定逻辑非常值得关注self.telnet_client.expect([bLogin: , blogin: , bUsername: , busername: ], 5) self.telnet_client.write(bytes(username, utf-8) b\r\n) self.telnet_client.expect([bPassword: , bpassword: ], 5) self.telnet_client.write(bytes(password, utf-8) b\r\n) self.telnet_client.write(b\r\n) (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: ... # 判定成功要点客户端兼容大小写不同的登录提示符Login:/login:/Username:/username:登录结果通过两条线索综合判定响应中未出现Incorrect/incorrect字样同时响应包含 Shell 提示符#、$或或者响应长度超过 500 字节用于兼容 Mikrotik 等横幅超长的设备连接与每次交互的超时时间由模块常量TELNET_TIMEOUT 30.0控制攻击线程命中有效凭据后若stop_on_success为true默认会清空线程运行标志使其余线程尽快退出。参数详解可配置项与取值范围结合 option.py 的实现本模块全部可用选项如下选项类型默认值说明与取值范围targetOptIP空目标 IPv4 / IPv6 地址或file://开头的批量目标文件路径非 IP 会触发校验错误portOptPort23目标 Telnet 端口合法范围 165535超范围或非整数会报错threadsOptInteger1TP-Link 模块覆写并发线程数通用模块默认为 8defaultsOptWordlistadmin:adminuser:pass凭据对多个用逗号分隔或用file://指定词表文件stop_on_successOptBooltrue命中一组有效凭据后是否立即停止后续尝试verbosityOptBooltrue是否逐条打印每次登录尝试的成功 / 失败结果关于OptWordlist的读取机制option.py若值以file://开头读取对应文件每行一组user:pass否则按逗号分隔内联凭据如set defaults admin:admin,root:root设置时若文件不存在会立即抛出OptionValidationError。OptPort与OptIP同样有严格校验端口必须能转成 165535 的整数地址必须是合法 IPv4 / IPv6否则模块会拒绝该设置。自定义凭据字典与批量目标自定义词表模块默认只携带admin:admin一组凭据实战中通常需要替换为更完整的字典rsf (TP-Link Router Default Telnet Creds) set defaults admin:admin,admin:password,root:root,user:user或使用项目词表 / 自备词表文件rsf (TP-Link Router Default Telnet Creds) set defaults file://routersploit/resources/wordlists/defaults.txt项目在 routersploit/resources/wordlists/init.py 中通过pkg_resources.resource_filename暴露了defaults.txt、passwords.txt、usernames.txt、snmp.txt四份内置词表通用模块的默认值即指向其中的defaults.txt。批量目标target设置为file://路径时multi装饰器会逐行解析目标文件每行格式为ip:port其中port可省略省略时回退到port选项的值exploit.py。例如targets.txt内容192.168.1.1 192.168.1.2:2323 192.168.1.3:23设置set target file://targets.txt后模块会对三个目标依次执行同样的字典攻击。测试用例与验证仓库为每个 creds 模块都配套了 pytest 用例TP-Link Telnet 模块的测试位于 tests/creds/routers/tplink/test_telnet_default_creds.py它同时验证了模块默认参数与攻击行为两部分from routersploit.modules.creds.routers.tplink.telnet_default_creds import Exploit 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从中可以确认的事实默认target为空、port为 23、threads为 1、defaults为[admin:admin]stop_on_success与verbosity均为true从通用基类继承测试通过generic_targetconftest 提供的模拟 Telnet 服务验证check()连通性探测、check_default()静默模式下的凭据探测被mute装饰器抑制输出供 autopwn 等场景复用以及run()完整攻击流程均能正常工作。使用注意与适用范围授权边界该模块属于凭据爆破类工具只应在拥有明确授权的渗透测试、安全评估或自有设备复现场景中使用对未授权目标使用可能违反法律法规。协议特性Telnet 本身以明文传输登录成功后的会话内容同样不加密测试中观察到的凭据泄露风险也正是设备默认口令问题的直接体现。判定局限check()只验证端口连通性与登录提示符无法区分目标是否为真实 TP-Link 设备login()对横幅较长的设备采用响应超 500 字节即视为成功的启发式规则个别环境下可能出现误判。性能权衡TP-Link 模块默认单线程需要更快的扫描速度时可适当调大threads但过高的并发可能触发目标设备的限速或封禁。结果收集check_default()方法以静默方式返回命中凭据列表None表示未命中该接口被扫描器 / autopwn 类模块调用说明本模块除交互式使用外还可作为更大规模自动化评估流程的一个组件。小结creds/routers/tplink/telnet_default_creds是 RouterSploit 中厂商模块瘦身、通用逻辑复用设计思路的典型代表真正复杂的 Telnet 登录判定、多线程调度、结果打印与批量目标解析全部沉淀在 telnet_default.py、telnet_client.py 与 exploit.py 等通用层而 TP-Link 模块仅需声明设备类型并覆写threads与defaults两个参数。理解这条继承链后你既能在五分钟内完成一次针对 TP-Link Telnet 的默认口令验证也能举一反三地读懂 RouterSploit 全部 creds 模块的运作机制。【免费下载链接】routersploitExploitation Framework for Embedded Devices项目地址: https://gitcode.com/gh_mirrors/ro/routersploit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考