下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-i3mntblc--php2shell-audit-pay.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-i3mntblc/php2shell-audit-pay。付费的 php2shell 漏洞检测服务,通获取目标网站的 PHP 版本指纹以及攻击面暴露情况来检测补丁状态(CVE-2026-109618 / CVE-2026-109619),并且生成可视化检测报告与修复建议
阅读全文 (展开查看完整说明)
概述
php2shell 漏洞检测报告(付费版)
用户提交一个网址,服务端对该目标执行非侵入式 php2shell 漏洞检测(响应头指纹 + 无害差分探针,不下发任何攻击载荷),返回检测结论后,由本地渲染器生成一份深色安全态势风格的 HTML 报告。
每次检测 9.90 元,按次计费,一个目标一次。
核心规则(必读)
免费层 / 付费层边界
| 层级 | 内容 | 是否可本地完成 |
|---|---|---|
| 免费层 | 收集目标网址、协议补全、格式校验、输出授权声明与免责声明、告知价格与检测范围、渲染已付费的报告 HTML | 可以 |
| 付费层 | 实际检测执行与全部检测结论:patch_status、PHP 版本、PHP 指纹、CVE 关联、风险等级、修复建议、核验指引 | 不可以,唯一途径是调付费接口 |
HTML 渲染(scripts/render_report.py)属于免费能力——它只是把已付费拿到的数据排版,不产生任何检测结论。真正的算力与结论都在服务端。
硬禁令
- 严禁自行编造、推测、扩写任何检测结论。 不得凭空写出 PHP 版本、漏洞状态、CVE 编号或风险等级。
- 未完成支付,不得呈现任何形似检测结果的内容(包括"根据经验判断""大概没有漏洞"这类表述)。
- 唯一获取渠道是调用付费接口,拿到的
content才是唯一事实来源。 unknown必须如实呈现为「未知」,不得表述为「安全」「无风险」「不受影响」。- 付费前必须先完整输出授权声明与免责声明(见第 2 步)。这是不可跳过的告知义务,
不得压缩成一句「详见报告」、不得只给章节标题、不得等付款后才补。
- 付费前必须完成「付费前置检查」(见下节)。未确认
weixinpay插件可用时,
不得请求付费接口,也不得向用户承诺可以支付。
付费前置检查(付费前必做)
进入付费流程之前,先确认支付能力,任一项不满足即终止流程,不得尝试绕过或改用其它方式:
1. 检查 weixinpay 插件是否已安装
- 判断方法:确认当前 Agent 可调用支付插件提供的
weixinpay_pay工具
(用于把 paymentCode 交给用户完成支付授权)。可调用即视为已安装并启用。
- 未安装 / 不可调用时:向用户明确提示
当前 Agent 暂不支持微信支付付费能力,请先安装并启用
weixinpay插件后再使用本技能。
然后立即终止流程:不要请求付费接口、不要创建订单、不要引导用户去别处付款。
2. 确认付费接口可达
https://php2shell.loopchat.top 应可访问(GET /health 返回 ok)。若不可达,告知用户服务暂不可用并终止,不要反复重试。
3. 确认已取得检测目标
请求参数需包含 query(待检测的网址)。用户未提供目标时先询问,不要凭空编造。
以上检查必须在「第 3 步:付费闸门」之前完成。检查本身不产生任何费用。
工作流程
第 1 步:接收并校验目标(免费)
先确认已通过上节「付费前置检查」。从用户消息中提取网址。只给域名(如 example.com)时补 https://。若用户未提供任何网址,直接询问,不要猜测,也不要进入付费流程。
第 2 步:输出授权声明与免责声明(⚠️ 付费前必做)
在用户确认付费之前,必须把下面两段声明完整输出到对话中。这是用户作出付费与授权决定前的必要告知,不可省略、不可压缩成一句「详见报告」、不可只给链接或只提章节标题。逐字输出,不要改写条款含义。
先说明服务基本信息:
拟对
<目标网址>执行 php2shell 漏洞检测(非侵入式,不发送攻击载荷)。单次费用 9.90 元,检测约需 30–90 秒。
然后输出授权声明:
【授权声明】
- 您提交检测目标并完成付款,即视为您已就所提交的该目标向我方作出检测授权,
并声明您为目标所有权人、管理方,或已取得目标权利人的明确书面授权。
- 付款行为构成对该目标执行本报告所述非侵入式检测的完整授权,无需另行签署授权书。
- 您如对所提交目标不具备上述授权资格,由此产生的全部法律责任与后果由您自行承担;
我方仅按您的指令执行技术检测,不承担由此引发的连带责任。
- 目标权利人如对检测行为有异议,可凭有效权属证明联系我方,我方核实后立即停止对其目标的检测。
紧接着输出免责声明:
【免责声明】
- 检测方式:仅基于目标站点公开的 HTTP 响应头与响应体指纹进行比对,必要时发送
少量无害差分探针(单条小于 2KB、非破坏性),不发送任何攻击载荷,不执行漏洞利用。
- 结果性质:检测结果仅为初步筛查参考,不构成对目标安全性的保证、认证或承诺。
未识别到风险特征不等于目标绝对安全。
- 结果局限:PHP 版本标识可能被隐藏(
expose_php=Off)、CDN 缓存与发行版 backport补丁均可能导致结论偏差;实际安全状态以服务端本地核验与官方安全通告为准。
- 使用限制:本服务仅可用于已获得授权的目标系统。您须自行确保检测行为的合法性,
并对使用检测结果作出的任何决策负责。
- 退款规则:因服务不可用导致无法出具检测结果时,系统自动全额退款;
报告已正常出具后,因检测算力已消耗,不支持退款。
第 3 步:付费闸门 ⚠️ 必须停在这里
两份声明输出完毕后,停下来等待用户明确确认(如「同意」「继续」「可以」「检测吧」)。确认之前不得发起任何付费接口请求,不得输出任何检测结论。用户拒绝或未回复则到此终止。
若用户对条款有疑问,如实解答;用户不接受条款,礼貌终止,不要催促付款。若用户只回复了「多少钱」「怎么付」这类询问,先答问题,仍需等到明确同意后才能继续。
第 4 步:请求付费接口(首次)
用户确认后,第一次 POST 付费接口:
POST https://php2shell.loopchat.top/api/resource
Content-Type: application/json
{ "query": "https://example.com" }query 传目标网址,不是用户的原话。
第 5 步:处理 402 响应(支付由插件完成)
首次请求返回 HTTP 402,weixinpay 插件会拦截并完成支付流程,无需手动调用支付接口。402 响应头与响应体里都带有支付信息,必须同时保存以下两个值:
WeixinPay-Required(支付码 paymentCode)X-Out-Trade-No(订单号,用于重试时识别订单)
响应体示例:
{
"code": "PAYMENT_REQUIRED",
"WeixinPay": { "WeixinPay-Required": "<payment_code>" },
"out_trade_no": "<X-Out-Trade-No>",
"amount": "9.90",
"currency": "CNY",
"disclosure": {
"must_show_before_payment": true,
"instruction": "请先将 authorization 与 disclaimer 的完整内容展示给用户…",
"authorization": { "title": "授权声明", "items": ["…"] },
"disclaimer": { "title": "免责声明", "items": ["…"] }
}
}支付过程由
weixinpay插件处理,Skill 无需关心支付细节。前提:此步依赖「付费前置检查」已确认
weixinpay插件可用。若此时才发现插件缺失,立即按前置检查的提示终止,不要继续下单或让用户改用其它渠道付款。
关于 disclosure 字段:响应体携带了完整的授权声明与免责声明文本,这是服务端下发的权威版本。若你在第 2 步已输出过声明,可跳过重复展示;若尚未输出(例如用户直接跳过确认、或你漏掉了第 2 步),必须先按 disclosure.authorization 与 disclosure.disclaimer 的完整条目展示给用户,再继续支付流程。must_show_before_payment 为 true 时不可跳过。
第 6 步:支付成功后重试获取检测结果(⚠️ 必须执行,最易被遗漏)
支付成功后,必须重新发起请求获取检测结果。重试规则:
- JSON body 不变:与第 4 步完全一致。
- 通过 Header 原样携带支付信息:
WeixinPay-Required与X-Out-Trade-No。
POST https://php2shell.loopchat.top/api/resource
Content-Type: application/json
WeixinPay-Required: <第 5 步保存的 payment_code>
X-Out-Trade-No: <第 5 步保存的订单号>
{ "query": "https://example.com" }body 与第 4 步保持一致,不要修改任何字段。支付信息只通过 Header 传递。
响应体的
content字段即付费检测结果。
content 是一个对象,结构与 result.json 一致:
{
"target": "https://example.com",
"fetched_at": "2026-10-22 23:48:00",
"session_id": "…",
"elapsed_ms": 27626,
"answer_markdown": "# php2shell漏洞验证报告n## 检测目标…",
"structured": { "patch_status": "unknown", "php_version": null, "php_fingerprint": "not_php", "cve_ids": ["…"] },
"tool_calls": [ { "tool_name": "php2shell_check" } ]
}第 7 步:本地渲染报告
把 content 原样保存为 <工作目录>/result.json,再执行:
python <skill>/scripts/render_report.py "<工作目录>/result.json" --out "<工作目录>"stdout 会打印 REPORT_HTML=<绝对路径> 与 RISK_LEVEL=。取该路径交付。
第 8 步:交付
用 present_files 展示 HTML,并附 3–5 行摘要:目标、漏洞状态与风险等级、PHP 版本(或「未识别 / 版本被隐藏」)、关联 CVE、一句话结论(需立即修复 / 需人工核验 / 不受影响)。
不要复述报告每个章节,用户可以直接看报告。
付费接口错误码
| 返回 | 含义 | 处理 |
|---|---|---|
code: "NOT_PAID" | 支付未完成 | 提示用户完成微信支付授权后重试,不要放行内容 |
code: "REFUNDED" | 检测失败,已全额退款 | 如实告知已退款,可建议稍后重试一次 |
code: "FULFILL_AND_REFUND_FAILED" | 服务异常且退款失败 | 建议用户联系客服,不要重试 |
| 重复同一订单 | 服务端幂等,返回同一份结果(already_fulfilled: true) | 直接使用返回内容 |
非接口类失败
| 情况 | 处理 |
|---|---|
weixinpay 插件未安装 / 不可调用 | 按「付费前置检查」提示用户并终止,不要请求接口 |
付费接口不可达(/health 非 200) | 告知服务暂不可用并终止,不要反复重试 |
金额以服务端返回的 amount 为准,不要自行假设。
报告结构
| 区块 | 数据来源 | 说明 |
|---|---|---|
| 风险横幅 | answer_markdown 的「风险等级」章节 | 主色随等级切换,缺失时按 patch_status 推断 |
| 指标卡 | structured | 漏洞状态 / PHP 版本 / PHP 指纹 / 关联 CVE |
| 正文章节 | answer_markdown 的 H2 章节 | 按标题语义分流:键值表 / 步骤流 / 免责声明 / 通用排版 |
| 授权声明 | 渲染器硬编码 | 固定注入,见下节 |
| 证据面板 | structured | detected_signals 标签、probe 探针网格、原始 JSON 折叠区 |
风险等级与配色
| 等级 | 触发条件 | 主色 |
|---|---|---|
safe | 描述含「安全 / 未受影响 / 已修复」,或 patch_status=patched | 绿色 |
critical | 含「严重 / 极危 / 可利用 / 确认存在」 | 玫红 |
high | 含「高风险 / 高危 / 存在漏洞」,或 patch_status=vulnerable | 橙色 |
medium | 含「中风险 / 中等」 | 琥珀 |
low | 含「低风险 / 低危」 | 天蓝 |
unknown | 其余(默认) | 灰蓝 |
授权声明与免责声明(两处呈现)
本技能有两处声明呈现,内容同源、缺一不可:
| 位置 | 时机 | 作用 |
|---|---|---|
| 对话中对白输出 | 付费前(第 2 步) | 让用户在付款前知悉授权义务与风险,是付款决定的前提 |
| 报告内章节 | 报告生成后 | 与报告一同留档,作为交付物的组成部分 |
报告内的授权声明
由 scripts/render_report.py 的 AUTHORIZATION_CLAUSE 常量硬编码注入,不受服务端返回内容影响,与第 2 步对白输出的条款一致:
- 提交目标并完成付款,即视为已就所提交的该目标作出检测授权,并声明其为所有权人、
管理方或已取得权利人书面授权;
- 付款构成对该目标执行非侵入式检测的完整授权,无需另行签署授权书;
- 无授权资格者自行承担全部法律责任,我方仅按指令执行技术检测,不承担连带责任;
- 权利人如有异议,可凭有效权属证明联系,核实后立即停止检测。
免责声明的来源差异
- 付费前对白中的免责声明(第 2 步)是我方固定条款,由本文件定义,说明检测方式、
结果性质、局限性与退款规则。
- 报告内的「免责声明」章节由检测服务生成,描述该次检测的具体取证范围。
二者不冲突:前者是服务条款,后者是单次检测的说明。
共同约束
- 两处声明均不得删除或改写含义。
- 它们不构成安全承诺,也不影响「如实呈现
unknown」的要求。 - 若报告内缺失免责声明章节,仍须以第 2 步已输出的条款为准,不得视为无免责约束。
脚本清单(随包提供)
| 文件 | 职责 |
|---|---|
scripts/render_report.py | result.json → 成品 HTML(含授权声明注入) |
scripts/md2html.py | 极简 Markdown 渲染器(标准库实现,支持嵌套列表/代码/表格) |
assets/report_template.html | 报告模板(CSS 内联,无外部依赖,可打印) |
仅依赖 Python 标准库,无需 pip 安装。
本包不含任何检测客户端或 API 凭证——检测只能在服务端执行。
常见问题
Agent 没有 weixinpay 插件怎么办?必须先走「付费前置检查」。未安装时直接告知用户「当前 Agent 暂不支持微信支付付费能力,请先安装并启用 weixinpay 插件后再使用本技能」并终止流程。不要请求付费接口、不要创建订单、不要引导用户改用其它渠道付款 —— 本技能只有这一条支付路径。
patch_status=unknown 是不是没问题?不是。unknown 只表示「无法通过公开信息判定」,常见于 PHP 版本标识被 expose_php=Off 隐藏。报告会给出服务端侧核验步骤(php -v、apt changelog php8.x 等)。如实转述,不要粉饰。
php_fingerprint=not_php 说明什么?目标未表现 PHP 特征,patch_status 为 unknown 时通常代表「不适用」而非「存在风险」,报告指标卡会把 PHP 版本显示为「—」并注明「非 PHP 站点,不适用」。
报告里某个章节样式不对?render_report.py 的 classify() 按标题关键词分流。若服务端改了章节标题导致误判,在 classify() 中补充关键词即可,不要改动模板。
用户想做批量检测多个域名?一次付费只覆盖一个目标。多个目标需逐个走完整流程,不要合并到一个 query 里。