深度解析)
网络安全嵌入式【免费下载链接】routersploitExploitation Framework for Embedded Devices项目地址https://gitcode.com/gh_mirrors/ro/routersploit点击查看免费下载导读本文围绕 routersploit 项目中的creds/cameras/grandstream/ssh_default_creds模块展开讲解如何对 Grandstream潮流网络摄像头开启的 SSH 服务执行默认凭据字典攻击模块会依次尝试内置的用户名:密码组合一旦命中即把有效凭据回显给用户。读完本文你将掌握该模块的完整调用流程、全部可配置参数的含义与取值范围、底层 SSH 认证与多线程实现原理以及如何用自定义字典和批量目标文件扩展它的实战能力。模块是什么对 Grandstream 摄像头 SSH 服务的默认凭据字典攻击根据官方文档 ssh_default_creds.md 的定义Module performs dictionary attack with default credentials against Grandstream Camera SSH service. If valid credentials are found, they are displayed to the user.即该模块针对 Grandstream 摄像头的 SSH 服务执行默认凭据字典攻击一旦发现有效凭据立即向用户展示。它归属于creds/cameras/grandstream目录与同目录下的 ftp_default_creds.py、telnet_default_creds.py 共同构成了针对 Grandstream 设备的完整默认凭据检测矩阵——分别覆盖 FTP、SSH、Telnet 三种远程管理服务。从源码看该模块本身是一个极薄的适配层ssh_default_creds.py它直接继承自通用模块routersploit.modules.creds.generic.ssh_default中的Exploit类仅通过__info__元数据声明了厂商与设备信息devices: (Grandstream Camera,)并覆写了几个关键默认值。因此理解这个模块的关键在于理解它背后那套通用的 SSH 默认凭据攻击引擎。模块选项总览模块实例化后通过show options可以看到以下可配置项。其中target、port、threads、defaults由 Grandstream 适配层直接声明ssh_default_creds.pystop_on_success、verbosity则从通用 SSH 模块继承而来ssh_default.py。选项默认值类型说明target空OptIP目标 IPv4/IPv6 地址或file://开头的目标列表文件路径port22OptPort目标 SSH 端口合法范围 165535threads1OptInteger并发线程数Grandstream 适配层默认 1defaultsadmin:adminOptWordlist凭据字典格式为User:Pass多个用逗号分隔或以file://指向字典文件stop_on_successtrueOptBool命中第一组有效凭据后是否立即停止攻击verbositytrueOptBool是否逐条回显认证尝试过程值得注意的细节Grandstream 适配层将threads默认值收敛为1通用模块默认为8并把defaults收窄为单一的admin:admin通用模块默认加载全局字典 defaults.txt共 653 条user:pass组合。这一设计意图很明显——厂商适配层给出最可能的候选用户可以在此基础上自行扩充。各选项的赋值校验由 option.py 中的选项类型实现OptIPoption.py通过is_ipv4/is_ipv6正则校验地址合法性非法的地址会抛出OptionValidationErrorOptPortoption.py要求取值落在0 value 65535区间OptWordlistoption.py支持两种形态逗号分隔的内联字典或file://指向的字典文件——后者在读取时逐行 strip文件不存在会直接报错。标准使用流程Verification Steps官方文档给出的标准验证流程共 5 步在 routersploit 交互式解释器中执行启动框架./rsf.py入口脚本见 rsf.py加载模块use creds/cameras/grandstream/ssh_default_creds设置目标set target [TargetIP]执行攻击run若发现有效凭据结果将直接回显给用户。这几条命令在 interpreter.py 中有对应实现command_useinterpreter.py把点分路径拼装为routersploit.modules.creds.cameras.grandstream.ssh_default_creds后通过import_exploit动态加载模块command_setinterpreter.py先校验选项是否存在于current_module.options再调用setattr完成赋值并打印key valuecommand_runinterpreter.py则输出Running module ...并触发current_module.run()同时捕获KeyboardInterrupt以便用户中途取消。典型运行场景以下完整输出来自官方文档 ssh_default_creds.md 的 Scenarios 一节展示了一次完整的攻击会话rsf use creds/cameras/grandstream/ssh_default_creds rsf (Grandstream Camera Default SSH Creds) set target 192.168.1.1 [] target 192.168.1.1 rsf (Grandstream Camera Default SSH Creds) run [*] Running module... [*] Target exposes SSH service [*] Starting default credentials attack against SSH service [*] thread-0 thread is starting... [-] SSH Authentication Failed - Username: admin Password: 12345 [-] SSH Authentication Failed - Username: admin Password: 123456 [-] SSH Authentication Failed - Username: Admin Password: 12345 [-] SSH Authentication Failed - Username: Admin Password: 123456 [] SSH Authentication Successful - Username: admin Password: admin [*] thread-0 thread is terminated. [*] Elapsed time: 2.3932292461395264 seconds [] Credentials found! Target Port Service Username Password ------ ---- ------- -------- -------- 192.168.1.1 22 ssh admin admin这段输出完整映射了攻击引擎的各个阶段Target exposes SSH service来自check()连通性探测的成功分支thread-0 thread is starting.../thread is terminated.对应run_threads创建的线程生命周期每一条SSH Authentication Failed / Successful均由 SSH 客户端的login()方法打印末尾的Elapsed time由 exploit.py 中的run_threads统计最终的凭据表格则通过print_table以(Target, Port, Service, Username, Password)为表头渲染。攻击引擎源码级剖析1. run → attack 的调用链模块实例的run()来自通用 SSH 模块ssh_default.pydef run(self): self.credentials [] self.attack()attack()被multi装饰器包裹ssh_default.pymulti def attack(self): if not self.check(): return print_status(Starting default credentials attack against SSH 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()确认目标暴露 SSH 服务再基于LockedIterator包装的字典启动多线程攻击结束后根据self.credentials是否非空决定打印成功表格还是报错。2. check()攻击前的服务探测def check(self): ssh_client self.ssh_create() if ssh_client.test_connect(): print_status(Target exposes SSH service, verboseself.verbosity) return True print_status(Target does not expose SSH, verboseself.verbosity) return Falsetest_connect()ssh_client.py的实现很巧妙它用固定的用户名root加 12 位随机密码去连接目标random_text(12)见 utils.py。若目标返回paramiko.AuthenticationException——说明 SSH 服务在线、只是认证失败——则判定暴露 SSH 服务并返回True若连接阶段就抛其他异常超时、拒绝连接等则返回False。3. 多线程攻击与凭据消费target_function是每个线程的执行体ssh_default.pydef target_function(self, running, data): while running.is_set(): try: username, password data.next().split(:, 1) ssh_client self.ssh_create() if ssh_client.login(username, password): if self.stop_on_success: running.clear() self.credentials.append((self.target, self.port, self.target_protocol, username, password)) ssh_client.close() except StopIteration: break要点有三线程安全data是LockedIteratorexploit.py内部持有一把threading.Lock保证多个线程不会取到同一条凭据凭据解析split(:, 1)只按第一个冒号切分因此密码本身可以包含冒号命中即停running.clear()会让所有线程在下一次循环检查时退出target_protocol由SSHClient基类固定为Protocol.SSHssh_client.py这也是结果表格中Service列显示ssh的来源。run_threadsexploit.py会为每个线程命名thread-0、thread-1……并在全部线程结束后打印耗时。4. SSH 客户端与 paramiko 细节认证动作最终落到SSHCli.login()ssh_client.pyself.ssh_client paramiko.SSHClient() self.ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())连接参数包含timeoutSSH_TIMEOUT8 秒ssh_client.py、banner_timeoutSSH_TIMEOUT、look_for_keysFalse、allow_agentFalse。后两个参数意味着攻击过程不会去读取本机 SSH 私钥或调用 ssh-agent从而保证认证结果完全由字典中的密码决定不会产生非预期命中。认证结果分三种处理paramiko.AuthenticationException打印认证失败并关闭连接其他异常打印SSH Error while authenticating成功则打印成功信息并返回True同时记录凭据。实战扩展一自定义凭据字典Grandstream 适配层默认只携带admin:admin一条凭据但在真实环境中同一型号不同固件版本的默认口令可能不同。三种常用扩展方式方式 1内联字典逗号分隔rsf (Grandstream Camera Default SSH Creds) set defaults admin:admin,admin:12345,root:root方式 2字典文件file://将凭据逐行写入文件每行一条user:pass然后rsf (Grandstream Camera Default SSH Creds) set defaults file:///path/to/grandstream_creds.txtOptWordlist在读取file://文件时会逐行strip()空行和首尾空白会被自动清理如果文件路径不存在__set__阶段就会抛出OptionValidationError(File ... does not exist.)option.py。方式 3加载全量内置字典把defaults显式指向仓库内置的全局字典 defaults.txt653 条常见设备默认凭据涵盖Admin:admin、Administrator:changeme、root:root等典型组合适合在不确定具体型号默认口令时扩大覆盖面rsf (Grandstream Camera Default SSH Creds) set defaults file://routersploit/resources/wordlists/defaults.txt注意字典越大、threads越高攻击越快但对目标设备的连接压力也越大请自行权衡。实战扩展二批量目标与全局选项批量目标target同样支持file://前缀文件每行一个ip:port。multi装饰器exploit.py会逐行解析若行内带端口则覆盖port否则沿用当前port值对每个目标依次执行一次完整攻击。全局选项若要对多个不同模块复用同一个target可改用setg设置全局选项interpreter.py 的command_setg会把选项写入GLOBAL_OPTS避免重复输入。模块测试与回归保障仓库为每个凭据模块都配套了单元测试test_ssh_default_creds.py 验证了该模块的关键契约exploit Exploit() assert exploit.target assert exploit.port 22 assert exploit.threads 1 assert exploit.defaults [admin:admin] assert exploit.stop_on_success is True assert exploit.verbosity is True测试断言了模块默认target为空、port为 22、threads为 1、defaults恰为[admin:admin]且stop_on_success、verbosity均默认为true。随后测试把target、port指向一个 mock 的 SSH 服务验证check()返回False、check_default()返回None、run()返回None即无凭据时模块安静结束、不抛异常。这套测试同时证明了 Grandstream 适配层确实收窄了通用模块的默认值——这正是厂商适配模块的设计模式继承引擎、覆写默认值、声明元数据。与其他 Grandstream 凭据模块的配合Grandstream 摄像头通常同时暴露多种管理服务单一 SSH 模块只能覆盖 22 端口这一条路径。在实战中建议按以下顺序组合检测模块路径覆盖服务默认端口creds/cameras/grandstream/ssh_default_credsSSH22creds/cameras/grandstream/telnet_default_credsTelnet23creds/cameras/grandstream/ftp_default_credsFTP21三者共享同一套继承通用引擎 覆写默认值的实现模式使用方式完全一致仅凭据字典与目标端口不同。此外routersploit 的 autopwn 扫描器autopwn.py可以自动遍历摄像头/路由器目标并批量调用对应的默认凭据模块适合在网段内做大规模巡检。小结creds/cameras/grandstream/ssh_default_creds是一个麻雀虽小、五脏俱全的典型凭据检测模块对外它只暴露了 4 个厂商相关选项对内却完整复用了 routersploit 的 SSH 客户端、参数校验、多线程调度、字典迭代与结果表格渲染整套引擎。通过 ssh_default_creds.py、ssh_default.py、ssh_client.py 三层源码你可以清晰看到适配层 → 通用引擎 → 协议客户端的职责分层而自定义字典、file://批量目标、setg全局选项等能力让这个模块在真实设备巡检中可以灵活扩展从单点验证升级为批量默认口令排查工具。赞分享网络安全嵌入式【免费下载链接】routersploitExploitation Framework for Embedded Devices项目地址https://gitcode.com/gh_mirrors/ro/routersploit点击查看免费下载相关推荐routersploit 实战Stardot 摄像头 FTP 默认凭据探测模块creds/cameras/stardot/ftp_default_creds深度解析routersploit 实战Stardot 摄像头 FTP 默认凭据探测模块creds/cameras/stardot/ftp_default_creds网络安全嵌入式routersploit 实战利用 ssh_default_creds 模块检测 Speco 摄像头默认 SSH 凭据routersploit 实战利用 ssh_default_creds 模块检测 Speco 摄像头默认 SSH 凭据 导读 本文围绕 routersploi网络安全嵌入式Avigilon 摄像头默认 SSH 凭据检测routersploit ssh_default_creds 模块实战指南Avigilon 摄像头默认 SSH 凭据检测routersploit ssh_default_creds 模块实战指南 导读 本文围绕 routersplo网络安全嵌入式创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考