winsyk · 2014/12/31 18:49
0x00 背景
本文是为了揭示那些被忽视的开发安全问题,主要针对基础设施部署环境基础解决方案包括(内部、外部、云环境)。
0x01 攻击面
github
版本控制工具:
持续集成工具:
aws config files:
客户端配置工具:
elasticsearch:
内存数据库:
版本控制工具:
github信息泄漏:
github支持较为较为强大的搜索语法,通过这些搜索语法,通过github可以搜索到一些常规方法无法搜索的内容,如搜索内部项目、密码,ssh私钥等。 Conviso Research and Development Team编写了个较为详细的github语法搜索文章,可以通过http://blog.conviso.com.br/2013/06/github-hacking-for-fun-and-sensitive.html 查阅。 如搜索mysqldump 备份的sql文件,可使用extension:mysqldump sql来搜索。
另外还可以通过github来查找代码安全问题,如输入规则:extension:php mysql_query $_GET,可以搜索到大量包含mysql_query $_GET的请求,可以有针对性的进行代码审计。
git 娱乐:
github 是否能让我们冒充其他用户呢?让我们试下成为linus,通过邮件组收集下大神的邮箱信息。
通过github 可以搜索到linus的commit记录。
结果linus大神的commit记录出现在了我们的repo源。
该问题后的总结,审计谁可以访问到你的repos,启用github双因素认证。
git配置不当:
如果.git文件夹可以被外网,攻击者可以通过.git下载所有的代码,当前前提是目录可被遍历,如果能遍历可以简单的获取到源代码。
接着执行。
通过在google中输入查询语句,*".git" intitle:"Index of”,可以找到几条记录。
通过Google找到了一台配置错误的机器,看我们可以访问到.git目录
上边这些代码,都可以被我们下载到。如果目录没有开放遍历,可以检测.git/config
使用dvcs-pillage or dvs-ripper 下载源代码,dvcs-pillage 也支持HG和GZR文件格式。 .git 泄漏你可以获取哪些东西呢,包括配置文件,源代码,开发者姓名、公钥、邮箱地址等,repo记录,漏洞漏洞删除的修复记录、密码、私钥等信息,wordpress配置文件,站点数据库备份在.git,会话密钥等。
svn配置不当:
在svn1.6之前的版本,通过访问.entries,可以下载到svn里的代码,比如案例: WooYun: 乐视某分站源码泄漏
在metasploit里有利用程序,对应的利用模块是:
auxiliary/scanner/http/svn_scanner。
在svn1.7之后的版本,通过访问.svn/wc.db,对应的metasploit模块也是有利用程序的,对应的modules是:
auxiliary/scanner/http/svn_wcdb_scanner。
gitlist:
通过google 搜索关键字,powered by gitlist,可以看到可以搜索到的记录数为: 897,000 条结果。
在gitlist 4.0及之前版本存在远程代码执行漏洞,漏洞CVE版本号为CVE-2014-4511,该漏洞利用方式为:””whoami
,通过执行该命令可以导致gitlist出现知名错误。
在2014年6月29号的时候, 该文章对这个远程代码执行漏洞进行了详细讲解并且给出了漏洞利用代码。
博客地址:http://hatriot.github.io/blog/2014/06/29/gitlist-rce/ 通过该利用程序可以将php木马写入到gitlist目录中,从而获取权限服务器
利用代码:
利用方式:
持续集成工具:
hudson是jenkins的前身,是基于Java开发的一种持续集成工具,用于监控程序重复的工作,Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成可能。
通过Google Hacking方法,讲hundon输入到shodan中进行搜索,可以发现大量使用hundon的服务器如,hundson搜索结果。
jenkins搜索结果。
在Jenkins如果缺少认证,可以访问/view/ALL/newJob来新建一个build然后执行恶意代码如下图:
另外也可以使用metasploit来进行渗透测试。
通过metasploit来进行利用,可以获取目标服务器权限。
参考:https://www.pentestgeek.com/2014/06/13/hacking-jenkins-servers-with-no-password/ 把邪恶的东西放在/vagrant/.git/hooks/post-commit并等待用户提交一些代码,从用户挂载/vagrant目录开始,钩子就一直在运行,即使用户销毁了VM。
kickstart files:
在kickstart中有3种办法重置用户密码,1、安装过程中 2、在kickstart文件加密的哈希" rootpw --iscrypted" 3、在kickstart文件明文" rootpw --plaintext"
举个例子
aws config files:
AWS 命令行界面 (CLI) 是用于管理 AWS 服务的统一工具。只通过一个工具进行下载和配置,您可以使用命令行控制多个 AWS 服务并利用脚本来自动执行这些服务。
aws使用aws商店以明文存储hiddle申请,这是典型的特权访问。
客户端配置工具:
Chef是由Ruby与Erlang写成的配置管理软件,它以一种纯Ruby的领域专用语言(DSL)保存系统配置“食谱(recipes)”或“做饭书(cookbooks)”。
Chef由Opscode公司开发,并在Apache协议版本2.0下开源发布。Chef可在主从式架构之下运行,亦可在名为“chef-solo”的集成配置之下运行。
通过shodanhq来搜索下“chef server" 可以找到较多运行该服务的服务器。
通过查看chef上可以看到登录的帐号密码,即可完成登录,可以看到较多敏感信息!所以一定要记得修改默认密码。
knife 是一个chef命令行实用工具,可以加密及存储数据包凭证,使用方法例如:
chef/knife 加密数据包:
Vagrant:
你知道如何修改你的ssh keys吗?Vagrant有默认证书,并且sudo不需要密码,可以使用metasploit来扫描默认key,如图:
elasticsearch:
elasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
elasticsearch 本身没有访问控制,任何通过http api搜索es中存储的结果,可以用put请求来update存储结果。elasticsearch早与1.2.0版本中存在远程代码执行漏洞,cve版本号为:CVE-2014-3120
elasticsearch启动默认端口为9200,可以看到集群版本信息如图:
使用metasploit溢出存在漏洞的集群,成功获取权限。
内存数据库:
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)
redis没有加密方式,监听6379 tcp端口,默认redis如果没有指向监听内网地址,而对外开放,外网攻击者可以直接访问该数据库。
通过shodan来搜索redis:6379 关键字,可以获取大量redis信息:
随机找一条,可以正常登录,redis-cli 可以指向需要连接的redis ip地址。
memcache:
memcache 是一种分布式缓存服务器,和通常使用的非分布式的ecache不同,memcache需要独立的服务器支撑,客户端通过配置IP地址和端口号(默认11211)与之连接并使用API进行数据的缓存操作。
memcached未作IP限制导致缓存数据可被攻击者控制,可被攻击者控制,通过连接上后可获取敏感信息,如图:
0x03 结语
通过这些案例,让我们知道,其实安全问题不止来源于web问题,安全问题更来自于运维安全,运维和运维安全的好弱是衡量一个公司安全的基础!