跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

精选回复

发布于

xray支持用户以YAML格式编写自己的POC规则。 YAML 是JSON 的超集。也就是说,你甚至可以用JSON来编写POC,但仍然建议你使用YAML来编写,原因如下: \r

\r

1. YAML值不需要用双引号括起来,所以特殊字符不需要转义\r

2.YAML内容更具可读性\r

3.YAML中可以使用注释\r

\r

## 设计目标\r

\r

设计目标:\r

\r

1.简洁大方\r

2.可以覆盖最常见的扫描规则场景,包括但不限于\r

1.主机指纹识别\r

2.WEB指纹识别\r

3.主机漏洞检测\r

4.WEB漏洞检测\r

\r

我们希望:\r

\r

1.为规则本身提供良好的抽象,屏蔽编程语言的复杂性,只关注规则本身。 \r

2、我们希望为安全开发者提供更少的学习成本和更简单的规则编写,统一目前各种规则的复杂性。 \r

\r

## POC 脚本格式\r

\r

- [V2版本](https://stack.chaitin.com/techblog/detail?id=50curNav=index)\r

- [V1版本](https://stack.chaitin.com/techblog/detail?id=51curNav=index)\r

\r

## 写入环境\r

\r

### VSCode\r

\r

使用VSCode,经过一些配置后,可以提供一些智能提示,方便编写POC。 \r

\r

首先安装https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml插件,然后在设置中确认Extensions - YAML中的相关开关已打开。然后点击`Edit in settings.json`,将json内容修改为\r

\r

```javascript\r

{\r

\'yaml.schemas\': {\r

\'https://raw.githubusercontent.com/chaitin/gamma/master/static/schema/schema-v2.json\': [\'fingerprint-yaml-*.yml\', \'poc-yaml-*.yml\']\r

}\r

}\r

````\r

\r

这样,当你创建一个以`poc-yaml-`开头且扩展名为`yml`的文件时,就可以自动提示。 \r

\r

注意,由于插件bug,除了第一行之外,其他内容无法直接提示。需要使用快捷键让VSCode 显示提示,通常是`ctrl` + `Space`。 \r

\r poc.gif

\r

\r

### jetbrains系列IDE\r

\r

[下载文件](https://raw.githubusercontent.com/chaitin/gamma/master/static/schema/schema.json)\r

\r

## 生命周期\r

\r

为了帮助大家更好的理解poc中各部分的作用,这里我们先介绍一下一个yaml poc的执行流程。 \r

\r

当yaml poc从文件加载到go的某个结构中后,首先会预编译表达式并进行静态类型检查。这个过程主要影响yaml中的set和表达式部分。这两部分是yaml poc的关键,主要使用CEL表达式。 \r

\r

检查完成后,内存中的poc就处于等待调度的状态。每当**新请求**到来时,就会执行类似下面的伪代码:\r

\r

```golang\r

对于rules:中的规则\r

newReq=mutate_request_by_rule(req, 规则)\r

响应=发送(newReq)\r

如果不是check_response(响应, 规则):\r

中断\r

````\r

\r

简单来说,就是根据rule中的规则对请求进行转换,然后得到转换后的响应,然后检查响应是否与“表达式”部分中的表达式匹配。如果匹配,则继续下一条规则;如果不匹配,则退出执行。 \r

如果最后一条规则执行成功,则说明目标存在漏洞。将详细信息附加到漏洞输出后,单个POC的整个流程就完成了。 \r

\r

当前版本的实现将**新请求**定义为: **新目录**。例如,当以下URL依次进入检查队列时,执行情况如下: \r

\r

````\r

http://exmaple.com/将被执行,上下文为/\r

http://example.com/a 不会再次执行,因为上下文也是/\r

http://example.com/a/b 将在上下文/a/\r 下执行

http://example.com/a/c/不会被执行,超出深度限制(深度)\r

````\r

\r

其中,`depth`是phantasm插件的配置项,用于指定检测深度。您可以参考:[插件配置](/configration/plugins?id=dirscan)\r

\r

## 转义指令\r

\r

在编写表达式时,需要特别注意一个问题:yaml 字符串的转义和CEL 表达式字符串的转义。 \r

\r

在yaml中,如果要写字符串类型的值,可以使用引号将其包裹起来,如:\r

\r

```yaml\r

name: \'值\'\r

````\r

\r

但如果值中有反斜杠,解析yaml时就会被转义。那么如果表达式代码中有双引号或者转义字符,转义字符就没有了,我们需要双转义。这个时候写出来的代码将会非常不可读,也难以维护。 \r

\r

因此,建议使用yaml中支持的[块样式](https://yaml.org/spec/1.2/spec.html#style/block/)来表达,如:\r

\r

````\r

表达式: |\r

response.status==200 response.body.bcontains(b'\\x01\\x02\\x03')\r

````\r

\r

此时,YAML 级别不需要转义。 \r

\r

## 如何调试poc\r

\r

如果poc无法扫描出预期的结果,可以按照以下思路进行调试\r

\r

- 确保poc语法正确并且有效负载正确。 \r

- 在配置文件的`http`部分添加`proxy: \'http://proxy:port\'`,例如设置burpsuite为代理,这样就可以在burp中看到poc发送的请求,看看是否是预期的。

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。