Skip to content

Commit 8100ab8

Browse files
committed
[change] 一些调整
1 parent 88e00a0 commit 8100ab8

File tree

5 files changed

+131
-227
lines changed

5 files changed

+131
-227
lines changed

guide/_sidebar.md

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@
77
- [**YAML格式介绍**](/guide/yaml/yaml_format.md)
88
- [**YAML插件的基本构成**](/guide/yaml/yaml_script_v2.md)
99
- [**YAML插件的运行逻辑**](/guide/yaml/yaml_run_logic.md)
10-
- **高级用法**
10+
- **参数详解**
1111

12-
- [**自定义变量 - set**](/guide/skill/set.md)
13-
- [**全局变量载荷 - payload**](/guide/skill/payload.md)
14-
- [**扫描路径 - path**](/guide/skill/path.md)
12+
- [**自定义变量 - set**](/guide/hiq/set.md)
13+
- [**全局变量载荷 - payload**](/guide/hiq/payloads.md)
14+
- [**漏洞规则部分 - rules**](/guide/hiq/rules.md)
15+
- [**信息部分 - detail**](/guide/hiq/details.md)
1516
- [**反连平台 - reverse**](/guide/skill/reverse.md)
1617
- [**转义的各类问题**](/guide/skill/escape.md)
1718

@@ -28,11 +29,6 @@
2829
- **高质量POC规范**
2930

3031
- [**简述**](/guide/hiq/summary.md)
31-
- **脚本通用部分**
32-
- [set(变量)](/guide/hiq/set.md)
33-
- [payloads(optional)](/guide/hiq/payloads.md)
34-
- [rules(漏洞规则部分)](/guide/hiq/rules.md)
35-
- [detail(信息部分)](/guide/hiq/details.md)
3632
- **漏洞检测部分**
3733
- [未授权访问](/guide/hiq/unauth.md)
3834
- [目录穿越/文件读取](/guide/hiq/path_traversal.md)

guide/hiq/set.md

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,3 +130,129 @@ expression: rr0() && rr1()
130130
这条规则相比之前的那条似乎规则更强,发出的两个随机数在两个不同的请求中,没有交集的存在,很难发生误报。但是此时难得一见的事情发生了,r1和r2的随机值竟然相等,且在请求rr1时,会将请求的文件名称打印在页面中,那么此时恰好匹配到r2,发生了误报的现象
131131
132132
那么,对于这种情况,这里要求在使用同一个随机函数时,不同变量的随机范围一定要完全不同,相互之间不存在交集
133+
134+
### 变量间的引用
135+
136+
```yaml
137+
set:
138+
s1: randomLowercase(10)
139+
base64s1: base64(s1)
140+
s2: base64s1 + "AAA"
141+
```
142+
143+
在上述的例子中,我们定义了三个变量,其中 `s2` 的值是 `base64s1` 的值加上 `AAA`。由此可知,在set中,引用一个变量的值,不需要使用`{{}}`
144+
将变量包裹起来,直接使用变量名称即可。从这个规则我们也可以引申出,在expression、output中,引用变量的值,也不需要使用`{{}}`将变量包裹起来,直接使用变量名称即可。
145+
146+
### 定义字符串的方式
147+
148+
在定义字符串的时候,有三种方式,如下所示:
149+
```yaml
150+
name: poc-yaml-test
151+
transport: http
152+
set:
153+
s1: string("hello world")
154+
s2: |
155+
"hello world"
156+
s3: '"hello world"'
157+
rules:
158+
r0:
159+
request:
160+
method: POST
161+
path: /
162+
follow_redirects: false
163+
headers:
164+
Content-Type: text/xml
165+
body: |
166+
{{s1}} + {{s2}} + {{s3}}
167+
expression: response.status == 200
168+
expression: r0()
169+
detail:
170+
author: test
171+
```
172+
发出的请求如下:
173+
```HTTP
174+
POST / HTTP/1.1
175+
Host: docs.xray.cool
176+
Content-Length: 40
177+
Content-Type: text/xml
178+
179+
hello world + hello world + hello world
180+
```
181+
可以发现三种形式都能够正常输出字符串,但是如果只使用单引号或者双引号作为开头,将会引起加载错误,比如:
182+
```yaml
183+
set:
184+
s1: "hello world"
185+
s2: 'hello world'
186+
```
187+
使用这样的写法就将加载失败。
188+
189+
## 三目运算符的使用方式
190+
191+
### 介绍
192+
193+
在许多编程语言中,三目运算符(也称为条件运算符)是一种简洁的表达条件逻辑的方式。在 CEL(Common Expression Language)中,三目运算符也是一种常用的表达式,其语法如下:
194+
```yaml
195+
条件表达式 ? 表达式1 : 表达式2
196+
```
197+
三目运算符的工作原理是,当条件表达式的结果为 true 时,整个表达式的值等于表达式1的值;当条件表达式的结果为 false 时,整个表达式的值等于表达式2的值。
198+
199+
例如,在 CEL 表达式中,你可以这样使用三目运算符:
200+
```yaml
201+
age >= 18 ? "Adult" : "Minor"
202+
```
203+
在这个例子中,如果 age 大于或等于 18,表达式的值将为 "Adult",否则将为 "Minor"。这与以下的 if-else 语句相似:
204+
```go
205+
if age >= 18 {
206+
return "Adult"
207+
} else {
208+
return "Minor"
209+
}
210+
```
211+
212+
### 案例
213+
214+
<!-- tabs:start -->
215+
216+
#### **mysql指纹匹配(截取)**
217+
218+
```yaml
219+
name: fingerprint-yaml-tcp-mysql
220+
manual: false
221+
transport: tcp
222+
set:
223+
GenericLines: b"\r\n\r\n"
224+
payloads:
225+
payloads:
226+
l:
227+
re: '"(?s)^.\\0\\0\\0\\xffj\\x04''[\\d.]+'' .* MySQL"'
228+
m:
229+
re: '"(?s)^.\\0\\0\\0\\x0a(?P<version>5\\.[-_~.+:\\w]+MariaDB-[-_~.+:\\w]+~bionic)\\0"'
230+
n:
231+
re: '"(?s)^.\\0\\0\\0\\x0a(?P<version>[\\w._-]+)\\0............\\0\\x5f\\xd3\\x2d\\x02\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0............\\0$"'
232+
r:
233+
re: '"(?s)^.\\0\\0\\0\\x0a(?P<version>3\\.[-_~.+\\w]+)\\0...\\0"'
234+
s:
235+
re: '"(?s)^.\\0\\0\\0\\x0a(?P<version>4\\.[-_~.+\\w]+)\\0"'
236+
rules:
237+
r1:
238+
request:
239+
cache: true
240+
content: '{{GenericLines}}'
241+
expression: re.bmatches(response.raw)
242+
output:
243+
result: re.bsubmatch(response.raw)
244+
osname: |
245+
re.contains("bionic") ? "Linux" : ""
246+
version: result["version"]
247+
expression: r1()
248+
detail:
249+
fingerprint:
250+
infos:
251+
- type: system_bin
252+
name: mysql
253+
version: '{{version}}'
254+
- type: operating_system
255+
name: '{{osname}}'
256+
```
257+
258+
<!-- tabs:end -->

guide/skill/path.md

Lines changed: 0 additions & 53 deletions
This file was deleted.

guide/skill/payload.md

Lines changed: 0 additions & 32 deletions
This file was deleted.

guide/skill/set.md

Lines changed: 0 additions & 133 deletions
This file was deleted.

0 commit comments

Comments
 (0)