Skip to content

Commit ec500d4

Browse files
committed
[fix] 细节修复
1 parent 6222aba commit ec500d4

File tree

10 files changed

+28
-55
lines changed

10 files changed

+28
-55
lines changed

guide/_sidebar.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
- [**全局变量载荷 - payload**](/guide/hiq/payloads.md)
1414
- [**漏洞规则部分 - rules**](/guide/hiq/rules.md)
1515
- [**信息部分 - detail**](/guide/hiq/details.md)
16-
- [**反连平台 - reverse**](/guide/skill/reverse.md)
1716
- [**转义的各类问题**](/guide/skill/escape.md)
1817

1918
[//]: # (todo: - [**输出 - output**](/guide/skill/output.md))

guide/hiq/file_upload.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ detail:
7575
- 如果上传的文件内容是二进制文件,比如zip,暂时没有办法实现上述所说的随机化内容,应该如何处理?
7676
- 这种情况下现阶段的情况下不是很推荐再去编写`yaml poc`进行验证,可以等待使用`go poc`完成随机化的处理
7777

78-
- **如果是使用系统命令创建的文件,首先尽量不要创建脚本类型的文件,尽量是一个txt文件;其次,不要再多发一个包进行文件的删除,因为这一般就会使用rm命令,这个命令在目标系统上执行是非常危险的行文,所以宁愿留一个文件,也不要执行相关的命令**
78+
- **如果是使用系统命令创建的文件,首先尽量不要创建脚本类型的文件,尽量是一个txt文件;其次,不要再多发一个包进行文件的删除,因为这一般就会使用rm命令,这个命令在目标系统上执行是非常危险的行为,所以宁愿留一个文件,也不要执行相关的命令**
7979

8080
## 模板
8181

guide/hiq/question_answer.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
| 使用网页特征匹配 | 简单便捷,发包量低,基本只要发一个包就能确定是不是漏洞版本 | 可能会因为实际的网络环境,难以对漏洞进行利用,或者在一些特征变更不明显的系统中,发生误报的问题 |
4343
| 使用实际利用方法 | 准确,只要验证成功且匹配规则无问题,就能够说明目标系统绝大多数情况下都是存在漏洞的 | 相比特征匹配来说,可能需要寻求更加严谨的利用方式,且返回的结果可能会受安全设备的影响 |
4444

45-
两种各有千秋,并不好直接说某一种就是我们的最优解,这是需要我们依据漏洞的类型与利用的难易程度进行衡量,选择对于当强漏洞的最优解,达到`尽可能地减少发包量,同时尽可能地减少误报程度`的目的。当然这些内容并不是强求的
45+
两种各有千秋,并不好直接说某一种就是我们的最优解,这是需要我们依据漏洞的类型与利用的难易程度进行衡量,选择对于当前漏洞的最优解,达到`尽可能地减少发包量,同时尽可能地减少误报程度`的目的。当然这些内容并不是强求的
4646

4747
但是依据以往情况下审核过后的结果,我们大致可以分为这么几种情况
4848

@@ -97,7 +97,7 @@ detail:
9797

9898
那么通过上边的判断,我们可以认为这个poc的内容是可以取代实际的原理去验证漏洞的存在的
9999

100-
## 四、如果目标漏洞是登陆后才能够进行利用的,能给出相关cookie进行验证吗
100+
## 四、如果目标漏洞是登录后才能够进行利用的,能给出相关cookie进行验证吗
101101

102102
首先对于这个问题,这里的回答是不能。对于这个问题大概有以下的解答
103103

guide/hiq/remote_code_execution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Remote Code Execution(远程代码执行)
22

3-
与远程命令执行类似,这个也能够直接执行相关命令, 但是不同是的,这个直接执行的是对应的语言代码,一般情况下与系统无关,那么我们通常并不用考虑它在不同系统中的兼容性问题
3+
与远程命令执行类似,这个也能够直接执行相关命令, 但是不同的是,这个直接执行的是对应的语言代码,一般情况下与系统无关,那么我们通常并不用考虑它在不同系统中的兼容性问题
44

55
## 有回显代码执行
66

guide/hiq/remote_command_execution.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ linux => 使用cat命令 => 读取/etc/passwd等系统中存在的文件
1313
windows => 使用type命令 => 读取win.ini等文件
1414
```
1515

16-
那么我们在对应的rule中需要一定要写出
16+
那么我们在对应的rule中一定要写出
1717

1818
```yaml
1919
rules:
@@ -42,7 +42,7 @@ expression: linux() || windows()
4242
- 可以选择使用读取文件的指令读取出web系统中通用的配置文件等内容,例如java系统常见的pom.xml等(较为推荐)
4343
- linux中可以选择使用rev,expr等命令处理输入内容后再进行判断,对于内容的严谨性可以参阅通用部分的set内容
4444
- 一些web系统中可以选择在能访问的文件中直接写入文件内容,通过访问产生的文件来判断漏洞的存在(不是很推荐,会残留文件)
45-
- **如果使用这样的方式创建了一个文件,首先尽量不要创建脚本类型的文件,尽量是一个txt文件;其次,不要再多发一个包进行文件的删除,因为这一般就会使用rm命令,这个命令在目标系统上执行是非常危险的行文,所以宁愿留一个文件,也不要执行相关的命令**
45+
- **如果使用这样的方式创建了一个文件,首先尽量不要创建脚本类型的文件,尽量是一个txt文件;其次,不要再多发一个包进行文件的删除,因为这一般就会使用rm命令,这个命令在目标系统上执行是非常危险的行为,所以宁愿留一个文件,也不要执行相关的命令**
4646
- **不可以且一般严禁执行的方案**
4747
- 使用`echo`之类的输出语句`直接`输出一个内容,然后在返回里查找这个内容,此类POC很容易误报和漏报
4848
- 尽量不要使用类似`id`,`uname`这种输出不稳定的指令来进行判断,在不同的环境中输出可能会有些许的差异

guide/hiq/set.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 自定义变量 - set
22

3-
Set的作用只为定义变量,在set中我们能对变量进行基础的运算
3+
Set的作用只为定义变量,在set中我们能对变量进行基础的运算
44

55
## 变量的约定做法
66

guide/hiq/sql_injection.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,14 @@ rules:
6767
cache: false
6868
method: GET
6969
path: /xxx?keyword=%27%2B(select(0)from(select(sleep({{randSecond1}})))v)%2B%27/
70+
read_timeout: "10"
7071
expression: response.latency - undelayedLantency >= randSecond1 * 1000 - 500 && response.status == 200 && response.body.bcontains(b"{\"code\":200")
7172
r2:
7273
request:
7374
cache: false
7475
method: GET
7576
path: /xxx?keyword=%27%2B(select(0)from(select(sleep({{randSecond2}})))v)%2B%27/
77+
read_timeout: "10"
7678
expression: response.latency - undelayedLantency >= randSecond2 * 1000 - 500 && response.status == 200 && response.body.bcontains(b"{\"code\":200")
7779
expression: r0() && r1()
7880
detail:
@@ -107,6 +109,7 @@ detail:
107109
- 同时无特殊的情况下,`建议`除了时间差值的比较之外,其他的内容与第一条相同
108110
- 在第三条关于注入的rule中
109111
- 这一条的内容与第二条除了时间的取值都相同即可
112+
- **一定要注意添加read_timeout: "10",不然扫描器会直接不等响应完就根据默认时间直接结束,同时要注意该漏洞的payload是否会被执行多次,造成等待时间翻倍的情况,如果存在,请自行缩短sleep时长,同时提高read_timeout的值**
110113

111114
?> 这里强求对页面中的部分内容进行匹配,目的是为了作为目标系统的指纹,消除网络环境的影响,防止一些不相干的系统造成的误报。同时匹配的内容不用过多,体现出目标系统的独特性即可
112115

guide/skill/escape.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,17 @@
1010

1111
- `|` 或者 `|-` 是不需要考虑 yaml 转义的格式,类似 golang 中的 `
1212
1. 会保留结尾空格
13-
1. 会保留换行
14-
1. 不支持转义
15-
1. `|` 会保留最后的换行, `|-` 不会
13+
2. 会保留换行
14+
3. 不支持转义
15+
4. `|` 会保留最后的换行, `|-` 不会
1616
- `"` 是支持转义字符的格式
1717
1. 换行会变成空格, 如果想不变成空格,需要结尾加 \
18-
1. 2连换行会变成换行, `\n` 会变成换行
19-
1. 支持转义, `"` 需要转义
18+
2. 2连换行会变成换行, `\n` 会变成换行
19+
3. 支持转义, `"` 需要转义
2020
- `` 是不支持转义的,且不支持 yaml 的一些保留字符的比如:`#`, `:`
2121
1. 开头不能是 `'`, `"`
22-
1. 不得占用 yaml 的关键字符
23-
1. 不支持转义
22+
2. 不得占用 yaml 的关键字符
23+
3. 不支持转义
2424

2525
**注:** 遇事不决 `hex dump` 一下,各种语言的字符串变量通常还有自己的转义, print 打印出来的字符可能还会被 shell 本身处理,会让事情变得更加复杂
2626

@@ -96,9 +96,9 @@ data: |-
9696
我们可以用 `"` 来表示此包。需要做的事情是:
9797

9898
1. 转义掉其中的 `"`
99-
1. 正确的处理换行:
99+
2. 正确的处理换行:
100100
1. 换行会变成空格, 如果想不变成空格,需要结尾加 \
101-
1. 2连换行会变成换行, `\n` 会变成换行
101+
2. 2连换行会变成换行, `\n` 会变成换行
102102

103103
推荐的写法:
104104

@@ -205,23 +205,23 @@ data: |
205205
1. 考虑正则应该如何写, 该例子需要转义 `[``product:\['c="a"'\]`
206206
2. 考虑 cel 转义, 因为含有 `'` `"`, 所以必须要转义, 选择 `"` 的方式,需要转义 `"``\`
207207
1. 首先转义 `\`: `product:\\['c="a"'\\]`
208-
1. 然后转义 `"`: `product:\\['c=\"a\"'\\]`
209-
1. 最后用双引包裹: `"product:\\['c=\"a\"'\\]".matches(a)`
208+
2. 然后转义 `"`: `product:\\['c=\"a\"'\\]`
209+
3. 最后用双引包裹: `"product:\\['c=\"a\"'\\]".matches(a)`
210210
3. 考虑 yaml 转义,选择 `|` 不需要转义, 最终:`"product:\\['c=\"a\"'\\]".matches(a)`
211211

212212
PS(大脑升级):
213213

214214
就要 yaml 用 `"` 格式,那么会是什么样子的呢?
215215

216216
1. 考虑正则应该如何写, 该例子需要转义 `[``product:\['c="a"'\]`
217-
1. 考虑 cel 转义, 因为含有 `'` `"`, 所以必须要转义, 选择 `"` 的方式,需要转义 `"``\`
217+
2. 考虑 cel 转义, 因为含有 `'` `"`, 所以必须要转义, 选择 `"` 的方式,需要转义 `"``\`
218218
1. 首先转义 `\`: `product:\\['c="a"'\\]`
219-
1. 然后转义 `"`: `product:\\['c=\"a\"'\\]`
220-
1. 最后用双引包裹: `"product:\\['c=\"a\"'\\]".matches(a)`
221-
1. 考虑 yaml 转义,需要转义 `\`, `"`
219+
2. 然后转义 `"`: `product:\\['c=\"a\"'\\]`
220+
3. 最后用双引包裹: `"product:\\['c=\"a\"'\\]".matches(a)`
221+
3. 考虑 yaml 转义,需要转义 `\`, `"`
222222
1. 首先转义 `\`: `"product:\\\\['c=\\"a\\"'\\\\]".matches(a)`
223-
1. 其次转义 `"`: `\"product:\\\\['c=\\\"a\\\"'\\\\]\".matches(a)`
224-
1. 最后用 `"` 包裹: `"\"product:\\\\['c=\\\"a\\\"'\\\\]\".matches(a)"`
223+
2. 其次转义 `"`: `\"product:\\\\['c=\\\"a\\\"'\\\\]\".matches(a)`
224+
3. 最后用 `"` 包裹: `"\"product:\\\\['c=\\\"a\\\"'\\\\]\".matches(a)"`
225225

226226
```yaml
227227
data: "\"product:\\\\['c=\\\"a\\\"'\\\\]\".matches(a)"

guide/skill/reverse.md

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

guide/yaml/yaml_poc_template.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ rules:
304304
Content-Type: application/x-www-form-urlencoded
305305
body: |
306306
id=set /A {{s1}}-{{s2}}
307-
expression: response.status == 200 && response.body_string.contains(string(s1 - s2))
307+
expression: response.status == 200 && response.body_string.contains(string(s2 - s1))
308308
r1:
309309
request:
310310
cache: true

0 commit comments

Comments
 (0)