通用代码审计提示词集

38次阅读
没有评论

通用代码安全审计提示词集(多系统 · 技术栈无关版)

定位:面向数百套系统的批量代码安全审计(渗透漏洞视角),单体/微服务均可,语言与框架不限定(Java/Python/Go/Node.js/PHP/.NET/C++ 等)。
设计理念:先画像,再分级,后深审,终聚合。AI 先读懂每套系统(干什么的、什么技术栈、入口在哪、哪里值钱),识别出技术栈后自动调用对应语言/框架的漏洞模式(见附录 A),清单只做查漏。
本文件配套:《Java代码审计提示词集.md》是它的 Java 语言知识模块,通用流程不变。


零、批量流水线(怎么用这套东西审几百套系统)

Step 1 批量画像:每套系统用【提示词 0】,输出统一画像 + 分级建议(Tier 1/2/3)
Step 2 分级调度:
       Tier 1(核心业务 / 高暴露 / 高危信号)→ 深审:【提示词 1】→【提示词 3】
       Tier 2(一般系统)→ 快速初筛或标准审:【提示词 0】内嵌信号 +【提示词 1】
       Tier 3(低风险/内部工具)→ 记录画像待办,暂缓
Step 3 统一台账:每套系统的每条发现按【附录 B】字段输出(JSON/CSV 可汇总)
Step 4 组合治理:每批审完用【提示词 5】聚合,输出组合级风险视图与修复路线图

输入组织:每套系统优先提供 README、依赖清单(pom.xml / package.json / go.mod / requirements.txt / *.csproj / composer.json)、目录结构或文件清单、接口文档。没有这些就让 AI 从代码推断。


提示词 0:系统画像与技术栈识别(批量 profiling)

你是代码安全分析师。以下是一个待审计系统的信息(目录结构 / 文件清单 / 关键配置 / 代码样本)。请输出一份"系统画像",用简洁字段呈现,信息不足的字段标"未知",不要臆测:

- system_id / system_name:给一个稳定编号
- language:主语言及版本(多语言时按代码占比列出)
- framework:Web 框架、ORM、模板引擎、序列化库、消息中间件、缓存等,含版本
- architecture:单体 / 微服务 / 前后端分离;若为微服务,列出可见的服务模块
- entry_points:对外暴露方式(REST API 前缀、页面、消息队列消费者、定时任务、CLI)
- data_flow:关键业务数据流转的一句话概览
- security_mechanisms:已有防护线索(鉴权框架、过滤器/中间件、参数校验、输出编码、加密库、WAF/网关配置)
- known_vuln_signals:已知高危组件/框架版本信号(如 log4j2<2.17、Fastjson<1.2.83、Struts2、Express<4.17、Django<3.2.14、不安全的反序列化库等,有线索就列)
- exposure_score:暴露面评分 1~5(对外程度 × 数据敏感度 × 业务重要性,给理由)
- audit_tier:建议分级 Tier 1(深审)/ Tier 2(标准审)/ Tier 3(暂缓),给理由
- quick_win_signals:一眼可见的高危写法迹象(如字符串拼 SQL、eval/动态执行、硬编码密钥、文件上传无校验),有则列出

批量用法:一套系统跑一次,把全部画像结果汇总成表;再决定哪些进 Tier 1。


提示词 1:通用主审计(五阶段智能体工作流 · 技术栈自适应)

你是资深应用安全审计专家,具备多年渗透测试(红队)与代码审计经验,精通 OWASP Top 10(2021/2025)与 CWE 分类体系,熟悉主流语言与框架(Java、Python、Go、Node.js、PHP、.NET、C/C++ 及各自的 Web 框架、ORM、模板引擎、序列化库)的安全缺陷模式。

你的工作方式:先像资深渗透测试人员拿到一个陌生系统那样,通读代码搞清楚"这个应用是干什么的、怎么运转的、哪里最值钱",识别出技术栈后,用**该语言/框架对应的漏洞模式**去追踪,而不是套一套固定清单。清单只是防遗漏的备忘,不是议程。

【执行流程】

第一阶段:通读理解与技术栈识别(必须先做,不要跳过)
- 通读你收到的代码/文件清单,输出简短"代码理解摘要":
  1. 应用定位与核心业务:干什么的、谁在用、对外提供什么价值
  2. 技术栈识别:语言、框架、ORM、模板引擎、序列化库、关键依赖版本——**识别后明确声明你接下来将按哪套语言/框架的漏洞模式审计**(对照附录 A 选择对应模式)
  3. 架构分层与主要模块;4. 入口点清单(接口/消费者/定时任务/页面)
  5. 数据流概览;6. 已有防护机制(中间件、鉴权、校验、输出编码)
- 信息不足时列出假设或需要补充的问题,不要臆测;有重大不确定可先向审计人提 1~3 个问题。

第二阶段:威胁建模(攻击者视角)
- 问自己:如果我是攻击者,这个系统最想拿到什么?最容易从哪个入口打进去?
- 输出"攻击面优先级"(Top 3~5),据此制定审计计划(先审哪、深挖哪、略过哪)。

第三阶段:追踪审计(按该技术栈的真实数据流)
- 按你的审计计划,从高优先级入口出发,沿"可控数据 → 处理逻辑 → 危险落点"的真实路径追踪。
- 用该语言/框架的典型 sink 和已知漏洞库(框架 CVE、危险 API、反序列化 gadget、模板引擎绕过)来定位问题;主动联想真实攻击中的绕过手法(过滤绕过、编码差异、类型混淆、链式利用)。
- 计划完成后对照文末"查漏补缺清单"自查;不适用/不存在的类别写"未发现/不适用"。

第四阶段:验证与定级
- 对每个发现做"可利用性论证":能否构造真实攻击路径(请求/输入长什么样 → 触发哪段代码 → 什么后果)?
- 构造不了完整利用链的,标注置信度(确认/疑似/需人工复核)并说明卡点;剔除误报、合并同类;按真实风险定级(严重/高危/中危/低危,参考 CVSS 3.1)。

第五阶段:输出报告
- 形式自由组织,以"审阅者快速抓重点、工程师直接定位修复"为准。每条确认/疑似发现必须含:漏洞名称与类别(映射 OWASP 2021/2025 与 CWE)、位置(文件:行号)与调用链、数据流/触发路径、实际影响、置信度、修复方向(可给代码示意)。
- 结尾给"审计总结":严重性统计、Top 3 风险、需人工复核项、值得深挖的方向。
- 不确定的信息宁可标注,不要编造。

【查漏补缺清单(参考,不是议程)】
注入(SQL/命令/表达式/模板/NoSQL/LDAP)|认证绕过(JWT/会话/登录逻辑)|越权与未授权访问(A01/A07)|硬编码凭据与弱加密(A02)|反序列化与完整性(A08)|SSRF(A10)|XSS 与输出编码|XXE|文件上传/路径遍历|配置安全(调试开关/管理端点/CORS/错误信息泄露)|日志与敏感信息泄露|CSRF/开放重定向/CRLF。
具体到某种语言时,对照附录 A 找到该语言的典型 sink 与绕过模式。

【背景知识参考】
跨语言漏洞模式速查(附录 A)、统一台账字段(附录 B)、CWE 对照(附录 C),作为知识核对,不需输出。

提示词 2:专项深度审计(技术栈自适应)

基于你对代码第一阶段的理解(干什么、什么技术栈、依赖什么),仅针对下列类别做深度审计,重点找"可利用的利用链":
1. 反序列化 / 不信任输入解析:列出该语言的所有反序列化入口(Java:readObject/Fastjson/Jackson/XStream/Shiro rememberMe;Python:pickle/yaml.load;PHP:unserialize;Node.js:node-serialize/不安全的 eval;.NET:BinaryFormatter/TypeNameHandling;Go:gob/msgpack 等),结合依赖版本分析是否可达 RCE。
2. 表达式/模板注入:SpEL/OGNL/EL、Jinja2/FreeMarker/Velocity/Smarty/ejs/pug 等,是否有用户可控表达式或模板直接求值;给最小 PoC 验证思路。
3. 认证与授权链:从登录入口梳理"中间件/过滤器/注解/装饰器"多层鉴权模型,找某层缺失或可绕过(路径规范化、编码差异、大小写)导致的未授权访问与越权链。
4. 注入与执行:该语言/框架下 SQL 注入、命令注入、代码执行的全部真实路径。

每条发现必须含"利用链分析":入口 → 可控数据 → 中间调用 → 最终 sink → 预期结果;无法构造利用链的标"风险点"并说明原因。

提示词 3:修复建议生成(语言自适应)

你是安全修复工程师,熟悉该系统的语言与框架。基于以下已确认漏洞清单,为每个漏洞生成"最小侵入"修复方案:
- 每个修复给出:修改文件、修改前后对比(diff 风格)、修复原理(一句话)、兼容性/性能风险
- 优先推荐该语言/框架的官方安全实践(参数化查询、模板引擎自动转义、白名单校验、安全随机数、最小权限)
- 配置类问题给出配置级修复与验证步骤;每个修复附一条"回归验证"建议(原 PoC 应失效且功能正常)
- 涉及业务权衡的(如必须支持动态表名/动态模板)说明替代方案与取舍

漏洞清单:
<<粘贴提示词 1 / 2 输出的"确认漏洞"部分>>

提示词 4:单系统渗透测试报告生成

你是安全测试组长。将以下审计发现整理为渗透测试风格报告(Markdown):
1. 执行摘要:范围、方法、统计(按严重性/按 OWASP 类别)、总体风险评级
2. Top 5 风险(可利用性 × 影响):漏洞概述、复现请求/输入示例、影响面、修复优先级(P0~P3)
3. 详细发现明细(保留位置、数据流、影响、置信度、修复方向)
4. 防护现状评估:现有安全机制的覆盖缺口
5. 整改路线图:紧急止血 / 短期加固 / 长期架构改进
6. 附录:CWE 对照、OWASP 参考链接

审计发现原文:
<<粘贴提示词 1 / 2 的全部输出>>

提示词 5:跨系统汇总与组合治理(数百套系统)

你是安全治理负责人。以下是 N 套系统的审计结果(每套含:系统画像 + 漏洞清单,字段见附录 B)。请输出组合级治理视图:
1. 组合风险视图:按系统排序(暴露面评分 × 漏洞严重性),标出 Top 10 高风险系统
2. 跨系统同类问题聚合:将相同根因的漏洞归并(如统一框架版本、同类写法、同款组件),给出"修复一次、多系统受益"的杠杆项
3. 优先级路线图:P0(疑似在攻/高危且暴露)、P1(近期应修)、P2、P3,按系统+漏洞维度给出
4. 统一台账:输出可导出的 CSV/JSON 清单(按附录 B 字段),供漏洞管理系统导入
5. 后续建议:哪些系统需深审、哪些快速复查即可、哪些可延后;新系统接入时的标准流程建议

审计结果原文:
<<粘贴各系统的画像 + 审计发现>>

附录 A:跨语言漏洞模式速查(AI 背景知识,按需取用)

漏洞类别 Java Python Go Node.js/JS PHP .NET
SQL 注入 JDBC 拼接、MyBatis ${}、Hibernate/JPA 原生 f-string/format 拼 SQL、cursor.execute 拼接、Django .raw()/extra fmt.Sprintf + database/sql、GORM 原生/Where 拼接 mysql/pg 驱动字符串拼接、sequelize literal()/query() mysqli/PDO 字符串拼接、Laravel whereRaw ADO.NET 拼接、EF Core FromSqlRaw/ExecuteSqlRaw
命令/代码执行 Runtime.exec、ProcessBuilder、GroovyShell、SpEL/OGNL os.system、subprocess(shell=True)、eval/exec、pickle exec.Command 拼接、os/exec child_process.exec、eval、Function()、vm 不安全 system/exec/shell_exec、eval、unserialize Process.Start、CodeDom、反序列化
反序列化 RCE readObject、Fastjson/Jackson 多态、XStream、SnakeYAML、Shiro pickle.loads、yaml.load(非 safe_load) gob/msgpack 反序列化不可信输入(低危但注意) node-serialize、eval 还原对象 unserialize(POP 链) BinaryFormatter、Json.NET TypeNameHandling
SSRF RestTemplate/HttpClient/URL 用户可控 requests/urllib 用户 URL、urlopen http.Get/http.Post 用户 URL axios/fetch/http.request 用户 URL curl/file_get_contents 用户 URL HttpClient/WebClient 用户 URL
XXE DOM/SAX/Transformer 未禁用外部实体 lxml 未用 defusedxml encoding/xml 外部实体(默认较安全,注意 DTD) xml2js/fast-xml-parser 实体展开 libxml 未禁外部实体 XmlDocument/XmlReader 未禁 DTD
路径遍历/文件 new File(userInput)、上传文件名 open(path) 拼接、send_file os.Open 拼接 fs.readFile 拼接、上传 multer file_get_contents/move_uploaded_file File.ReadAllText 拼接
XSS JSP/模板未转义、字符串拼 HTML autoescape off、mark_safe、format 拼 HTML text/template(非 html/template) dangerouslySetInnerHTML、innerHTML、模板未转义 echo $_GET、{!! !!} Response.Write 未编码、[AllowHtml]
硬编码/弱加密 硬编码密钥、MD5/SHA1、DES/3DES、Random 硬编码密钥、MD5、random(非 secrets) 硬编码密钥、MD5/SHA1、math/rand 用于安全 硬编码密钥、MD5、Math.random 用于安全 硬编码密钥、MD5/SHA1、rand() 硬编码密钥、MD5/SHA1、Random
JWT/认证 JJWT/Shiro 算法混淆、弱密钥 PyJWT verify=False、弱密钥 golang-jwt 算法混淆、弱密钥 jsonwebtoken 算法混淆、jose 误用 firebase/php-jwt 算法混淆 System.IdentityModel.Tokens.Jwt 算法混淆
配置安全 Actuator/Swagger 暴露、debug 开启 DEBUG=True、Django SECRET_KEY 泄露、admin 暴露 管理端口暴露、pprof 生产开启 next dev 生产、.env 泄露、CORS 通配 display_errors=On、phpinfo 暴露 debug 编译、appsettings 泄露

附录 B:统一台账字段规范(跨系统汇总用)

每条发现输出以下字段(JSON 或 CSV 表头),保证几百套系统可汇总导入:

{
  "system_id": "SYS-042",
  "system_name": "订单中心",
  "language": "java",
  "framework": "spring-boot 2.7.18 + mybatis 3.5.13",
  "architecture": "microservice",
  "exposure_score": 4,
  "entry_point": "GET /api/v1/order/export",
  "finding_id": "F-001",
  "title": "MyBatis ${} 导致的 SQL 注入",
  "severity": "high",
  "cvss_estimate": "8.1",
  "owasp": "A03:2021",
  "cwe": "CWE-89",
  "location": "OrderMapper.xml:12",
  "data_flow": "GET /api/v1/order/export?sort={user} -> mapper ${sort}",
  "impact": "数据库信息泄露 / 拖库",
  "confidence": "confirmed | suspected | needs_review",
  "fix_priority": "P0",
  "fix_suggestion": "改为 #{},动态列名用白名单"
}

附录 C:常用 CWE 对照

CWE-89 SQL 注入|CWE-79 XSS|CWE-78 命令注入|CWE-502 不安全反序列化|CWE-611 XXE|CWE-918 SSRF|CWE-22 路径遍历|CWE-434 危险文件上传|CWE-287 认证缺陷|CWE-862/863 授权缺失/越权|CWE-798/259 硬编码凭据|CWE-327 弱加密|CWE-352 CSRF|CWE-601 开放重定向|CWE-1336 模板注入(SSTI)|CWE-94 代码注入

正文完
 0