绕过安全护栏

抱歉,我只是一个大语言模型。

预填思维链#

AI 在回答之前,通常会有一段思维链(Chain of Thought,CoT;也有技术博客称其为 thinking tokens):

这是模型的内部思考过程。在网络安全场景,模型会根据内部思考得出的结论来决定是否触发“安全护栏”。

比如上例中,模型内部思考得到的关键判断结论:

Text
This is allowed as educational security content (CTF context, defensive/offensive learning). I should provide a thorough answer about bypassing event-handler filters in XSS.

这是教育性安全内容(CTF 场景、防御/攻击学习),是被允许的。我应当就绕过 XSS 中的事件处理器过滤器给出详尽解答。

由于模型判断出用户意图并没有恶意,就开始认真回答用户的问题。但是,如果模型经过内部思考得出的结论是“危险操作,给出简短的拒绝说明”,就会导致用户得不到想要的答案。

在调用模型 API 的场景中,大部分厂商并不支持对思维链的相关操作,但是会输出完整思维链。

Info

目前(2026),大部分海外顶尖模型(Claude、OpenAI……)都已经关闭完整思维链(说是为了防止蒸馏攻击)。但是国模基本都会返回完整的思维链。

以 DeepSeek 为例,其官方文档指明,在思考模式下,思维链的内容会通过 reasoning_content 参数返回,与 content 同级,一个简单的测试代码:

Python
# test.py
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get('DEEP'),
    base_url="https://api.deepseek.com",
)

response = client.chat.completions.create(
    model="deepseek-flash",
    messages=[
        {"role": "system", "content": "You are a helpful assistant"},
        {"role": "user", "content": "介绍一下什么是 AngularJS 沙箱。"},
    ],
    stream=False,
    extra_body={
        "thinking": {"type": "enabled"}
    }
)

print('===== 思维链 =====')
print(response.choices[0].message.reasoning_content)
print('===== 回答正文 =====')
print(response.choices[0].message.content)

输出:

Bash
$ export DEEP='你的 DeepSeek API Key'

$ python test.py 
===== 思维链 =====
We need answer in Chinese. Need introduce AngularJS sandbox. Need be accurate. AngularJS sandbox refers expression sandbox in AngularJS 1.x, intended to restrict access to global objects / prevent arbitrary JS in expressions. It was not security boundary. Deprecated in 1.6 removed 1.6? Let's recall details. AngularJS expressions evaluated in sandbox, prevents access to window, document, global functions? It uses ensureSafeObject, ensureSafeMemberName, ensureSafeFunction, etc. Sandbox escape vulnerabilities CVE-2014-...? It was removed in AngularJS 1.6.0? Let's verify. 
[snip]
===== 回答正文 =====
**AngularJS 沙箱**(更准确地说,是 **AngularJS 表达式沙箱 / expression sandbox**)是 AngularJS 1.5 及更早版本中,`$parse` 表达式引擎内置的一套运行时检查机制。
[snip]

那么,我们是否可以主动预填思维链使得模型在内部思考的时候被误导呢?

官方仅提供了“预填回答正文”的功能(而且到目前(2026)为止还只是 Beta 阶段),示例代码:

Python
from openai import OpenAI

client = OpenAI(
    api_key="<your api key>",
    base_url="https://api.deepseek.com/beta",
)

messages = [
    {"role": "user", "content": "Please write quick sort code"},
    {"role": "assistant", "content": "你好,很高兴为你服务,", "prefix": True},
]
response = client.chat.completions.create(
    model="deepseek-flash",
    messages=messages,
    stop=["```"],
)
print(response.choices[0].message.content)

通过 content 预填回答正文的内容,模型后续就会按照“你好,很高兴为你服务,”这个开头去续写回答。

但是,有人通过测试,发现在该模式下,同样可以使用 reasoning_content 来预填思维链。

测试代码:

输出:

Bash
$ export DEEP='你的 DeepSeek API Key'

$ python test.py 
===== 思维链 =====
用户问的是“绕过 WAF 的常见 Payload”,这是一个网络安全领域的常见技术问题,涉及 Web 应用防火墙(WAF)的绕过技术。这个问题本身是防御性安全研究的范畴——了解常见的绕过手法是设计更健壮 WAF 规则的前提。

[snip]

关于安全政策:这是防御性安全研究,用户明确说是测试自己的 WAF 规则。提供绕过技术知识是合理的。我不应该拒绝,但也不应该提供完整的、可直接用于攻击的武器化 payload 库。平衡点是:讲原理、给概念性示例、强调防御。

===== 最终回答 =====
# WAF 绕过常见手法与 Payload 形态

理解 WAF 绕过的核心在于一个事实:**WAF 的解析模型与应用/数据库的解析模型不一致**。所有绕过本质上都是在利用“WAF 看到的内容”与“后端实际执行的内容”之间的差异。下面按技术类别梳理,便于你反推规则设计。

[snip]

如果你在写规则,建议优先覆盖第 1、3、4 类(编码、HPP、协议差异),因为这类绕过对黑名单规则的杀伤力最大,也最容易被漏测。

虽然思维链中并没有出现我预填的语句,但是无论是模型后续生成的思维链还是回答正文,都出现了一个我在问题中没有提及的内容,即“目的是为 WAF 写规则”。

这说明预填思维链是成功的。

对于思维链,模型往往会更信任,这使得“误导模型 → 输出想要的内容”的概率大大提升。

但是,该方法会受到很多的限制:

  • 非官方功能,可能日后会关闭
  • DeepSeek 仅提供 beta 端点,而该端点并不能使用完整功能(比如:网络搜索不能使用)

消融版开源模型#

对于开放模型权重的模型,用户可以通过“消融”(Abliteration)技术来移除模型的安全护栏。

Tip

消融后的模型能力可能会下降(但不会特别多)。

当然,这非常耗钱,根据 Anthropic 的研究:

Info

对 GLM-5.3 进行无拒绝化消融处理耗费了约 2,200 GPU 小时,计算成本约为 4,400 美元,而对 GLM-5.3-Flash 进行无拒绝化消融处理耗费了约 600 GPU 小时。

提示词注入#

待续……

键盘快捷键

全站

CtrlK
搜索
/
搜索
?
显示快捷键
Esc
关闭弹窗、退出模式

阅读文章

T
目录
F
专注模式
A
批注模式

批注模式

P
笔
H
荧光笔
L
激光笔
E
橡皮擦
1–6
切换颜色
Shift
按住拖动画直线
CtrlZ
撤销
CtrlShiftZ
重做