news 2026/9/17 12:11:37

Security Report for {{Workspace}}

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Security Report for {{Workspace}}

Security Report for {{Workspace}}

【免费下载链接】osmedeusA Modern Orchestration Engine for Security项目地址: https://gitcode.com/GitHub_Trending/os/osmedeus

Generated: {{TaskDate}}Target: {{Target}}Run UUID: {{RunUUID}}


## 二、三种语法形态:从模板变量到可执行代码 ### 2.1 `{{Variable}}` 模板变量 渲染引擎在真正执行函数之前,会先做一轮变量替换。从源码 [markdown_functions.go](https://link.gitcode.com/i/3a0abdd1a656faaead8f1cf1f78aa531) 可以看到,`renderTemplateVariables` 使用正则 `\{\{(\w+)\}\}` 匹配所有形如 `{{Name}}` 的占位符,并从运行上下文(`getContextVariables`)中取值替换;未匹配到任何变量的占位符会原样保留,避免静默丢失。 `getContextVariables`([markdown_functions.go](https://link.gitcode.com/i/9e2a5de1396756f931f3ef24d6a684b0))会从 goja VM 中导出以下常用变量: | 变量名 | 含义 | |---|---| | `Target` | 本次扫描的目标(如 `example.com`) | | `TargetSpace` / `Workspace` | 当前工作区名称(通常即目标名) | | `Output` | 当前扫描输出目录路径 | | `BaseFolder` | Osmedeus 基础目录 | | `Binaries` / `Data` | 外部二进制目录 / 外部数据目录 | | `ExternalConfigs` | 外部配置目录 | | `Workflows` / `Workspaces` | 工作流 / 工作区目录 | | `RunUUID` | 当前 run 的唯一标识 | | `TaskDate` | 当前日期 | | `Version` | Osmedeus 版本号 | | `DefaultUA` | 默认 User-Agent | 模板头部的 `{{Workspace}}`、`{{TaskDate}}`、`{{Target}}`、`{{RunUUID}}` 正是由这套机制注入的。 ### 2.2 ` ```osm-func ` 代码块 模板中所有被三反引号包裹、语言标记为 `osm-func` 的代码块,都会在渲染时被提取、执行、替换。源码中用两个正则定义匹配规则([markdown_functions.go](https://link.gitcode.com/i/8ca19f2e97ef9b0a9615b87a3914458e)): ```go var osmFuncPattern = regexp.MustCompile("(?s)```osm-func\n(.*?)\n```") var osmFuncInlinePattern = regexp.MustCompile("`([^`]+)`\\{\\.osm-func\\}")
  • osmFuncPattern匹配整块```osm-func ... ```,代码通过extractOsmFuncCode去掉首尾标记后执行;
  • osmFuncInlinePattern匹配`code`{.osm-func}行内形态,适合放在表格单元格中。

2.3 行内函数语法(Pandoc 风格)

严重性分布表正是用行内语法实现的——Markdown 表格单元格里无法优雅地嵌入多行代码块,因此模板写成:

| Severity | Count | |----------|---------------------------------| | Critical | `db_select_vuln_critical()`{.osm-func} | | High | `db_select_vuln_high()`{.osm-func} | | Medium | `db_select_vuln_medium()`{.osm-func} | | Low | `db_select_vuln_low()`{.osm-func} |

渲染后每个单元格会被替换成对应的整数计数。

三、渲染引擎:三步流水线

render_markdown_report(template_path, output_path)是驱动整个流程的核心函数(markdown_functions.go),其执行分为三步:

  1. 变量替换:先调用renderTemplateVariables渲染{{Variable}}
  2. 处理代码块:用osmFuncPattern找到所有osm-func块,extractOsmFuncCode取出代码,交给executeCode在 goja JS 虚拟机中执行(vf.vm.RunString,见 markdown_functions.go),执行失败会在原位置注入<!-- ERROR: ... -->注释,保证模板其余部分不受影响;
  3. 处理行内函数:用osmFuncInlinePattern处理`code`{.osm-func},逻辑与第二步一致。

处理完成后自动创建输出目录并写入结果文件。由于osm-func代码运行在完整的 goja JS 引擎中,模板中不仅可以直接调用db_*、字符串等内置函数,还能写条件表达式、拼接字符串(见下文示例)。

另有两个便捷入口:

  • generate_security_report(template_path)(markdown_functions.go):固定输出到{{Output}}/security-report.md,并通过registerReportArtifact将该文件以markdown类型注册为数据库 artifact(含文件大小、行数统计),报告可直接在 UI 中浏览;
  • render_markdown_from_file/print_markdown_from_file(markdown_functions.go):读取 Markdown 文件并用 glamour 渲染为终端彩色样式,用于命令行预览。

四、统计函数详解:Summary Statistics 与严重性分布

4.1 工作区统计函数

模板的 Summary Statistics 段落依次调用了四个统计函数,它们从当前工作区的统计记录中取值(db_functions.go):

"Total subdomains: " + db_select_total_subdomains()
"Total URLs: " + db_select_total_urls()
"Total assets: " + db_select_total_assets()
"Total vulnerabilities: " + db_select_total_vulns()

其内部实现均为:根据当前workspaceName查询工作区记录,读取对应计数字段(TotalSubdomainsTotalURLsTotalAssetsTotalVulns);查询失败时返回0而不是报错,保证报告永远可以生成。函数签名与返回类型在 constants.go 中有明确登记。

4.2 严重性分布函数

严重性统计函数同样基于工作区统计记录:

模板调用对应字段
db_select_vuln_critical()VulnCritical
db_select_vuln_high()VulnHigh
db_select_vuln_medium()VulnMedium
db_select_vuln_low()VulnLow

(函数常量定义见 constants.go)。这些字段在扫描过程中由 Osmedeus 汇总维护,因此模板中只需一行行内函数即可完成按严重级别分布的可视化表格。

五、全量数据导出:Assets 与 Vulnerabilities

5.1 导出全部漏洞

db_select_vulnerabilities("{{Workspace}}", "markdown")

db_select_vulnerabilities(workspace, format)(实现在 db_functions.go)按created_at DESC排序查询漏洞记录,format支持markdownjsonl两种输出格式;markdown会生成一张可直接嵌入报告的表。同类函数还有带过滤能力的db_select_vulnerabilities_filtered(workspace, severity, asset_value, format)(常量注册见 constants.go)。

5.2 导出全部资产

db_select_assets("{{Workspace}}", "markdown")

db_select_assets(workspace, format)(db_functions.go)查询资产表,并按创建时间倒序输出;内部对结果做了Limit(1000)上限保护,防止大扫描结果导致内存问题。同理可参考db_select_assets_filtered(workspace, status_code, asset_type, format)按状态码、资产类型过滤。

六、自定义 SQL 查询:db_select

当内置函数不足以表达查询时,模板提供db_select(sql_query, format)直接执行原始 SQL(db_functions.go):

db_select("SELECT severity, COUNT(*) as count FROM vulnerabilities GROUP BY severity ORDER BY count DESC", "markdown")

实现要点(也是使用时的安全边界):

  • 仅接受markdown/jsonl两种格式,非法格式直接报错(validateOutputFormat);
  • 执行前会通过validateSelectQuery做安全校验,只允许 SELECT 类只读查询,从源头阻断写入类 SQL 注入;
  • 结果行数硬上限 1000 行,防止拖库式查询拖垮引擎;
  • 查询结果会以列为键转为 map,并以 Markdown 表格或 JSONL 输出。

七、字符串函数与表达式能力

模板最后演示了字符串处理函数(常量定义见 constants.go):

trim(" Example trimmed text ")
toUpperCase("example")
"Workspace: " + "{{Workspace}}" + " | Target: " + "{{Target}}"

由于代码块运行在 goja(JavaScript)引擎中,模板天然支持字符串拼接、contains("{{Target}}", "example")、三元表达式(如 `contains("{{Target}}", ".com") ? "是 .com 域名" : "非 .com 域名")等 JS 语法,与 Osmedeus 工作流中 function 步骤共享同一套内置函数注册表,能力完全一致。

八、实战:通过 Workflow 自动化生成报告

模板本身不产生报告,需要由 workflow 调用渲染函数。仓库提供了两个可直接运行的参考工作流。

8.1 最小演示:sample-report-workflow

sample-report-workflow.yaml 演示了从创建模板到渲染、校验、预览的完整闭环:

osmedeus run -m sample-report-workflow -t example.com

其关键步骤:

- name: generate-report type: function function: 'render_markdown_report("{{Output}}/templates/demo-report.md", "{{Output}}/security-report.md")' - name: verify-report type: function function: 'file_exists("{{Output}}/security-report.md")'

工作流内嵌的 demo 模板展示了to_upper_casetrimlenuuidrandom_stringcontains及三元条件表达式等更多函数组合。

8.2 漏洞专项报告:generate-vuln-report

generate-vuln-report.yaml 演示如何只导出高危发现:

- name: create-high-severity-template type: bash command: | cat > {{Output}}/templates/high-severity-report.md << 'EOF' # High Severity Findings - {{TargetSpace}} ... ```osm-func db_select_vulnerabilities_filtered("{{TargetSpace}}", "critical", "", "markdown") ``` ... EOF - name: generate-high-severity-report type: function function: 'render_markdown_report("{{Output}}/templates/high-severity-report.md", "{{Output}}/reports/high-severity-findings.md")'

运行方式:

osmedeus run -m generate-vuln-report -t example.com

【免费下载链接】osmedeusA Modern Orchestration Engine for Security项目地址: https://gitcode.com/GitHub_Trending/os/osmedeus

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 12:11:02

汽车行业数字化转型顶层规划:从价值链对齐到量化指标落地

简介&#xff1a;一份关于汽车行业数字化转型的顶层规划设计报告&#xff0c;以PPTX演示文稿形式呈现&#xff0c;适合车企高层、战略规划人员及数字化转型咨询从业者用于内部汇报、现状研判与路径设计。报告系统梳理了科技创新、政策推动、产业与市场驱动等背景&#xff0c;并…

作者头像 李华
网站建设 2026/9/17 12:07:13

WSL2启动报HCS_E_HYPERV_NOT_INSTALLED解决

1. 先把这个报错的底细摸清楚敲下wsl命令的那一刻&#xff0c;屏幕没给你 Ubuntu 的欢迎信息&#xff0c;反而甩回来一串红字&#xff1a;Error code: Wsl/Service/CreateVm/HCS/HCS_E_HYPERV_NOT_INSTALLED。这个报错我第一次见到的时候也愣了一下&#xff0c;因为这行信息拆开…

作者头像 李华
网站建设 2026/9/17 12:05:25

Windows系统文件损坏?用SFC和DISM命令行修复,告别重装系统

1. 先把话说清楚&#xff1a;为什么系统文件会坏、坏了会怎样你先回想一下&#xff0c;是不是遇到过这种状况&#xff1a;电脑用着用着&#xff0c;某个软件突然打不开&#xff0c;提示缺少一个根本不知道叫什么名字的DLL&#xff1b;或者开始菜单点了没反应&#xff0c;Win10自…

作者头像 李华