RouterSploit 实战:使用 telnet_default_creds 模块对 Netcore 路由器进行 Telnet 默认凭据检测
2026/9/23 6:25:58 网站建设 项目流程
  • 网络安全
  • 嵌入式

【免费下载链接】routersploit

Exploitation Framework for Embedded Devices

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

导读

本文讲解 RouterSploit 框架中creds/routers/netcore/telnet_default_creds模块的完整用法与底层实现。该模块针对 Netcore(磊科)品牌路由器暴露的 Telnet 服务执行默认凭据字典攻击,命中后自动将有效的用户名/密码组合展示给用户,用于安全评估中快速验证设备是否仍在使用出厂默认口令。读完本文,你将掌握该模块的调用步骤、全部可配置参数、凭据字典的加载方式,以及其背后"连接探测 → 多线程字典爆破 → 结果表格输出"的完整执行链路。

模块定位与适用场景

在 RouterSploit 的模块分类中,creds/routers/netcore/telnet_default_creds属于凭据(creds)模块族,其官方描述为:

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

即:针对 Netcore 路由器 Telnet 服务执行默认凭据字典攻击,若发现有效凭据则展示给用户。该模块面向的硬件目标为Netcore Router(见 模块源码 中__info__["devices"]字段)。

从目录结构看,Netcore 品牌还配套了同族的 FTP 与 SSH 变体(ftp_default_creds.py、ssh_default_creds.py),三者的模块骨架完全一致,仅协议端口与默认端口不同。而 Telnet 变体是其中历史最悠久、对嵌入式设备(路由器/摄像头)最常用的检测方式之一。

快速上手:完整验证步骤

按照官方文档(telnet_default_creds.md)的验证步骤,可在 RouterSploit 交互式终端中完成一次完整攻击:

  1. 在仓库根目录启动框架:./rsf.py(入口脚本 rsf.py 仅接受 Python3 环境,检测到 Python2 会直接退出)
  2. 加载模块:use creds/routers/netcore/telnet_default_creds
  3. 设置目标:set target [TargetIP]
  4. 运行:run
  5. 若发现有效凭据,框架会将其展示给用户

典型运行场景

官方文档给出的完整运行实录如下:

rsf > use creds/routers/netcore/telnet_default_creds rsf (Netcore Router Default Telnet Creds) > set target 192.168.1.1 [+] target => 192.168.1.1 rsf (Netcore 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 服务后才进入字典攻击阶段;
  • [-] Telnet Authentication Failedverbosity(详细输出)开启时逐条打印失败的凭据尝试;
  • [+] Telnet Authentication Successful:命中有效凭据,随后以表格形式汇总输出(Target / Port / Service / Username / Password 五列);
  • Elapsed time:整个攻击耗时,由 exploit.py 中run_threads()统一计时。

模块参数详解

该模块自身只定义了 4 个参数(见 telnet_default_creds.py),其余高级参数继承自通用基类 telnet_default.py。

参数默认值类型说明
target空字符串OptIP目标 IPv4/IPv6 地址,或file://前缀指定包含ip:port的目标文件
port23OptPort目标 Telnet 端口,取值范围 1~65535
threads1OptInteger并发线程数(Netcore 模块默认单线程)
defaultsadmin:admin,guest:guestOptWordlistUser:Pass组合,逗号分隔或file://指向凭据文件
stop_on_successtrueOptBool命中第一组有效凭据后是否立即停止(继承自基类)
verbositytrueOptBool是否逐条打印认证尝试过程(继承自基类)

各参数的类型校验逻辑可在 option.py 中确认:

  • OptIP:设置时校验值必须为空、合法 IPv4 或 IPv6,否则抛出OptionValidationError
  • OptPort:强制转为整数并限定0 < value <= 65535
  • OptWordlist:这是字典攻击模块最核心的参数类型。它重写了__get__:若值以file://开头,则读取对应文件、逐行 strip 后返回列表;否则按逗号切分返回列表。__set__时若指定file://路径还会校验文件是否存在;
  • OptBool:仅接受字符串true/false

值得强调的是,与通用基类的默认值不同,Netcore 模块把threads收敛为1、把defaults收敛为admin:admin,guest:guest这两组最常见的组合——这是厂商模块对"该品牌常见出厂口令"的定制化体现。

自定义凭据字典

defaults参数支持两种赋值方式:

rsf (Netcore Router Default Telnet Creds) > set defaults admin:admin,root:root,user:user # 或使用文件(每行一组 user:pass) rsf (Netcore Router Default Telnet Creds) > set defaults file:///path/to/creds.txt

当采用file://方式时,文件中的每一行都会被 strip 后作为一个User:Pass组合参与尝试。RouterSploit 仓库内置了包含653 行常见设备默认凭据的通用词表 defaults.txt(如1111:11111234:1234Administrator:admin、各厂商 Alphanetworks 系列组合等),你可以在交互终端用show wordlists查看仓库内置词表及其file://引用路径(见 interpreter.py 中_show_wordlists实现)。

底层执行流程:从 run 到结果输出

虽然 Netcore 模块源码只有 22 行,但它通过类继承复用了通用 Telnet 默认凭据模块的完整攻击逻辑。整体调用链如下:

run() → attack() → check() → target_function() × N(线程) → 结果表格

各环节在 telnet_default.py 中的实现要点:

  1. run():重置self.credentials列表后调用attack()
  2. attack()(被@multi装饰):先执行check()预检——调用telnet_create()建立连接并执行test_connect(),若目标不暴露 Telnet 服务则直接返回。随后用LockedIterator(self.defaults)包装凭据迭代器(内部持有一个threading.Lock,保证多线程安全地逐个取凭据,见 exploit.py),并调用run_threads()启动self.threads个线程执行target_function
  3. target_function():循环从迭代器取出username:password(按第一个冒号split(":", 1)切分),创建 Telnet 客户端调用login(username, password, retries=3)。认证成功时,若stop_on_success=True则通过running.clear()通知其余线程停止,并把(target, port, target_protocol, username, password)追加进credentials
  4. 所有线程结束后,若credentials非空则print_success("Credentials found!")并以表格打印,否则输出Credentials not found

@multi装饰器(exploit.py)还支持批量目标:当targetfile://开头时,它会逐行读取目标文件,按ip:port格式解析出每个目标并依次执行一次attack(),实现单次命令批量扫描多个 Netcore 设备。

Telnet 认证判定原理

模块的认证判定发生在 Telnet 客户端层 telnet_client.py 的login()方法中,其流程为:

  1. 建立 Telnet 连接(超时TELNET_TIMEOUT = 30.0秒);
  2. expect([b"Login: ", b"login: ", b"Username: ", b"username: "], 5)等待登录提示并发送用户名(UTF-8 编码 +\r\n);
  3. expect([b"Password: ", b"password: "], 5)等待密码提示并发送密码;
  4. 最后expect([b"Incorrect", b"incorrect"], 5)检查响应中是否出现认证失败关键字;
  5. 判定规则:若未匹配到Incorrect(索引i == -1),且响应中包含 shell 提示符#$>中的任意一个,或响应长度超过 500 字节(用于兼容 MikroTik 等大横幅设备),则判定认证成功并打印Telnet Authentication Successful;否则判定失败并打印Telnet Authentication Failed

这一点也解释了官方场景示例中失败/成功消息的来源——它们由 telnet_client.py 的print_success/print_error输出,并由模块的verbosity参数控制是否显示。

自动化与测试验证

该模块同时提供了自动化接口与回归测试:

  • check_default():被@mute装饰器(exploit.py)包裹,将攻击过程中的 stdout 输出重定向到虚拟文件对象,静默执行完整字典攻击并返回命中的凭据列表(未命中返回None)。该接口可供其他模块或扫描器(如 autopwn.py)以编程方式复用,无需解析终端输出;
  • 单元测试test_telnet_default_creds.py 验证了模块的默认参数值(target == ""port == 23threads == 1defaults == ["admin:admin", "guest:guest"]stop_on_success is Trueverbosity is True),并在测试 Telnet 服务器上断言check()返回 True、check_default()返回非空结果、run()正常执行完毕;对应的通用基类测试见 test_telnet_default.py。

安全使用提示

本模块本质上是默认口令合规性检测工具:它只尝试设备厂商出厂预设的弱口令组合,不涉及任何漏洞利用。建议仅在获得授权的渗透测试、内部安全审计或资产盘点场景中使用,用于发现仍在使用admin:adminguest:guest等出厂凭据的 Netcore 设备,并及时整改。Telnet 本身以明文传输凭据,若目标设备支持,更推荐配合同族的 ssh_default_creds.py(默认端口 22)进行安全通信条件下的凭据检测。

  • 网络安全
  • 嵌入式

【免费下载链接】routersploit

Exploitation Framework for Embedded Devices

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

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

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

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

立即咨询