Skip to content

Commit

Permalink
[fix] 细节修复
Browse files Browse the repository at this point in the history
  • Loading branch information
Jarcis-cy committed Dec 1, 2023
1 parent 6222aba commit ec500d4
Show file tree
Hide file tree
Showing 10 changed files with 28 additions and 55 deletions.
1 change: 0 additions & 1 deletion guide/_sidebar.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
- [**全局变量载荷 - payload**](/guide/hiq/payloads.md)
- [**漏洞规则部分 - rules**](/guide/hiq/rules.md)
- [**信息部分 - detail**](/guide/hiq/details.md)
- [**反连平台 - reverse**](/guide/skill/reverse.md)
- [**转义的各类问题**](/guide/skill/escape.md)

[//]: # (todo: - [**输出 - output**](/guide/skill/output.md))
Expand Down
2 changes: 1 addition & 1 deletion guide/hiq/file_upload.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ detail:
- 如果上传的文件内容是二进制文件,比如zip,暂时没有办法实现上述所说的随机化内容,应该如何处理?
- 这种情况下现阶段的情况下不是很推荐再去编写`yaml poc`进行验证,可以等待使用`go poc`完成随机化的处理

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

## 模板

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

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

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

Expand Down Expand Up @@ -97,7 +97,7 @@ detail:

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

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

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

Expand Down
2 changes: 1 addition & 1 deletion guide/hiq/remote_code_execution.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Remote Code Execution(远程代码执行)

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

## 有回显代码执行

Expand Down
4 changes: 2 additions & 2 deletions guide/hiq/remote_command_execution.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ linux => 使用cat命令 => 读取/etc/passwd等系统中存在的文件
windows => 使用type命令 => 读取win.ini等文件
```

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

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

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

## 变量的约定做法

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

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

Expand Down
34 changes: 17 additions & 17 deletions guide/skill/escape.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@

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

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

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

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

推荐的写法:

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

PS(大脑升级):

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

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

```yaml
data: "\"product:\\\\['c=\\\"a\\\"'\\\\]\".matches(a)"
Expand Down
29 changes: 0 additions & 29 deletions guide/skill/reverse.md

This file was deleted.

2 changes: 1 addition & 1 deletion guide/yaml/yaml_poc_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ rules:
Content-Type: application/x-www-form-urlencoded
body: |
id=set /A {{s1}}-{{s2}}
expression: response.status == 200 && response.body_string.contains(string(s1 - s2))
expression: response.status == 200 && response.body_string.contains(string(s2 - s1))
r1:
request:
cache: true
Expand Down

0 comments on commit ec500d4

Please sign in to comment.