最近已经用 OpenCode 搭配 Oh-My-OpenCode 替换 CC 了
在源码中找到 100 个小技巧

输入与文件操作

  1. 输入 @ 后跟文件名可模糊搜索并附加文件
  2. 以!开头可直接运行 shell 命令(如!ls -la)
  3. 拖放图片到终端可添加为上下文
  4. Ctrl+V 从剪贴板粘贴图片到提示框
  5. Ctrl+X E 或 /editor 在外部编辑器中编写消息
  6. Shift+Enter 或 Ctrl+J 在提示中添加换行
  7. Ctrl+C 清空输入框
  8. Escape 中途停止 AI 响应

Agent 与模型

  1. Tab 在 Build 和 Plan agent 之间切换
  2. 切换到 Plan agent 可获得建议而不实际修改
  3. 使用 @agent-name 在提示中调用专用子 agent
  4. F2 快速切换最近使用的模型
  5. /models 或 Ctrl+X M 查看和切换可用 AI 模型
  6. /connect 添加 75+ 支持的 LLM 提供商的 API key
  7. 使用 /connect 连接 OpenCode Zen 获取精选模型

会话管理

  1. /undo 撤销最后的消息和文件更改
  2. /redo 恢复之前撤销的消息和文件更改
  3. /share 创建对话的公开链接
  4. /unshare 取消会话的公开访问
  5. Ctrl+X N 或 /new 开始新会话
  6. /sessions 或 Ctrl+X L 列出并继续之前的对话
  7. /compact 在接近上下文限制时总结长会话
  8. Ctrl+X X 或 /export 将对话保存为 Markdown
  9. Ctrl+X Y 复制助手的最后一条消息到剪贴板
  10. Ctrl+X Right/Left 在父子会话间切换
  11. /rename 重命名当前会话
  12. Ctrl+X G 或 /timeline 跳转到特定消息

界面导航

  1. Ctrl+P 查看所有可用操作和命令
  2. Leader 键是 Ctrl+X,与其他键组合可快速操作
  3. Ctrl+X B 显示 / 隐藏侧边栏
  4. PageUp/PageDown 浏览对话历史
  5. Ctrl+G 或 Home 跳转到对话开头
  6. Ctrl+Alt+G 或 End 跳转到最新消息
  7. /theme 或 Ctrl+X T 在 50+ 内置主题间切换
  8. /init 根据代码库结构自动生成项目规则
  9. Ctrl+X H 切换消息中代码块的可见性
  10. Ctrl+X S 或 /status 查看系统状态信息
  11. 启用 tui.scroll_acceleration 获得 macOS 风格平滑滚动
  12. 通过命令面板 (Ctrl+P) 切换用户名显示
  13. /help 或 Ctrl+X H 显示帮助对话框
  14. /details 切换工具执行详情可见性
  15. Ctrl+Z 挂起终端返回 shell
  16. /review 审查未提交的更改、分支或 PR

配置文件

  1. 在项目根目录创建 opencode.json 进行项目特定设置
  2. 在~/.config/opencode/opencode.json 放置全局配置
  3. 添加 $schema 到配置以在编辑器中获得自动补全
  4. 配置 model 设置默认模型
  5. 通过 keybinds 部分覆盖任何快捷键
  6. 将快捷键设为 none 完全禁用它
  7. 在 mcp 配置部分配置本地或远程 MCP 服务器
  8. OpenCode 自动处理需要认证的远程 MCP 服务器的 OAuth
  9. 使用 {env:VAR_NAME} 语法在配置中引用环境变量
  10. 使用 {file:path} 在配置值中包含文件内容
  11. 使用 instructions 在配置中加载额外的规则文件
  12. 设置 agent temperature 从 0.0(专注)到 1.0(创意)
  13. 配置 maxSteps 限制每个请求的 agentic 迭代次数
  14. 设置 “tools”: {“bash”: false} 禁用特定工具
  15. 设置 “mcp_*”: false 禁用 MCP 服务器的所有工具
  16. 为每个 agent 配置覆盖全局工具设置
  17. 设置 “share”: “auto” 自动共享所有会话
  18. 设置 “share”: “disabled” 阻止任何会话共享
  19. 使用 “theme”: “system” 匹配终端颜色

自定义命令与 Agent

  1. 在 .opencode/command/ 添加 .md 文件定义可重用自定义提示
  2. 在自定义命令中使用 $ARGUMENTS、$1、$2 进行动态输入
  3. 在命令中使用反引号注入 shell 输出(如 git status
  4. 在 .opencode/agent/ 添加 .md 文件创建专用 AI 角色
  5. 为 edit、bash 和 webfetch 工具配置每个 agent 的权限
  6. 使用 “git *”: “allow” 模式进行细粒度 bash 权限
  7. 设置 “rm -rf *”: “deny” 阻止破坏性命令
  8. 配置 “git push”: “ask” 在推送前要求批准
  9. 运行 opencode agent create 进行引导式 agent 创建

格式化与 LSP

  1. OpenCode 使用 prettier、gofmt、ruff 等自动格式化文件
  2. 在配置中设置 “formatter”: false 禁用所有自动格式化
  3. 在配置中定义带文件扩展名的自定义格式化命令
  4. OpenCode 使用 LSP 服务器进行智能代码分析

工具与插件

  1. 在 .opencode/tool/ 创建 .ts 文件定义新的 LLM 工具
  2. 工具定义可以调用 Python、Go 等编写的脚本
  3. 在 .opencode/plugin/ 添加 .ts 文件创建事件钩子
  4. 使用插件在会话完成时发送系统通知
  5. 创建插件阻止 OpenCode 读取敏感文件

CLI 使用

  1. opencode run 用于非交互式脚本
  2. opencode run --continue 恢复上一个会话
  3. opencode run -f file.ts 通过 CLI 附加文件
  4. –format json 用于脚本中的机器可读输出
  5. opencode serve 用于无头 API 访问 OpenCode
  6. opencode run --attach 连接到运行中的服务器
  7. opencode upgrade 更新到最新版本
  8. opencode auth list 查看所有配置的提供商
  9. opencode debug config 排查配置问题
  10. –print-logs 标志在 stderr 中查看详细日志

GitHub 集成

  1. 在 GitHub issues/PRs 中使用 /opencode 触发 AI 操作
  2. opencode github install 设置 GitHub workflow
  3. 在 issues 上评论 /opencode fix this 自动创建 PR
  4. 在 PR 代码行上评论 /oc 进行针对性代码审查
  5. 提交项目的 AGENTS.md 文件到 Git 供团队共享

主题

  1. 在 .opencode/themes/ 目录创建 JSON 主题文件
  2. 主题支持深色 / 浅色变体
  3. 在自定义主题中引用 ANSI 颜色 0-255

权限

  1. doom_loop 权限防止无限工具调用循环
  2. external_directory 权限保护项目外的文件

容器化

  1. 运行 docker run -it --rm Package opencode · GitHub 使用容器化版本


来源


📌 转载信息
原作者:
chowxiaodi
转载时间:
2026/1/15 18:15:08

直接安装: app.lingkuma.org

Youtube 字幕使用教程

Tip

电脑端和安卓端 lingkuma 已经兼容原版 trancy 。
手机端必须使用内置的 lingkuma trancy,因为 safari 似乎有些问题,导致无法在 trancy 的元素上做高亮等。如果你知道如何修改请在 issues 中分享,万分感谢。

沉浸式字幕(电脑 / 手机支持)

  1. 手动选择目标语言的字幕,并启动默认字幕。

    • 更换语言,翻译等操作请在默认的字幕设置内更改,然后启动即可。
  2. 点击右侧快捷开关后即可启动

内嵌式字幕

  1. popup 中打开嵌入式字幕选项,然后刷新页面

📌 转载信息
原作者:
Claude4
转载时间:
2026/1/15 18:14:56

分享一套自研的 AI Agent 开发方法论,通过 Obsidian 管理 Spec 文档,让 AI 严格按照设计文档执行开发。核心思路很简单:

自己可能有个对系统的优化想法,通过 intent-confirmation 和 AI 对齐一下,你描述的可能不是很清楚,AI 通过这个 SKill 优化成专业一点的表达,同时确定修改范围,你觉着没问题了就进入了下面的 Spec 驱动开发流程:

先写 Spec(spec-writer)→ 用户确认 → AI 按文档执行(spec-executor)→ 审查是否符合 Spec(spec-reviewer)→ 完成归档。整个流程完全可追溯,每个功能都能追溯到 Spec 文档的具体章。

基于 MUSE 框架实现了三层记忆架构,让 AI 能够长期学习和积累经验:战略记忆存储项目级的「困境 - 策略」对,程序记忆存储可复用的标准操作流程(SOP),工具记忆记录操作完成后的固定步骤。

目前这套体系包含 12 个 Skills,覆盖了 Spec 创建、执行、更新、审查的完整闭环,还集成了 Obsidian 的双链、元数据、Callout 等特性来实现文档关联和动态索引。

GitHub 已开源,欢迎交流:GitHub - HHU3637kr/skills: 自用的一些 skills


📌 转载信息
原作者:
HHU3637kr
转载时间:
2026/1/15 18:14:11

之前看到 B 站上有人把 Cap 汉化并且去除登录限制了,但是一直没出 Mac 版本,就寻思自己 Vibe 一个。
Cap 是一款开源屏幕录制工具,对标 Screen Studio,基本功能大差不差,UI 也有点像,觉得有用的佬可以点个 Star 支持一下~


📌 转载信息
转载时间:
2026/1/15 18:13:57

继【 OpenCode - CPA - OneAPI 】 :

现象:

ValidationException: messages: text content blocks must be non-empty

原因分析:

  1. OpenCode 在工具调用后,assistant 消息可能只有 tool_calls 没有文字内容
  2. CPA 转换时设置 content: “”(空字符串)
  3. AWS Bedrock 比标准 OpenAI API 更严格,不接受空的 content

解决:

修改 CPA 源码 internal/translator/openai/claude/openai_claude_request.go

// 修复前
msgJSON, _ = sjson.Set(msgJSON, "content", "")

// 修复后:用空格替代空字符串
msgJSON, _ = sjson.Set(msgJSON, "content", " ")


📌 转载信息
转载时间:
2026/1/15 18:13:43

大家好!

我前几天在服务器上用 CC-Switch 时,GUI 版跑不起来(SSH 环境没图形),于是我做了一个 web/headless 版 cc-switch-web,把原版的供应
商 / MCP / 技能 / 提示词全搬到了浏览器里,让云端也能用。并且扩展了一些模板,添加了自动跳转备用服务商的功能。

效果(Web)

  • Skills 市场:浏览 / 一键安装

  • Prompt 编辑:提示词

- 页面展示:

  • 高级设置:目录重定向、导入导出、备份

为什么用 cc-switch-web?

  • 核心场景:服务器 / 云主机 + SSH,只需跑一个 Web Server,用浏览器管理。
  • 功能等价:供应商切换、MCP 统一管理、技能市场、提示词管理、导入导出 / 备份、双语。
  • 更安全:默认 Basic Auth 随机密码 + 同源;跨域需显式配置 CORS_ALLOW_ORIGINS。
  • 更云友好:可配 HOST/PORT,方便反代 / HTTPS;备用供应商自动切换,转发异常时兜底。
  • 更轻量:无 GUI 依赖,前后端分离,易脚本化、易自动化。

快速上手(Web)

pnpm install
pnpm build:web
cd src-tauri
cargo build --release --features web-server --bin cc-switch-server

启动(示例)

HOST=0.0.0.0 PORT=3000 ./target/release/cc-switch-server

  • 登录:admin / ~/.cc-switch/web_password(首次自动生成)。
  • CORS:默认同源;需要跨域时设置 CORS_ALLOW_ORIGINS(可选 CORS_ALLOW_CREDENTIALS=true)。
  • Web 模式无系统文件 / 目录选择器,路径需手动输入。

常用命令

  • 构建 Web 资源:pnpm build:web
  • 构建 / 运行 Web Server:cargo build --release --features web-server --bin cc-switch-server + HOST=… PORT=… ./target/
    release/cc-switch-server
  • API 测试:bash tests/run-all.sh(需运行中的 server)

维护说明
新版本刚上线,可能还有细节待打磨。欢迎提 issue:本周集中更新,之后每周定期维护,目标是把它打造成云开发也能放心用的可靠
工具。

项目信息

写在最后
核心业务逻辑基于 cc-switch,我做了 Web / 无头化和安全 / 云端增强。希望大家可以多多 star 、多提 issue,每个 issue、提交我都会看的 我们一起来完善这个工具吧。


📌 转载信息
原作者:
JINZHOU
转载时间:
2026/1/15 18:09:24

简要介绍:

一款专为 Claude Code 设计的智能 API 端点轮换代理工具。它可以帮助你管理多个 API 端点,实现自动故障转移、无感切换,并同时兼容 OpenAI 和 Gemini Api 格式,让你能够直接很方便的使用三大主流厂商的 API 服务。

主要功能:

  1. 自动多端点轮询:可同时配置多个 API 端点,当某个端点请求失败会自动切换到下一个可用端点
  2. 可兼容多格式 API:支持 Claude、OpenAI、Gemini 三种 API 格式互转
  3. 数据实时统计:实时监控请求数、错误数、Token 用量,并支持按月查看详细历史统计数据
  4. 数据同步备份:支持 WebDAV 同步功能,可将数据备份到云端,跨设备同步数据
  5. 跨平台多端应用:支持 Windows、macOS、Linux 系统使用
  6. 超多款主题皮肤:提供了 12 款主题皮肤自由选择,并支持昼夜皮肤自动切换
  7. 启动器功能:直接在程序中一键启动 CC
  8. 最新版已适配 CodeX:可以直接在 codex 中使用,无缝衔接
  9. 历史会话管理:可以查看每个历史会话详情,并一键启动终端继续会话

软件界面:

使用方式:

1. 修改对应配置文件中的 URL 地址 (端口默认 3000):

Claude Code 配置:

cc 配置文件路径 (Win 为例):C:\Users\xxx\.claude\settings.json

{ "env": { "ANTHROPIC_AUTH_TOKEN": "随便写,不重要", "ANTHROPIC_BASE_URL": "http://127.0.0.1:3000", } // 其他配置 } 

Codex CLI 配置:

只需要配置 ~/.codex/config.toml

model_provider = "ccNexus" model = "gpt-5-codex" preferred_auth_method = "apikey" [model_providers.ccNexus] name = "ccNexus" base_url = "http://localhost:3000/v1" wire_api = "responses" # 或 "chat" # 其他配置 

~/.codex/auth.json 可以忽略了

2. 在 ccNexus 中添加可用端点,启用后到 cc 或 cx 中使用即可

软件开源地址:

软件下载地址直达:

感谢大家阅读,里面没有了
确实没有了
真的没有了
真的真的没有了

小调皮一下

本软件纯公益开源,希望能够帮助到大家更高效的使用 CC,提高开发效率,愿佬们喜欢!使用过程中遇到的问题欢迎大家反馈

最新版本增加了一些新功能,欢迎使用,喜欢的话记得点个


📌 转载信息
原作者:
hea7enn
转载时间:
2026/1/15 18:06:35

韩国巨头Kyowon确认勒索软件攻击导致数据泄露

微软更新曾触发安全警报的Windows DLL文件

Reprompt攻击劫持Microsoft Copilot会话进行数据窃取

FortiSIEM严重命令注入漏洞的利用代码已公开

FTC禁止通用汽车五年内出售驾驶员位置数据

Palo Alto Networks警告存在可让黑客禁用防火墙的DoS漏洞

微软捣毁大型RedVDS网络犯罪虚拟桌面服务

ChatGPT即将推出的跨平台功能代号为"Agora"


0x1.前言

Brute Ratel C4(以下简称BRC4)是一位印度老哥开发的C2,用于对抗EDR,也是一款极其优秀的C2了。本文使用的BRC4版本为1.2.2(早已经有更新的破解版本了,但载荷都大差不差)。生成马被称为Badger,类似CobaltStrike的Beacon。如下图是它支持的一些规避方法。在第一篇文章后分析其实现方式,第二篇文章实现此睡眠混淆方式,以及如何在自己开发的马中实现Sleeping Masking。

什么是睡眠混淆,简单的来说就是你的马运行后,为了opsec,需要Sleep,CobaltStrike等C2就是默认Sleep 60s,这就是睡眠的概念。混淆就是指为了规避AV/EDR的内存扫描,需要在内存中对我们的马进行加密,这样就绕过了内存扫描。

在本文中分析BRC4的睡眠混淆方法中的利用APC来达到Sleeping Masking。什么是APC参考MSDN: https://learn.microsoft.com/en-us/windows/win32/sync/asynchronous-procedure-calls

image-20260109111047796.png



0x02.利用APC进行Sleeping Masking分析

搭建BRC4这些就不说了,创建的监听器的时候,设置Sleep Mask为APC。

image-20260109150623146.png



然后生成马子进行分析,Stageless即可。

image-20260109150850812.png



写个简单的加载器,直接开始调试就行。开头有大量push操作,猜测是核心载荷被压入栈,直接跳过这些。

image-20260109152541979.png



需要先绕过NtGlobalFlag的反调试,把ZF标志位改了就行,接着往下。

image-20260109153108824.png



在通过Hash的方式获取到一些API的地址后,RC4解密出了一个被抹掉MZ头的PE文件,带解密的内容很显然是前面push压入的数据。得到的是核心载荷,后面可能被反射式注入执行。

image-20260109153249913.png



我们将这个PE文件从内存中Dump出来。

image-20260109153413118.png



然后很显然接下来的这个call,开始反射式注入此解密出PE文件了。

image-20260109154412958.png



然后call rax,跳到修复后DLL执行DllMain开始执行。这大概就是Badger的执行上线流程。

image-20260109154716516.png



上线后,我们关注点是Sleeping Masking。直接定位到睡眠混淆的地方。

image-20260109165852761.png



可以根据动态函数地址以及前面Dump出的PE,在IDA中修改函数名(其中调用很多函数都是通过Syscall),进行分析。首先会在堆上分配很多CONTEXT结构,这里的0x4D0代表CONTEXT结构体大小。

image-20260109170053749.png



往下判断是否开启CFG,开启的话,使用SetProcessValidCallTargets扩展CFG允许集合。这是为了后续构造ROP链执行做准备。

image-20260109171734879.png



image-20260109172111715.png



为什么这里判断是否开启CFG?在实际中,一般shellcode都是注入到别的系统进程中,而不是自己写的Loader,系统进程例如RunTimerBorker.exe基本都是开启CF Guard的。所以这里的判断很合理也必要。

image-20260109172406849.png



继续往下看。第一个if块这里不太明白是在干嘛,像是获取当前PE的VA,调试发现不会进入这一块,先跳过。第二个if块是最关键的位置,显然能够进入此if块执行,第一个条件是创建了一个Event对象,第二个是创建了一个挂起的线程,入口点是TpReleaseCleanupGroupMembers + 0x450的地方。这个线程主要是为了后续调用ZwGetThreadContext,为分配的CONTEXT结构体,提供一个正常的CONTEXT和执行APC回调的地方。

image-20260109173644610.png



往下进入第二个if块内容。首先给这几个CONTEXT结构体赋值,表明对什么寄存器感兴趣。然后通过ZwDuplicateObject赋值了当前线程的句柄。然后调用ZwGetThreadContext获取前面TpReleaseCleanupGroupMembers + 0x450入口线程的CONTEXT。并依次赋值到所有的CONTEXT中去。

image-20260109182034372.png



sub_10019490函数中,之所以没有rename是因为找不到合适的名字,这个函数获取了一个CONTEXT。这个CONTEXT是从当前进程但不是当前执行线程的CONTEXT,在ZwGetThreadContext后,在对这个CONTEXT的Rsp值和Rip值进行处理。

image-20260109182323048.png



奇怪的是该函数返回后并不会进入下面的if分支。不过这里像是在做堆栈欺骗类似的动作?先不管吧,继续往下。

image-20260109182658006.png



开始构造ROP链,对前面分配的每个CONTEXT进行赋值。Rcx、Rdx、R8、R9分别是前四个参数,Rip是要执行的API,返回地址为NtTestAlert,作用就是为了触发APC队列。ROP链执行函数的顺序为ZwWaitForSingleObject、NtProtectVirtualMemory、SystemFunction032、ZwGetContextThread、ZwSetContextThread、WaitForSingleObjectEx、SystemFunction032、NtProtectVirtualMemory、ZwSetContextThread、RtlExitUserThread。

image-20260112100700434.png



image-20260112102159224.png



其中SystemFunction032可能会让我们感到疑惑,这是微软未公开的函数,其实就是一个RC4加密算法,ReactOS可以看到定义,在advapi32.dll模块中实现。前后各调用一次,即是对在内存的载荷加解密。

image-20260112160004248.png



然后到了最关键的地方,通过NtQueueApcThread插入到指定线程的APC队列,回调函数为ZwContinue,其作用是恢复CONTEXT下文,参数即为前面分配赋值的CONTEXT。插入完成后,NtAlertResumeThread恢复ThreadHandle,这里的Thread就是前面的TpReleaseCleanupGroupMembers + 0x450,然后设置Alerted状态,开始执行APC队列。

首先执行ZwWaiteForSingleObject,这里是为了等待NtSignalAndWaitForSingleObject Signal EventHandle,然后Waite ThreadHandle。

image-20260112104428693.png



执行NtProtectVirtualMemory将内存属性修改为RW,这样极大减少了被扫描的可能性,很多AV内存扫描的目标仅仅是带有X属性的内存。

image-20260112113705851.png



SystemFunction032 RC4加密相关内存。

image-20260112113947107.png



然后调用ZwGetThreadContext,获取前面通过ZwDuplicateObject复制的TargetHandle句柄(badger执行的主线程)的CONTEXT结构,调用ZwSetThreadContext设置TargetHandle的CONTEXT为sub_10019490获取的CONTEXT,这里像是在做调用堆栈的伪装,但是前面没进入那个IF块,又不像堆栈欺骗。这里可能是在睡眠期间,将调用堆栈也做了混淆,目的是看不出在进行了APC等睡眠混淆的操作。

调用WaitForSingleObjectEx模拟正常睡眠,这个时间就是Listener或Profile中设置的Sleep时长(0x4E20 == 20000)。

image-20260112115746030.png



睡眠完成后开始恢复,首先是再次调用SystemFunction032 RC4解密内存。

image-20260112120012634.png



然后NtProtectVirtualMemory恢复内存属性。

image-20260112120056230.png



调用ZwSetThreadContext还原TargetHandle的CONTEXT上下文。最后RtlExitUserThread退出TpReleaseCleanupGroupMembers + 0x450线程。

至此一个完成睡眠混淆流程结束。对于一个存活时间长的马,睡眠时间栈大多数,执行任务的时间很短。

可能有人要问,为什么我不能直接对马改内存属性和加密呢?还要写APC回调?这样写其实解决了加密代码不能加密自己的问题,以及修改了内存属性如何改回来的问题,万一有些AV就专门盯着你写的那块加密代码,这样马就被杀了。

下一篇文章中,根据分析结果实现APC Sleeping Masking

Palo Alto Networks已针对影响GlobalProtect网关和门户的高危安全漏洞发布安全更新,该公司表示目前已存在概念验证(PoC)利用程序。

该漏洞编号为CVE-2026-0227(CVSS评分:7.7),被描述为因异常条件检查不当(CWE-754)导致的GlobalProtect PAN-OS软件拒绝服务(DoS)状况。

"Palo Alto Networks PAN-OS软件中的漏洞使未经身份验证的攻击者能够对防火墙发起拒绝服务(DoS)攻击,"该公司在周三发布的公告中表示,"重复触发此问题将导致防火墙进入维护模式。"

该问题由一位未具名的外部研究人员发现并报告,影响以下版本:

  • PAN-OS 12.1 < 12.1.3-h3, < 12.1.4
  • PAN-OS 11.2 < 11.2.4-h15, < 11.2.7-h8, < 11.2.10-h2
  • PAN-OS 11.1 < 11.1.4-h27, < 11.1.6-h23, < 11.1.10-h9, < 11.1.13
  • PAN-OS 10.2 < 10.2.7-h32, < 10.2.10-h30, < 10.2.13-h18, < 10.2.16-h6, < 10.2.18-h1
  • PAN-OS 10.1 < 10.1.14-h20
  • Prisma Access 11.2 < 11.2.7-h8
  • Prisma Access 10.2 < 10.2.10-h29

Palo Alto Networks同时说明,该漏洞仅适用于启用了GlobalProtect网关或门户的PAN-OS下一代防火墙或Prisma Access配置。该公司的云下一代防火墙(NGFW)不受影响。目前没有可缓解此漏洞的临时解决方案。

尽管没有证据表明该漏洞已在野外被利用,但保持设备更新至关重要,特别是考虑到过去一年中暴露的GlobalProtect网关持续遭受扫描活动的情况。

觉得这篇文章有趣吗?请通过Google News、Twitter和LinkedIn关注我们,阅读我们发布的更多独家内容。

微软周三宣布已在美国和英国采取"协同法律行动",摧毁了一个名为RedVDS的网络犯罪订阅服务。据称该服务已造成数百万美元的欺诈损失。

这家科技巨头表示,此次行动是与执法部门合作的更广泛执法行动的一部分,使其能够没收恶意基础设施并将非法服务("redvds[.]com")下线。

微软数字犯罪部门助理总法律顾问Steven Masada表示:"RedVDS每月仅需24美元即可为犯罪分子提供一次性虚拟计算机访问权限,使得欺诈行为成本低廉、可扩展且难以追踪。自2025年3月以来,仅在美国,RedVDS推动的活动已造成约4000万美元的已报告欺诈损失。"

犯罪软件即服务(CaaS)产品日益成为一种利润丰厚的商业模式,将网络犯罪从曾经需要专业技术的专属领域,转变为一个即使缺乏经验的新手威胁行为者也能快速大规模实施复杂攻击的地下经济。

这些交钥匙服务涵盖广泛的模块化工具,从钓鱼工具包到窃密软件再到勒索软件,有效推动了网络犯罪的专业化,并成为复杂攻击的催化剂。

微软称RedVDS被宣传为一种在线订阅服务,提供运行未经授权软件(包括Windows)的廉价一次性虚拟计算机,使犯罪分子能够匿名操作并发送大量钓鱼邮件、托管诈骗基础设施、实施商业电子邮件入侵(BEC)计划、进行账户接管以及协助金融欺诈。

具体而言,它作为一个枢纽,通过功能丰富的用户界面提供具有完全管理员控制权且无使用限制的未经授权廉价Windows远程桌面协议(RDP)服务器。除了提供位于加拿大、美国、法国、荷兰、德国、新加坡和英国的服务器外,RedVDS还提供经销商面板以创建子用户并授予他们管理服务器的权限,而无需共享主站点的访问权限。

网站上的常见问题解答部分指出,用户可以利用其Telegram机器人在Telegram应用内管理服务器,而无需登录网站。值得注意的是,该服务不保留活动日志,这使其成为非法使用的有吸引力的选择。

根据互联网档案馆捕获的快照,RedVDS被宣传为一种"提高生产力并舒适轻松地在家工作"的方式。维护者在现已被查封的网站上表示,该服务最初成立于2017年,并在Discord、ICQ和Telegram上运营。网站于2019年上线。

微软表示:"RedVDS经常与生成式AI工具结合使用,帮助更快识别高价值目标,并生成更逼真、模仿合法通信的多媒体消息电子邮件线程。"并补充说,"观察到攻击者通过利用换脸、视频操纵和语音克隆AI工具冒充个人并欺骗受害者,进一步增强了欺骗性。"

RedVDS工具基础设施

自2025年9月以来,据称由RedVDS推动的攻击已导致全球超过191,000个组织遭到入侵或欺诈性访问,凸显了该服务的广泛影响范围。

这家Windows制造商以代号Storm-2470追踪RedVDS的开发者和维护者,并表示已识别出一个"全球分散的网络犯罪分子网络",他们利用该犯罪市场提供的基础设施攻击多个行业,包括美国、加拿大、英国、法国、德国、澳大利亚以及拥有重要银行基础设施目标的国家中的法律、建筑、制造、房地产、医疗保健和教育行业。

RedVDS攻击链

一些值得注意的威胁行为者包括Storm-2227、Storm-1575、Storm-1747,以及在2025年9月被摧毁前使用RaccoonO365钓鱼工具包的钓鱼行为者。该基础设施专门用于托管包含恶意和双重用途软件的工具包:

  • 大规模垃圾邮件/钓鱼邮件工具,如SuperMailer、UltraMailer、BlueMail、SquadMailer和Email Sorter Pro/Ultimate
  • 电子邮件地址收集器,如Sky Email Extractor,用于抓取或验证大量电子邮件地址
  • 隐私和操作安全工具,如Waterfox、Avast Secure Browser、Norton Private Browser、NordVPN和ExpressVPN
  • 远程访问工具,如AnyDesk

据称,一名威胁行为者使用配置的主机通过Microsoft Power Automate(Flow)使用Excel以编程方式(但未成功)发送电子邮件,而其他RedVDS用户则利用ChatGPT或其他OpenAI工具制作钓鱼诱饵、收集有关组织工作流程的情报以进行欺诈,并分发旨在窃取凭证并控制受害者账户的钓鱼消息。

RedVDS产品

这些攻击的最终目标是实施高度可信的BEC诈骗,允许威胁行为者介入与供应商的合法电子邮件对话,并发出虚假发票,诱骗目标将资金转移到其控制的骡子账户。

有趣的是,其服务条款禁止客户使用RedVDS发送钓鱼邮件、分发恶意软件、传输非法内容、扫描系统安全漏洞或从事拒绝服务(DoS)攻击。这表明威胁行为者显然试图限制或逃避责任。

简述以下代码的输出结果,并解释执行过程:

import { once, EventEmitter } from 'node:events';
import process from 'node:process';

const ee = new EventEmitter();

process.nextTick(() => {
  ee.emit('myevent', 42);
});

const [value] = await once(ee, 'myevent');
console.log(value);

const err = new Error('kaboom');
process.nextTick(() => {
  ee.emit('error', err);
});

try {
  await once(ee, 'myevent');
} catch (err) {
  console.error('error happened', err);
}

以上代码来自这里

里面涉及到的基础知识点有:

  1. Promise
  2. async/await
  3. Node.js 中的微任务队列与 nexttick 队列
  4. CJS 与 MJS 的差异
  5. Node.js 中的 EventEmitter

最后,这真的不算八股,AI 当然可以解释清楚,但这么一段简单清晰的代码,你还不知所以然的话,那对着 Vibe Coding 出来的屎山,最后只能束手无策了。

通用级PixVerse P1的技术突破,揣着进入平行世界的密码

0%
icon展开列表
通用级PixVerse P1的技术突破,揣着进入平行世界的密码
今天
img
Mira公司内乱?CTO被开除,带团队回OpenAI,翁荔上推发言
今天
img
Nature丨清华等团队揭示AI科研双重效应:个人效率亦或是科学边界
今天
img
刚刚,喝到了千问APP给我点的奶茶
今天
img
人脸机器人登上Science Robotics封面:用AI教会仿生人脸机器人「开口说话」
今天
img
实测夸克「千问划词快捷指令」,这7个邪修Prompt,建议收藏
今天
img
已证实!清华姚班陈立杰全职加入OpenAI,保留伯克利教职
今天
img
解锁任意步数文生图,港大&Adobe全新Self-E框架学会自我评估
今天
img
5分钟定制一个AI采购专家:讯飞发布“招采智能体工厂”,重新定义行业开发范式
今天
img
Agent时代,为什么多模态数据湖是必选项?
今天
img
大模型长脑子了?研究发现LLM中层会自发模拟人脑进化
今天
img
性能提升60%,英特尔Ultra3这次带来了巨大提升
01月14日
img
继宇树后,唯一获得三家大厂押注的自变量:具身模型不是把DeepSeek塞进机器人
01月14日
img
Sebastian Raschka 2026预测:Transformer统治依旧,但扩散模型正悄然崛起
01月14日
img
端到端智驾新SOTA | KnowVal:懂法律道德、有价值观的智能驾驶系统
01月14日
img
仅用10天?Anthropic最新智能体Cowork的代码竟然都是Claude写的
01月14日
img
AAAI 2026|AP2O-Coder 让大模型拥有「错题本」,像人类一样按题型高效刷题
01月14日
img
用AI从常规病理切片重建空间蛋白图谱:基于H&E图像的高维蛋白质表达预测
01月14日
img
京东首届AI影视创作大赛启动 最高奖金10万元邀全民共创AI视频
01月14日
img
合合信息多模态文本智能产品“上新”,覆盖AI教育、AI健康、AI Infra多元场景
01月14日
img

通用级PixVerse P1的技术突破,揣着进入平行世界的密码

原来,视频生成卷到极致,就是突破大脑和视觉的边界,让想象力进入 AI 构建的虚拟空间。

昨天,PixVerse R1 突然上线。一开始我们以为这只是一次普通的版本更新,但那种「即时响应、即看即创」的全新交互体验,却是前所未有的。读完技术报告我们发现,这不仅仅是一次卷到极致的性能提升,更是量变带来的质变。

回顾过去,23 年推出第一版模型,随后 Web 端、移动端全面铺开,爱诗科技在 DiT 路线上一路狂奔:从 24 年底的 10 秒生成,到 25 年 2 月实现 5 秒生成社交级视频,再到 11 月将 1080P 视频生成压缩至 30 秒。在自研模型技术和工程化落地的思想下,PixVerse 确实将「传统视频生成」的速度推向了极限。

与此同时,行业加速从未停歇。就在上个月,生数科技宣布其与清华大学团队研发的 TurboDiffusion 框架,也让视频生成正式迈入「秒级」门槛。

但时间上的「卷」就是视频生成的全部吗?

显然,再快的速度,如果不能生产出符合制作需求的画质和一致性,依然无法成为通用的标准。

PixVerse 曾是业界第一个把 5 秒视频生成做到 5 秒之内的团队,而当一切看似达到极限时,在 2026 年开年,PixVerse R1 模型与产品同步横空出世。

通过将计算效率提升数百倍,它不再局限于「秒级」,而是做到了人类肉眼感知范围内的「实时」生成。发布即实装,这是一款真正的「通用」实时世界模型。这已不仅是单点的技术突破,而是一步到位、直接实现应用层级质变的代际跨越。

以下,我们将通过技术报告,为您详细解析 R1 的这次突破。

看了这个视频,大家或许理解了什么是「无限内容」的视频生成。

在这个模型创造的世界里,「汉语竟是上古禁咒」,你只要说出「春」即刻绿草如茵,说出「鸟」即刻飞鸟成群。一切都是如此连续,直白,世界实时响应你的呼唤,时间和空间都在你的掌控之中。或许,PixVerse R1 已经彻底掌握了「无限流」的真谛。

简单来说,PixVerse R1 是全球首个支持最高 1080P 分辨率通用实时世界模型。

这也是第一次,AI 可以基于用户的意图实时生成一个持续演化、物理上合理的世界,标志着视频生成正式从「静态输出」迈入「实时交互」的全新阶段。

回顾视频生成技术的发展路径,行业始终受困于速度、质量与成本的不可能三角:高画质往往意味着高延迟(如传统扩散模型),而追求速度又不得不牺牲物理一致性。PixVerse R1 没有盲目追求参数军备竞赛,而是找到了一条通往「通用」的平衡之路:

当一个模型首先做到了打破物理极限的实时响应(IRE),并以此为基础结合了通用全模态(Omni)与长时序世界模拟(自回归),它就已经超越了传统意义上的视频生成工具。

图片
  • 技术博客链接:https://pixverse.ai/en/blog/pixverse-r1-next-generation-real-time-world-model

交互的物理极限:瞬时响应引擎(IRE)

在通往通用世界模型的路径上,「实时性」始终是阻碍技术从实验室走向大规模应用的核心工程障碍。

传统扩散模型的生成逻辑本质上是一种精细的迭代去噪过程,通常需要 50 步甚至更多的采样步骤,才能将高斯噪声转化为清晰的视觉内容。这种机制虽然在一定程度上保证了生成质量,但其带来的秒级甚至分钟级的高延迟,使得 AI 视频生成长期停留在「离线制作、预录制回放」的阶段,无法满足即时交互的严苛需求。

不过,生成速度始终是 PixVerse 的强项,其在响应时间上一骑绝尘。早在 PixVerse V4.5 的时候我们就实测过,即使我们将各项生成指标拉满,平台输出结果的时间也没有超过 1 分钟

但是,为了更进一步,实现彻底的「实时响应」,PixVerse 在 R1 上决心彻底重构底层推理架构,提出了瞬时响应引擎(Instantaneous Response Engine,IRE)

这是一套针对采样过程的系统级加速方案,通过三大关键技术,在保持 1080P 高分辨率生成的前提下,将推理时间压缩到极致。

时间轨迹折叠

不同于传统方法在加噪去噪过程上进行漫长的逐步逼近,该技术引入「直接传输映射」作为结构先验,建立噪声到数据的直线通路,能够直接预测干净数据的分布路径。

这种方法在数学上有效地「折叠」了原本冗长的时间维度,将传统扩散模型所需的 50+ 采样步数暴力压缩至仅需 1-4 步。这一数量级的步数缩减,直接从源头上解决了计算量过大的问题,实现了推理速度的质变。

引导校正

针对为了保证生成质量通常采用的无分类器引导策略(Classifier-Free Guidance,CFG)所带来的双倍计算开销问题,PixVerse R1 团队通过将条件梯度直接融合进模型内部,使得系统在推理阶段无需再进行正负样本的双重计算。

这一优化成功绕过了传统 CFG 的计算瓶颈,在不牺牲指令遵循能力的情况下,进一步降低了计算复杂度。

自适应稀疏注意力

为了应对高分辨率视频生成带来的巨大显存与计算压力,IRE 采用了自适应稀疏注意力机制。

该机制能够动态分析视频生成过程中的上下文依赖,智能识别并剪除长程依赖中的冗余计算,从而显著压缩了计算图,大幅提升了整体推理效率。

图片

       即时响应引擎由三个模块组成:时间轨迹折叠、引导修正和自适应稀疏注意力学习。

通用的认知底座:Omni 原生多模态基础模型

如果说「瞬时响应引擎」解决了传输的速度问题,那么一个强大的底座模型,则决定了传输内容的质量与上限。

底座模型是一切新功能新特性的基础。构建通用实时世界模型的第一步,在于打破单一模态的感知壁垒,只有设计一个完全端到端的原生多模态基础模型,才能彻底超越传统生成流程的局限

在当前的视频生成技术栈中,多为非端到端的生成方式。往往需要生成一种模态之后通过级联的方式生成另一种模态,这种方式下需要反复的铺路搭桥,尤其是在处理复杂的跨模态交互上,自然显著影响了生成的效率,也限制了模型的通用性。

为了实现无限的通用性,模型必须强调:原生,原生,还是原生

PixVerse R1 提出的 Omni 原生端到端多模态基础模型,正是通过底层架构的重构,实现了「因原生而通用」。

原生统一表示

Transformer 架构给了生成模型无穷的想象和可能性。

Omni 模型引入了统一 Token 流架构。该架构基于 Transformer,摒弃了异构模型拼接的传统路径,将文本、图像、音频与视频等不同模态的数据,统一编码为单一的生成序列。

在这一框架下,模型不再是将文本「翻译」为视觉信号,而是在原生层面上实现了对多模态数据的联合处理与理解。这种全模态的「通感」能力,使得模型能够精准捕捉文本指令与视听内容之间的深层关联,从而支撑起游戏、影视等多领域的通用化应用。

原生分辨率

除了多模态数据的原生处理,第二个原生,是实现高分辨率视频生成的核心特性:原生分辨率

Omni 模型引入这一机制,旨在解决传统视频生成模型中因数据预处理而导致的画面构图破坏与几何失真问题。

为了适配固定的模型输入结构,传统方案往往采取「强制裁剪」或「缩放拉伸」的策略。这种「削足适履」的方式,会导致画面关键信息被裁切丢失,或使物体形态发生非物理的扭曲变形(如被压扁或拉长)。

相比之下,Omni 模型坚持在原生分辨率和原始比例下进行端到端的学习。这一架构使其能够自适应处理任意长宽比的素材,从根源上消除了因裁切或缩放带来的视觉偏差,确保了生成内容在构图完整性与物理几何上的真实感

图片

Omni 原生多模态基础模型的端到端架构,统一设计使 Omni 模型能够接受任意多模态输入并同时生成音频和视频。

值得一提的是,模型通过原生学习大量真实世界视频数据,来确保真实世界的内在物理定律和动态的真实性。因此,Omni 模型的功能,似乎不仅限于生成引擎,更具备构建世界模型的潜力

世界的连续演化:自回归流式生成机制

构建「世界模型」的挑战之一,在于如何从生成分段的「切片」,跨越到模拟连续的「过程」。在这一维度上,PixVerse R1 重点解决的是长视频生成中普遍存在的「长时序一致性」难题,以及伴随而来的显存成本瓶颈。

在传统的视频生成流程中,模型通常受限于固定时长的生成窗口。当试图延长视频长度时,往往面临「时间误差累积」的问题:随着生成帧数的增加,微小的预测偏差会不断叠加,导致画面内容逐渐偏离初始设定,例如角色的外貌特征发生漂移,或物理环境逻辑出现崩坏。

此外,为了维持上下文的一致性,传统架构需要保存海量的历史状态,导致显存消耗呈指数级上升,使得长视频生成在计算成本上变得不可控。尤其是在 PixVerse R1 追求的「无限内容」的生成模式下,以上问题如果没有妥善处理,会出现严重的问题。

针对上述痛点,PixVerse R1 摒弃了传统的全局预测模式,构建了自回归流式生成机制

无限流式生成

在生成范式上,R1 采用了自回归建模。系统将视频合成任务重构为逐帧预测的流式过程,而非一次性生成固定片段。

这种架构从根本上解除了时长的硬性约束,实现了理论上的「无限流式生成」。视频不再是受限的帧组合,而成为可以根据即时输入,无限向前延展的时间流。

时间一致性

为了在无限延展中保持逻辑自洽,传统方法下基于帧上下文的特征记忆,大多有着数十秒的时间限制,显然是不够用的。

为此,R1 引入了记忆增强注意力模块。该模块能够显式地提取并锁定视频中的关键特征(如角色的身份特征、场景的空间布局等),将其转化为紧凑的记忆单元。

在生成后续内容时,模型无需回头重算所有历史数据的全量注意力,而是直接调用「记忆」。这一设计在维持长程依赖的同时,极大地优化了计算效率,避免了显存资源的爆炸式增长。

图片

      集成自回归建模与全能基础模型。

从技术逻辑上看,这一机制赋予了 AI 模型「长期记忆」的能力,打破了传统帧间上下文的限制,确保了 PixVerse R1 生成的内容不再是孤立、破碎的视觉片段,而是一个具备持续演化能力的「平行时空」。

无论生成时长如何延伸,核心主体的统一性与环境逻辑的连贯性始终保持稳定,这种物理与逻辑的持久性,正是「通用实时世界模型」成立的关键基石

结语:正在发生的现在

正如爱诗科技 CEO 王长虎所言:传统视频是被记录的历史,而 PixVerse R1 开创了「正在发生的现在」。

PixVerse R1 开启的是 AI 原生游戏、互动电影、实时仿真等全新媒介形态的大门,是未来「可交互的数字世界」的计算基础设施。

视频内容的消费边界正在消融。

媒体形态将不再局限于预先渲染的固定画面,而是转向由用户意图驱动的即时生成流。

PixVerse R1 以「通用实时世界模型」的形态,为这一未来提供了可落地的技术样本,也让视听媒介真正从「回放过去」迈向了「未来创作」。


faker靶机复现

该靶机来自maze-sec团队

靶机提示

提示:初始凭证db-user:whoami
提示:user的flag在c:/根目录下

因为这台靶机有段时间了 而且是windows的

所以靶机的账号密码要提前修改一下

提示里面刚好有aksk

image.png



登录一下然后修改密码

image.png



提示过期了 所以需要修改一下

image.png



更改成功

现在aksk是

端口扫描

先简单扫一下端口

image.png



得到目标靶机ip为192.168.20.137

image.png



发现存mssql服务 端口为1433

还得到了靶机名与域名等信息

我们现在就用提示给的aksk去授权登录mssql服务

测试mssql

使用imapacket工具中的mssqlclient进行连接

记得一定要跟上-windows-auth

因为提示给的aksk是window账号 不是mssql服务的数据库账号

所以需要通过window账号授权登录

image.png



成功登上mssql服务

这里的密码是我们自己修改后的密码

如果没修改的话是登不上去的

查看当前数据库并查看是否开启了trustworthy

image.png



可以发现有2个数据库开启了trustworthy

什么是trustworthy

image.png



这是一个sqlserver的一个属性

如果开启了这个 就可以访问到外部资源 简单来说就可以使用某些函数或者模块来命令执行访问计算机中的资源 不仅仅是数据库中的资源

当然前提是我们操作的用户得是sysadmin用户

user思路

那么getshell的思路就来了 我们需要一个有sysadmin权限的用户来开启 xp_cmdshell模块

然后使用 xp_cmdshell进行getshell

那么我们要怎么获得有sysadmin权限的用户呢

在mssql中 sysadmin角色登录到数据库中映射的用户默认都是dbo用户

这个dbo的数据库用户可能拥有sysadmin权限

我们先看看faker数据库中的用户

切换到faker数据库

image.png



查看该数据库中的各类权限是否有对应的用户拥有

image.png



不难看出 我们的db-user用户有db_owner权限

还有一个dbo用户

因为我们有db_owner权限 所以我们可以切换当前上下文用户

我们使用execute as user语句进行上下文切换 也就是切换当前数据库用户

我们将当前数据库用户切换为dbo 查看这个用户是否拥有sysadmin权限

image.png



切换成功并且有sysadmin权限

那么我们就可以开启xp_cmdshell来提权了

开启监听

image.png



image.png



image.png



成功拿到shell

根据提示得到flag

image.png



root

在user的flag里面有一个提示

问问ai

image.png



提示我们是sqlserver agent 是sqlserver的代理服务

我们先查看得到的shell的用户有什么权限

再看之前 我们先把这个shell弹到别处优化一下

我这里直接弹到vshell上面了

image.png



开启vshell并生成一个马子

在靶机中下载木马并执行

image.png



成功上线

image.png



我们继续之前的操作

image.png



这个系统用户没什么权限

那么我们只能去看看那个agent

回到mssql中 看看有没有这个服务

切换到master这个系统级的数据库并查询

image.png



确实存在这个代理服务

那么我们现在通过设定定时任务去弹shell

因为我们有dbo这个sysadmin这个角色 所有可以直接设定任务

image.png



image.png



成功得到shell

是另一个服务级用户

一样是传马然后弹到vshell上面

image.png



有一个SeImpersonatePrivilege权限那么我们可以直接使用土豆提权

什么是土豆提权

简单来说就是捕获ntml认证数据包 并篡改数据包的内容 获得system的token 从而以高权限用户那弹shell回来 最终效果就是得到system的shell

只要有SeImpersonatePrivilege权限那么就可以使用土豆提权

上传exp PrintSpoofer64.exe

image.png



image.png



提权成功

zfs 的速度太夸张了,我的 hdd 加速后性能直逼 ssd 了。

https://imgur.com/a/NnSlmIi

我在 pve 用一个 4t hdd 创建 zfs 存储池,海鲜市场 128g ssd 充当 special vdev,然后分别测试了 zfs 下目录和 zvol 两种模式下的 raw 磁盘性能,z 盘是 zvol 的测试,f 盘是目录的测试,右上角的数字是测试顺序。

第二轮的测试结果有些夸张,我怀疑是进缓存了,但是测试软件应该会排除这种情况吧?

pve 能使用的内存:12g
win10ltsc 内存:50g

z 盘 zvol 参数

NAME       PROPERTY              VALUE                 SOURCE
hdd4t-zfs  volblocksize          -                     -
hdd4t-zfs  compression           lz4                   local
hdd4t-zfs  sync                  disabled              local
hdd4t-zfs  atime                 off                   local
hdd4t-zfs  xattr                 sa                    local
hdd4t-zfs  dnodesize             auto                  local
hdd4t-zfs  acltype               off                   default
hdd4t-zfs  recordsize            128K                  default
hdd4t-zfs  special_small_blocks  0                     default

f 盘目录参数

NAME                 PROPERTY              VALUE                 SOURCE
hdd4t-zfs/file_test  volblocksize          -                     -
hdd4t-zfs/file_test  compression           lz4                   inherited from hdd4t-zfs
hdd4t-zfs/file_test  sync                  disabled              inherited from hdd4t-zfs
hdd4t-zfs/file_test  atime                 off                   inherited from hdd4t-zfs
hdd4t-zfs/file_test  xattr                 sa                    inherited from hdd4t-zfs
hdd4t-zfs/file_test  dnodesize             auto                  inherited from hdd4t-zfs
hdd4t-zfs/file_test  acltype               off                   default
hdd4t-zfs/file_test  recordsize            32K                   local
hdd4t-zfs/file_test  special_small_blocks  16K                   local

韩国巨头Kyowon确认在勒索软件攻击中发生数据窃取

Microsoft更新曾触发安全警报的Windows DLL

Reprompt攻击劫持Microsoft Copilot会话以窃取数据

FortiSIEM严重命令注入漏洞的利用代码已公开

Microsoft捣毁大型RedVDS网络犯罪虚拟桌面服务

ChatGPT即将推出的跨平台功能代号为"Agora"

Google计划通过Gemini将Chrome for Android打造成智能代理浏览器

Google个人智能系统将Gmail、照片和搜索与Gemini相连接


从 VCTF2025 ez_train学习torch.load反序列化绕过

前言

感觉挺有意思的一道题,赛后看了一下,这个题目主要考察了代码审计和 torch.load 在 weights_only=True 条件下的利用。

题目环境搭建

下载题目附件并解压,

file-20260113204022005.png



题目直接给了 docker 环境,但是是 linux 环境的,为了方便待会调试这里按照题目版本去官网上下载一个 windows 版本的,

file-20260113203804115.png



然后按照题目给的 requirements.txt 中的依赖进行下载,下载好后运行 server.py 启动,启动后如下,

file-20260113204526100.png



这里还注意到题目在 text-generation-webui-3.13\user_data\training\datasets 目录中放了一些文件,一起复制过来。

题目分析

查看题目描述:

file-20260113204951881.png



结合题目名称我们应该主要看 train 模块了,全局搜索发现就只有个 trianing.py 文件

file-20260113205156648.png



然后像这类微调训练大模型的本地 web 应用比较耳熟能详的就是 torch.load 引起的反序列化漏洞了,而这个 training 中就恰好存在这个方法的调用,不难看出这里应该就是出题人的考点了,

file-20260113205625132.png



这段代码大概意思是从 adapter_model.bin 加载 LoRA 的权重参数(只包含 LoRA,不包含基础模型),接着将加载的 LoRA 权重注入到当前的 lora_model 中,如果这个文件内容我们可以控制这里是不是就能进行反序列化了呢?

我们先看这个 {lora_file_path} 能不能控制,简单溯源一下,

file-20260113210229786.png



发现 {lora_file_path} 是由 {Path(shared.args.lora_dir)}{lora_file_path} 拼接而成的,{lora_file_path}lora_name 的值,而这个 lora_name 的值其实就是我们训练时传入的参数,

file-20260113211019396.png


file-20260113211055508.png



至于 {Path(shared.args.lora_dir)} 的值我们调试发现为 user_data/loras 目录,是个固定值,

file-20260113210937792.png



那么现在知道 {lora_file_path} 就一小部分能控制,感觉没什么用啊,而且还需要我们能把文件 adapter_model.bin 文件上传到这个目录下。

后面找了一圈没找到哪里可以上传,但是发现这个应用可以从 huggingface 远程下载 model,而且下载目录就在我们的 user_data/loras 下面吗。简单测试一下,这里填入“paulinsider/llamafactory-hack”,然后点击下载,

file-20260113212126010.png



确实成功把文件下载到了我们要的目录。

file-20260113212353132.png



那么这样思路就清晰了,我们就可以在远程 model 中放入恶意的 adapter_model.bin 文件,然后下载到本地,通过控制训练时的 lora_name 参数使得最后 torch.load 加载的文件是我们的恶意文件,

这里简单尝试一下,假设刚刚下载的 paulinsider_llamafactory-hack 目录下存在恶意 adapter_model.bin 文件,我们填写训练 lora_name 为 paulinsider_llamafactory-hack

file-20260113213321532.png



点击训练后,看到成功使得 torch.load 的文件是我们能控制的文件了,

file-20260113213310006.png



但是这里还是没法进行反序列化,因为这里得 lora_name 设置了weights_only 参数为 True。

torch.load 反序列化绕过

查看题目的requirements.txt 文件发现给的 torch 版本为 2.5.1,网上简单搜了下不难发现其实还是存在绕过方法的,

file-20260113214328275.png



参考 https://i.blackhat.com/BH-USA-25/Presentations/US-25-Jian-Lishuo-Safe-Harbor-or-Hostile-Waters.pdf ,我们先看看这个 weights_only 的工作原理

生成个恶意的 pickle 反序列化文件

torch.load demo

进入 torch.load 中看到当 weights_only 为 true 时会调用到 _legacy_load 方法,

file-20260113215502623.png



然后一直到 pickle_module.load 方法,

file-20260113215923584.png



和正常的 pickle.load() 不一样,这里会调用到 Unpickler.load() 方法,这里面会依次读取字节,然后对每个字节进行判断,对全局变量和函数都有白名单进行限制

file-20260113220408194.png



只能用白名单中提供的,

file-20260113220439125.png



这个白名单是绕不过了,其中也没什么有用的,根据参考文章知道在 torch.load 中其实还调用了 torch.jit.load 方法,而且不受weights_only 参数影响,这个方法可以加载一个已经用 TorchScript 保存好的模型,用于直接推理(不需要原始 Python 代码)

file-20260113220646171.png



所以现在关键是看怎么生成个恶意的 TorchScript 模型,这里面涉及到了 TorchScript 运算符的概念,根据参考文章知道作者是发现了 torch.save 最后可以调用到 aten::save 运算符实现写文件操作,所以最后生成恶意的 TorchScript 模型代码如下

这里注意到在 torch.load 代码下面还有个 newModule.items() 方法调用 ,这里是漏洞触发点,如果只返回了 TorchScript 模型对象是没办法触发到里面的 torch.save 方法,

回到题目,我们可以让adapter_model.bin 为恶意的 TorchScript 模型,然后我们还需要找下触发点,

file-20260113221624043.png



看到返回 state_dict_peft 后调用了 set_peft_model_state_dict 方法进行处理,跟进这个 set_peft_model_state_dict ,把 state_dict_peft 赋值给了state_dict

file-20260113221730914.png



后面又调用到了 _insert_adapter_name_into_state_dict

file-20260113221818019.png



最后发现调用的还是 items 方法

file-20260113221958131.png



所以直接用上面的 poc 就可以了,这里就直接把生成的恶意文件复制到 paulinsider_llamafactory-hack 目录下,然后和上面一下训练

file-20260113223421839.png



成功实现写文件操作

file-20260113223444024.png



查看题目给的 docker 文件不难发现最后应该是通过写定时任务实现 rce。

参考

https://i.blackhat.com/BH-USA-25/Presentations/US-25-Jian-Lishuo-Safe-Harbor-or-Hostile-Waters.pdf

https://github.com/ChaMd5Team/Venom-WP/blob/main/2025VenomCTF/2025_venomctf_web_ez_train.pdf

https://mp.weixin.qq.com/s/2VsxBTIiX5P8b16Rl1ylcA

十多年前,非常喜欢用 OhLife 写日记。每天晚上收到一封邮件,回复一下今天发生了什么,不用打开 App ,不用专门登录网站,这种“无压力”的记录方式让我坚持了很久。

可惜后来它关停了。我又变成了懒汉...

最近一直 Vibe Coding ,于是就有了 OhLife.cc

###核心功能(原汁原味)

  • 📩 每天一封邮件 :每晚 9 点(可设置时区)收到邮件,回复即记录。
  • 📜 极简时间轴 :网页版只做展示,还原了经典的信纸风格,没有任何多余的社交或复杂功能。
  • 🔒 隐私安全 :所有日记内容在数据库层加密存储。
  • 💊 时间胶囊 :可以给未来的自己写封信。

###为什么能活更久

这东西不怎么费钱,但用户量起来后我也投不起...想了个好玩的运营思路
打赏...好像有点土,但土中带着点理想

网站右下角有一个 Status Widget (实时看板),它会显示:

  1. 当前的运营成本 :Resend 邮件费、Supabase 数据库费、域名费等。
  2. 当前的资金池 :收到的捐赠( Buy Me a Coffee / 爱发电)。
  3. 还能活多久 :根据当前资金和用户量,自动计算出的“剩余寿命( Runway )”。

只要进度条还没归零,这个服务就会一直跑下去。
当然,归零了也有机会跑下去。因为主要成本是 Resend 的邮件服务调用费,可以先把已经停用的用户停掉...

之后会想一下如何给大哥们更多的权益...

###为什么你会喜欢他
相信我,当你身边都是 AI 时,你需要一个真实的人类,那个人最好是你。白天要应付 AI 和越来越 AI 的人类,晚上,和自己小酌一杯吧。

👉 体验地址 : https://ohlife.cc

拦截猫于 2024 年 1 月 16 日 正式上线,转眼已经陪伴大家走过 两年。

从最初拦截率并不理想、不断打磨算法与规则体系,到如今 已有 80% 的用户获得了稳定且有效的拦截体验,拦截猫一步一步走到了今天。

感谢每一位用户的反馈与支持 ❤️
目前,拦截猫在 电话与短信拦截 这件事上已经趋于成熟,能做的优化也越来越接近极限。

但拦截猫并不会停下脚步。
2026 年,我们正在研发两个全新的创新功能:
其中一个是正在推进的「黑科技」,目标是解决 另外 20% 拦截效果不理想的用户场景,预计这两个月发布。
另一个 —— 暂时保密 🤫

拦截猫仍在进化中 🚀

(图片来自于,用户的最新反馈截图)

cover 3.png

为庆祝拦截猫上线 2 周年,我们准备了一波限时福利 🎁

📌 通过下方链接可兑换 3 个月会员(限量 500 个)
👉 仅限新用户使用

欢迎大家转发给身边的朋友一起体验拦截猫~ 标记的人越多,整体拦截效果就越好 💪

🔗 兑换链接:

https://apps.apple.com/redeem?ctx=offercodes&id=6476010032&code=LJM888

📱 使用手机 Safari 浏览器打开,即可直接兑换