Gitea 安全
Tip
学习并练习 AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
什么是 Gitea
Gitea 是一个 自托管的社区管理轻量级代码托管 解决方案,使用 Go 编写。
.png)
基本信息
实验室
要在本地运行 Gitea 实例,您只需运行一个 docker 容器:
docker run -p 3000:3000 gitea/gitea
连接到端口 3000 以访问网页。
您也可以使用 kubernetes 运行它:
helm repo add gitea-charts https://dl.gitea.io/charts/
helm install gitea gitea-charts/gitea
未认证枚举
- 公共仓库: http://localhost:3000/explore/repos
- 注册用户: http://localhost:3000/explore/users
- 注册组织: http://localhost:3000/explore/organizations
请注意,默认情况下 Gitea 允许新用户注册。这不会给新用户提供对其他组织/用户仓库的特别有趣的访问权限,但登录用户可能能够查看更多的仓库或组织。
内部利用
在这个场景中,我们假设你已经获得了一些对 GitHub 账户的访问权限。
使用用户凭证/网页 Cookie
如果你以某种方式已经获得了组织内某个用户的凭证(或者你偷了一个会话 Cookie),你可以直接登录并检查你对哪些仓库拥有权限,你在哪些团队中,列出其他用户,以及仓库是如何保护的。
请注意,可能会使用 2FA,因此你只有在能够通过该检查的情况下才能访问这些信息。
Note
请注意,如果你设法偷取了
i_like_giteacookie(当前配置为 SameSite: Lax),你可以完全冒充该用户而无需凭证或 2FA。
使用用户 SSH 密钥
Gitea 允许用户设置SSH 密钥,该密钥将作为代表他们部署代码的身份验证方法(不适用 2FA)。
使用此密钥,你可以对用户拥有某些权限的仓库进行更改,但是你不能使用它访问 Gitea API 来枚举环境。然而,你可以枚举本地设置以获取有关你有访问权限的仓库和用户的信息:
# Go to the the repository folder
# Get repo config and current user name and email
git config --list
如果用户将其用户名配置为他的 gitea 用户名,您可以在 https://github.com/<gitea_username>.keys 中访问他在账户中设置的 公钥,您可以检查此项以确认您找到的私钥是否可以使用。
SSH 密钥 也可以在仓库中设置为 部署密钥。任何拥有此密钥的人都能够 从仓库启动项目。通常在具有不同部署密钥的服务器上,本地文件 ~/.ssh/config 将提供与密钥相关的信息。
GPG 密钥
如 这里 所述,有时需要签署提交,否则您可能会被发现。
在本地检查当前用户是否有任何密钥:
gpg --list-secret-keys --keyid-format=long
使用用户令牌
用户令牌可以替代密码来验证对Gitea服务器的访问通过API。它将对用户拥有完全访问权限。
使用Oauth应用程序
攻击者可能会创建一个恶意Oauth应用程序,以访问接受它们的用户的特权数据/操作,这可能是网络钓鱼活动的一部分。
如基本信息中所述,该应用程序将对用户帐户拥有完全访问权限。
分支保护绕过
在Github中,我们有github actions,默认情况下会获取对仓库的写访问权限的令牌,可以用来绕过分支保护。在这种情况下,不存在,因此绕过的方式更有限。但让我们看看可以做些什么:
- 启用推送:如果任何具有写访问权限的人可以推送到该分支,只需推送即可。
- 白名单限制推送:同样,如果您是此列表的一部分,请推送到该分支。
- 启用合并白名单:如果有合并白名单,您需要在其中。
- 要求批准大于0:那么…您需要妥协另一个用户。
- 限制批准给白名单用户:如果只有白名单用户可以批准…您需要妥协另一个在该列表中的用户。
- 撤销过期批准:如果批准未随新提交而被移除,您可以劫持已批准的PR以注入您的代码并合并PR。
请注意,如果您是组织/仓库管理员,您可以绕过保护。
枚举Webhooks
Webhooks能够将特定的gitea信息发送到某些地方。您可能能够利用这种通信。
然而,通常在webhook中设置了一个您无法检索的密钥,这将防止外部用户知道webhook的URL但不知道密钥来利用该webhook。
但在某些情况下,人们不是将密钥设置在其位置,而是将其作为参数设置在URL中,因此检查URL可能会让您找到密钥和其他您可以进一步利用的地方。
Webhooks可以在仓库和组织级别设置。
后期利用
服务器内部
如果您以某种方式成功进入运行gitea的服务器,您应该搜索gitea配置文件。默认情况下,它位于/data/gitea/conf/app.ini
在此文件中,您可以找到密钥和密码。
在gitea路径(默认:/data/gitea)中,您还可以找到有趣的信息,例如:
- sqlite数据库:如果gitea不使用外部数据库,它将使用sqlite数据库。
- 会话在会话文件夹中:运行
cat sessions/*/*/*可以查看已登录用户的用户名(gitea也可以将会话保存在数据库中)。 - jwt私钥在jwt文件夹中。
- 该文件夹中可能会找到更多敏感信息。
如果您在服务器内部,您还可以使用gitea二进制文件来访问/修改信息:
gitea dump将转储gitea并生成一个.zip文件。gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET将生成指定类型的令牌(持久性)。gitea admin user change-password --username admin --password newpassword更改密码。gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token创建新管理员用户并获取访问令牌。
Tip
学习并练习 AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
HackTricks Cloud

