Translated ['src/banners/hacktricks-training.md', 'src/pentesting-ci-cd/

This commit is contained in:
Translator
2025-01-02 01:08:17 +00:00
parent b37c3e835c
commit 230d57cbe7
226 changed files with 2239 additions and 2244 deletions

View File

@@ -18,9 +18,9 @@ Github 仓库可以配置为公共、私有和内部。
- **私有**意味着**只有**组织中的人才能访问它们
- **内部**意味着**只有**企业中的人(一个企业可能有多个组织)才能访问它
- **公共**意味着**所有互联网**用户都可以访问它。
- **公共**意味着**所有互联网**都可以访问它。
如果你知道**想要攻击的用户、仓库或组织**,你可以使用**github dorks**来查找敏感信息或搜索**每个仓库中的敏感信息泄露**。
如果你知道**要针对的用户、仓库或组织**,你可以使用**github dorks**来查找敏感信息或搜索**每个仓库中的敏感信息泄露**。
### Github Dorks
@@ -28,13 +28,13 @@ Github 允许**通过指定用户、仓库或组织作为范围来搜索某些
工具(每个工具包含其 dorks 列表):
- [https://github.com/obheda12/GitDorker](https://github.com/obheda12/GitDorker) ([Dorks 列表](https://github.com/obheda12/GitDorker/tree/master/Dorks))
- [https://github.com/techgaun/github-dorks](https://github.com/techgaun/github-dorks) ([Dorks 列表](https://github.com/techgaun/github-dorks/blob/master/github-dorks.txt))
- [https://github.com/hisxo/gitGraber](https://github.com/hisxo/gitGraber) ([Dorks 列表](https://github.com/hisxo/gitGraber/tree/master/wordlists))
- [https://github.com/obheda12/GitDorker](https://github.com/obheda12/GitDorker) ([Dorks list](https://github.com/obheda12/GitDorker/tree/master/Dorks))
- [https://github.com/techgaun/github-dorks](https://github.com/techgaun/github-dorks) ([Dorks list](https://github.com/techgaun/github-dorks/blob/master/github-dorks.txt))
- [https://github.com/hisxo/gitGraber](https://github.com/hisxo/gitGraber) ([Dorks list](https://github.com/hisxo/gitGraber/tree/master/wordlists))
### Github 泄露
请注意github dorks 也旨在使用 github 搜索选项查找泄露。此部分专门介绍那些将**下载每个仓库并搜索其中敏感信息**的工具(甚至检查某些深度的提交)。
请注意github dorks 也旨在使用 github 搜索选项查找泄露。本节专门介绍那些将**下载每个仓库并搜索其中敏感信息**的工具(甚至检查某些提交深度)。
工具(每个工具包含其正则表达式列表):
@@ -51,11 +51,11 @@ Github 允许**通过指定用户、仓库或组织作为范围来搜索某些
### 外部分支
可以通过**滥用拉取请求来妥协仓库**。要知道一个仓库是否脆弱,你主要需要阅读 Github Actions yaml 配置。 [**更多信息见下文**](./#execution-from-a-external-fork)。
可以通过**滥用拉取请求来妥协仓库**。要知道一个仓库是否脆弱,你主要需要阅读 Github Actions yaml 配置。[**更多信息见下文**](./#execution-from-a-external-fork)。
### Github 在删除/内部分支中的泄露
### 删除/内部分支中的 Github 泄露
即使是删除或内部的,也可能从 github 仓库的分支中获取敏感数据。请在此查看:
即使是删除或内部的,也可能从 github 仓库的分支中获取敏感数据。请在此查看:
{{#ref}}
accessible-deleted-data-in-github.md
@@ -65,12 +65,12 @@ accessible-deleted-data-in-github.md
### 成员权限
可以组织**成员**分配一些**默认权限**。这些可以从页面 `https://github.com/organizations/<org_name>/settings/member_privileges` 或从 [**Organizations API**](https://docs.github.com/en/rest/orgs/orgs) 控制。
可以分配给组织**成员**一些**默认权限**。这些可以从页面 `https://github.com/organizations/<org_name>/settings/member_privileges` 或从 [**Organizations API**](https://docs.github.com/en/rest/orgs/orgs) 控制。
- **基本权限**:成员将对组织仓库拥有 None/Read/write/Admin 权限。推荐使用**None**或**Read**。
- **仓库分叉**:如果不必要,最好**不允许**成员分叉组织仓库。
- **页面创建**:如果不必要,最好**不允许**成员从组织仓库发布页面。如果必要,可以允许创建公共或私有页面。
- **集成访问请求**:启用后,外部协作者将能够请求访问 GitHub 或 OAuth 应用以访问该组织及其资源。通常是需要的,但如果不需要,最好禁用它。
- **集成访问请求**:启用此选项后,外部协作者将能够请求访问此组织及其资源的 GitHub 或 OAuth 应用。通常是需要的,但如果不需要,最好禁用它。
- _我在 API 响应中找不到此信息如果你找到了请分享_
- **仓库可见性更改**:如果启用,具有**管理员**权限的**成员**将能够**更改其可见性**。如果禁用,只有组织所有者可以更改仓库的可见性。如果你**不**希望人们将内容**公开**,请确保此选项**禁用**。
- _我在 API 响应中找不到此信息如果你找到了请分享_
@@ -78,7 +78,7 @@ accessible-deleted-data-in-github.md
- _我在 API 响应中找不到此信息如果你找到了请分享_
- **允许成员创建团队**:如果启用,任何**成员**都将能够**创建**新**团队**。如果禁用,只有组织所有者可以创建新团队。最好将此选项禁用。
- _我在 API 响应中找不到此信息如果你找到了请分享_
- **此页面上可以配置更多内容**,但前面的内容与安全性相关性更大
- **此页面上可以配置更多内容**,但前面的内容与安全性相关的内容
### Actions 设置
@@ -91,7 +91,7 @@ accessible-deleted-data-in-github.md
- [**API-1**](https://docs.github.com/en/rest/actions/permissions#get-allowed-actions-and-reusable-workflows-for-an-organization)**,** [**API-2**](https://docs.github.com/en/rest/actions/permissions#list-selected-repositories-enabled-for-github-actions-in-an-organization)
- **来自外部协作者的拉取请求工作流**:建议**要求所有**外部协作者的批准。
- _我找不到包含此信息的 API如果你找到了请分享_
- **从拉取请求运行工作流**:强烈**不建议从拉取请求运行工作流**,因为分源的维护者将获得使用具有读取权限的令牌访问源仓库的能力。
- **从拉取请求运行工作流**:强烈**不建议从拉取请求运行工作流**,因为分支来源的维护者将获得使用具有读取权限的令牌访问源仓库的能力。
- _我找不到包含此信息的 API如果你找到了请分享_
- **工作流权限**:强烈建议**仅授予读取仓库权限**。不建议授予写入和创建/批准拉取请求的权限,以避免滥用授予运行工作流的 GITHUB_TOKEN。
- [**API**](https://docs.github.com/en/rest/actions/permissions#get-default-workflow-permissions-for-an-organization)
@@ -103,18 +103,18 @@ _如果你知道访问此信息的 API 端点请告诉我_
- **第三方应用访问策略**:建议限制对每个应用的访问,仅允许必要的应用(在审核后)。
- **已安装的 GitHub 应用**:建议仅允许必要的应用(在审核后)。
## 侦查与攻击滥用凭证
## 侦查与利用凭证的攻击
在此场景中,我们假设你已经获得了对一个 github 账户的某些访问权限。
### 使用用户凭证
如果你以某种方式已经拥有组织内某个用户的凭证,你可以**直接登录**并检查你拥有的**企业和组织角色**,如果你是普通成员,检查普通成员拥有的**权限**、你所在的**组**、你对哪些**仓库**拥有**权限**以及**这些仓库是如何保护的**。
如果你以某种方式已经获得了组织内某个用户的凭证,你可以**直接登录**并检查你拥有的**企业和组织角色**,如果你是普通成员,检查普通成员拥有的**权限**、你所在的**组**、你对哪些**仓库**拥有**权限**以及**这些仓库是如何保护的**。
请注意,**可能会使用 2FA**,因此你只能在能够**通过该检查**的情况下访问此信息。
> [!NOTE]
> 请注意,如果你**设法窃取了 `user_session` cookie**(当前配置为 SameSite: Lax你可以**完全冒充用户**而无需凭证或 2FA。
> 请注意,如果你**设法窃取了 `user_session` cookie**(当前配置为 SameSite: Lax你可以**完全冒充用户**而无需凭证或 2FA。
请查看下面关于 [**分支保护绕过**](./#branch-protection-bypass) 的部分,以防有用。
@@ -122,15 +122,15 @@ _如果你知道访问此信息的 API 端点请告诉我_
Github 允许**用户**设置**SSH 密钥**,作为**代表他们部署代码的身份验证方法**(不应用 2FA
使用此密钥,你可以对用户拥有某些权限的仓库进行**更改**,但是你不能使用它访问 github api 来枚举环境。然而,你可以**枚举本地设置**以获取有关你有访问权限的仓库和用户的信息:
使用此密钥,你可以对用户拥有某些权限的仓库进行**更改**,但是你不能使用它访问 github api 来枚举环境。然而,你可以获取**枚举本地设置**以获取有关你有访问权限的仓库和用户的信息:
```bash
# Go to the the repository folder
# Get repo config and current user name and email
git config --list
```
如果用户将其用户名配置为他的 github 用户名,您可以访问他户中设置的 **公钥**,网址为 _https://github.com/\<github_username>.keys_您可以检查此内容以确认您找到的私钥是否可以使用。
如果用户将其用户名配置为他的 github 用户名,您可以访问他户中设置的 **公钥**,网址为 _https://github.com/\<github_username>.keys_您可以检查此以确认您找到的私钥是否可以使用。
**SSH 密钥** 也可以在存储库中设置为 **部署密钥**。任何拥有此密钥的人都能够 **从存储库启动项目**。通常在具有不同部署密钥的服务器上,本地文件 **`~/.ssh/config`** 将提供与密钥相关的信息。
**SSH 密钥** 也可以在库中设置为 **部署密钥**。任何拥有此密钥的人都能够 **从库启动项目**。通常在具有不同部署密钥的服务器上,本地文件 **`~/.ssh/config`** 将提供与密钥相关的信息。
#### GPG 密钥
@@ -144,7 +144,7 @@ gpg --list-secret-keys --keyid-format=long
有关[**用户令牌的介绍,请查看基本信息**](basic-github-information.md#personal-access-tokens)。
用户令牌可以用作**HTTPSGit的密码**,或用于[**通过基本身份验证对API进行身份验证**](https://docs.github.com/v3/auth/#basic-authentication)。根据附加的权限,您可能能够执行不同的操作。
用户令牌可以用作**HTTPS Git的密码**,或用于[**通过基本身份验证对API进行身份验证**](https://docs.github.com/v3/auth/#basic-authentication)。根据附加的权限,您可能能够执行不同的操作。
用户令牌的格式如下:`ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123`
@@ -176,17 +176,17 @@ abusing-github-actions/
## 分支保护绕过
- **要一定数量的批准**如果您破坏了多个帐户您可能只需从其他帐户接受您的PR。如果您只有创建PR的帐户则无法接受自己的PR。但是如果您可以访问仓库中的**Github Action**环境,使用**GITHUB_TOKEN**,您可能能够**批准您的PR**并以这种方式获得1个批准。
- **要一定数量的批准**如果您破坏了多个帐户您可能只需从其他帐户接受您的PR。如果您只有创建PR的帐户则无法接受自己的PR。但是如果您可以访问仓库中的**Github Action**环境,使用**GITHUB_TOKEN**,您可能能够**批准您的PR**并以这种方式获得1个批准。
- _注意对于此以及代码所有者限制通常用户无法批准自己的PR但如果您可以您可以利用它来接受您的PR。_
- **在推送新提交时撤销批准**:如果未设置此项,您可以提交合法代码,等待人批准,然后放入恶意代码并将其合并到受保护的分支中。
- **要代码所有者的审查**:如果此项已激活且您是代码所有者,您可以让**Github Action创建您的PR然后自己批准它**。
- **在推送新提交时撤销批准**:如果未设置此项,您可以提交合法代码,等待人批准,然后放入恶意代码并将其合并到受保护的分支中。
- **要代码所有者的审查**:如果此项已激活且您是代码所有者,您可以让**Github Action创建您的PR然后自己批准它**。
- 当**CODEOWNER文件配置错误**时Github不会抱怨但也不会使用它。因此如果配置错误**代码所有者保护将不适用。**
- **允许指定的参与者绕过拉取请求要求**:如果您是这些参与者之一,您可以绕过拉取请求保护。
- **包括管理员**:如果未设置此项且您是仓库的管理员,您可以绕过此分支保护。
- **PR劫持**:您可能能够**修改其他人的PR**添加恶意代码自己批准结果PR并合并所有内容。
- **移除分支保护**:如果您是**仓库的管理员,您可以禁用保护**合并您的PR并重新设置保护。
- **绕过推送保护**:如果一个仓库**仅允许某些用户**在分支中发送推送(合并代码)(分支保护可能保护所有分支,指定通配符`*`)。
- 如果您对仓库**具有写入访问权限,但由于分支保护不允许推送代码**,您仍然可以**创建一个新分支**,并在其中创建一个**在代码推送时触发的github action**。由于**分支保护在分支创建之前不会保护该分支**,因此对该分支的第一次代码推送将**执行github action**。
- 如果您对仓库**具有写入权限,但由于分支保护不允许推送代码**,您仍然可以**创建一个新分支**,并在其中创建一个**在推送代码时触发的github action**。由于**分支保护在分支创建之前不会保护该分支**,因此对该分支的第一次代码推送将**执行github action**。
## 绕过环境保护
@@ -216,7 +216,7 @@ branches:
### 冒名顶替提交 - 通过repo提交的后门
在Github中可以**从一个分叉创建一个PR到一个repo**。即使PR**未被接受**在原始repo中也会为代码的分叉版本创建一个**提交**id。因此攻击者**可以固定使用一个来自看似合法的repo的特定提交该提交并不是由repo的所有者创建的**。
在Github中可以**从一个fork创建一个PR到一个repo**。即使PR**未被接受**在原始repo中也会为代码的fork版本创建一个**提交**id。因此攻击者**可以固定使用一个来自看似合法的repo的特定提交该提交并不是由repo的所有者创建的**。
像[**这个**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e)
```yaml