
CVE-2018-18925 的漏洞利用程序:Gogs 中通过会话处理中的目录遍历实现远程代码执行,可绕过会话并获取管理员访问权限,进而通过 git hooks 实现 RCE。
利用 CVE-2018-18925 对 Git 自托管工具 Gogs 进行远程代码执行。
Gogs 基于 Macaron 框架。其用于管理会话的系统与 PHP 非常相似。Cookie 中的会话标识符映射到文件系统上的一个文件。当 Web 服务器收到带有会话标识符(作为 Cookie)的请求时,它会在文件系统上查找该文件。
该漏洞是在检索文件系统上用于会话的文件时存在简单的目录遍历。例如,您可以将 i_like_gogits Cookie 设置为 ../../../../../../etc/passwd,从服务器获取错误信息。

为了利用会话绕过,我们需要一种方法来上传一个特制的文件,然后我们将此文件用作我们的会话 ID。我们可以使用 https://github.com/RyouYoo/CVE-2018-18925/blob/main/main.go 创建我们自己的特制会话 ID 文件。
go run main.go
在本地复制仓库时,Gogs 会将文件放入 /data/gogs/data/tmp/local-repo/[REPO_ID]/[FILENAME](仅当您使用“上传文件”功能时才会创建此仓库)。

其中 [FILENAME] 是您上传文件的名称,[REPO_ID] 是仓库标识符,可以通过 Fork 链接找到:

其中 5 是仓库 ID。
默认情况下,会话存储在 /data/gogs/data/sessions/ 中。因此,您可以将会话 ID 使用以下相对路径:../tmp/local-repo/[REPO_ID]/[FILENAME]。在您的 i_like_gogits Cookie 中使用此路径,您应该会以 administrator 身份登录。

为了获得 RCE,您可以使用给定仓库中的 Git 钩子功能来运行 shell 脚本。

在 pre-receive 中注入您的代码:

然后发起一个推送请求(通过 git 或使用创建文件功能)来执行该钩子。