参考资料
- https://github.com/blog/1938-git-client-vulnerability-announced
- http://www.secpulse.com/archives/3420.html
漏洞成因
The vulnerability concerns Git and Git-compatible clients that access Git repositories in a case-insensitive or case-normalizing filesystem. An attacker can craft a malicious Git tree that will cause Git to overwrite its own .git/config file when cloning or checking out a repository, leading to arbitrary command execution in the client machine. Git clients running on OS X (HFS+) or any version of Microsoft Windows (NTFS, FAT) are exploitable through this vulnerability. Linux clients are not affected if they run in a case-sensitive filesystem.
以上是原文,如果你E文也不好,那就参考我的理解:
windows
和osx
使用的文件系统(NTFS
、FAT
)不区分文件名的大小写,而Linux
则区分。根据这个特性可以在Linux
下创建一个大小写区别的.git
文件夹,进而覆盖.git
的配置文件,从而导致任意命令执行。
测试例子
打开http://gitcasefail.googlecode.com/svn/trunk/这个谷歌代码仓库,可以看到有一个.git
和一个.Git
目录,关键是.Git
这个目录,在里面的hooks
目录里面有个post-checkout
文件,这个就是导致命令执行的文件。
然后我们直接通过以下命令测试,如果命令执行则说明漏洞存在:
git clone http://gitcasefail.googlecode.com/svn/trunk/repo/
漏洞利用
我们进入Linux
系统,然后初始化一个git
目录,通过'ls -al'可以看到有.git
目录,然后呢,直接创建.gIt
文件夹并创建利用脚本:
mkdir .GiT cd .GiT mkdir hooks cd hooks touch post-checkout echo whoami>post-checkout然后发布代码,测试成功后即可发命令给对方进行调戏了~~