Github作为渗透测试中较为常用的打开突破口的点,由员工安全意识不足导致的敏感信息泄露,例如运维人员上传的脚本中有个人Mail邮箱账号密码,登陆后可以导出通信录继续暴力爆破,然后导出邮件内容搜索VPN等关键字获取一些关键信息。
Github的搜索可以自由组合一些关键字,例如:

"test.com" "smtp"
"test.com" "mail"
"test.com" "mysql"
"test.com" "jdbc"
"test.com" "svn"
"test.com" "pop"
"test.com" "ftp"

"test.com" "user"
"test.com" "username"
"test.com" "账号"

"test.com" "password"
"test.com" "passwd"
"test.com" "pwd"
"test.com" "pass"
"test.com" "密码"

"test.com" "内部"

推荐的一套GitHub泄露监控系统,地址:

https://github.com/0xbug/Hawkeye

克隆项目到本地

git clone https://github.com/0xbug/Hawkeye.git --depth 1

安装依赖 (修改/usr/local/bin/python3 为你系统的Python 3 路径)

cd Hawkeye
pip install virtualenv
virtualenv --python=/usr/local/bin/python3 venv
source venv/bin/activate
pip install -r deploy/requirements.txt

配置文件

cp config.ini.example config.ini
vim config.ini

github 帐户配置

[GitHub]
USERNAME = 帐号
PASSWORD = 密码

MongoDB 认证配置

yum install mongodb
/usr/local/mongodb/bin/mongod -dbpath=/usr/local/mongodb/data -logpath=/usr/local/mongodb/logs
> use Hawkeye
switched to db Hawkeye
> db.addUser("git","hehe123")
{
	"user" : "git",
	"readOnly" : false,
	"pwd" : "2cb2f4cc98430db51a2335446fa84930",
	"_id" : ObjectId("59accc87fff25e9f045afc45")
}

[MongoDB]
HOST = localhost
PORT = 27017
ACCOUNT = git
PASSWORD = hehe123

告警配置(ENABLE:是否开启告警功能)

[Notice]
ENABLE = 1
MAIL_SERVER = 邮件服务器
MAIL_PORT = smtp端口
FROM = 发件人
PASSWORD = 密码

python Hawkeye.py
然后访问 http://0.0.0.0:5000/ 进行关键词、告警、黑名单、定时任务配置

 

0x01 SNMP介绍


简单网络管理协议(SNMP:Simple Network Management Protocol)是一套网络管理协议,利用SNMP可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。

SNMP版本到目前为止有3个版本,分别是v1、v2、v3。

在SNMP中,我们都应该知道著名的MIB了。MIB给出了一个网络中所有可能的被管理对象的集合的数据结构。SNMP的管理信息库采用和域名系统DNS相似的树型结构,基于对象标识树的,对象标识是一个整数序列,中间以”.”分割。

MIB被划分为若干个组,如system、interfaces、at、ip组等。

这里要提一下MIB中的对象{1.3.6.1.4.1},即enterprises(企业),其所属结点数已超过3000。例如IBM为11.3.6.1.4.1.2},Cisco为{1.3.6.1.4.1.9},Novell为{1.3.6.1.4.1.23}等。世界上任何一个公司、学校只要用电子邮件发往iana-mib@isi.edu进行申请即可获得一个结点名。这样各厂家就可以定义自己的产品的被管理对象名,使它能用SNMP进行管理。

 

0x02 漏洞检测


Nmap插件扫描

[root@server144 ~]# nmap -sU -p 161 --script=snmp-brute 192.168.192.120

Starting Nmap 5.51 ( http://nmap.org ) at 2017-09-08 11:45 CST

Nmap scan report for localhost (192.168.192.120)

Host is up (0.00083s latency).

PORT    STATE SERVICE

161/udp open  snmp

|_snmp-brute: public

MAC Address: 52:54:00:26:BE:A2 (QEMU Virtual NIC)

 

0x03 漏洞利用


Yum安装snmp

yum install -y net-snmp net-snmp-utils

启动snmp服务

service snmpd start

配置文件/etc/snmp/snmpd.conf

#       sec.name  source          community

com2sec notConfigUser  default       public



####

# Second, map the security name into a group name:



#       groupName      securityModel securityName

group   notConfigGroup v1           notConfigUser

group   notConfigGroup v2c           notConfigUser



####

# Third, create a view for us to let the group have rights to:



# Make at least  snmpwalk -v 1 localhost -c public system fast again.

#       name           incl/excl     subtree         mask(optional)

view    systemview    included   .1.3.6.1.2.1.1

view    systemview    included   .1.3.6.1.2.1.25.1.1

可以看到默认的团体名为public

另外可以看到默认可以查看的两个OID是

.1.3.6.1.2.1.1

.1.3.6.1.2.1.25.1.1

其中.1.3.6.1.2.1.1是系统参数

我们使用snmpwalk测试:

snmpwalk  -c SNMP读密码 -v 1或2(代表SNMP版本) IP OID(对象标示符)

这里我们看到.1.3.6.1.2.1.1.1.0是获取系统基本信息,测试一下:

[root@vincent ~]# snmpwalk -v 2c -c public 172.16.100.134 .1.3.6.1.2.1.1.1.0

SNMPv2-MIB::sysDescr.0 = STRING: Linux vincent 2.6.32-642.1.1.el6.x86_64 #1 SMP Tue May 31 21:57:07 UTC 2016 x86_64

也可以不用OID直接用SysDesc获取

[root@vincent ~]# snmpwalk -v 2c -c public 172.16.100.134 SysDesc

SNMPv2-MIB::sysDescr.0 = STRING: Linux vincent 2.6.32-642.1.1.el6.x86_64 #1 SMP Tue May 31 21:57:07 UTC 2016 x86_64

可以看到获取的内容与uname -a的内容一致

但是比如我获取进程.1.3.6.1.2.1.25.4.2.1.2

[root@vincent ~]# snmpwalk -v 2c -c public 172.16.100.134 .1.3.6.1.2.1.25.4.2.1.2

HOST-RESOURCES-MIB::hrSWRunName = No more variables left in this MIB View (It is past the end of the MIB tree)

发现没有办法获取到

因为我们上面提到的默认安装的snmpd允许的两个OID中不包含该OID

我们修改一下配置添加一条

view    systemview    included   .1

然后重启snmpd服务,就可以获取到了

[root@vincent ~]# snmpwalk -v 2c -c public 172.16.100.134 .1.3.6.1.2.1.25.4.2.1.2

HOST-RESOURCES-MIB::hrSWRunName.1 = STRING: "init"

HOST-RESOURCES-MIB::hrSWRunName.2 = STRING: "kthreadd"

HOST-RESOURCES-MIB::hrSWRunName.3 = STRING: "migration/0"

其他常用OID:

[root@vincent ~]# snmpwalk -v 2c -c public 172.16.100.134 ipRouteEntry //路由信息

RFC1213-MIB::ipRouteDest.0.0.0.0 = IpAddress: 0.0.0.0

RFC1213-MIB::ipRouteDest.10.10.10.0 = IpAddress: 10.10.10.0

RFC1213-MIB::ipRouteDest.172.16.100.0 = IpAddress: 172.16.100.0

[root@vincent ~]# snmpwalk -v 2c -c public 172.16.100.134 .1.3.6.1.2.1.4.20  //网卡信息

IP-MIB::ipAdEntAddr.10.10.10.2 = IpAddress: 10.10.10.2

IP-MIB::ipAdEntAddr.127.0.0.1 = IpAddress: 127.0.0.1

IP-MIB::ipAdEntAddr.172.16.100.134 = IpAddress: 172.16.100.134

Windows下使用MIB Browser获取系统信息。

 

0x04 修复建议


[root@server120 ~]# vim /etc/snmp/snmpd.conf

#       sec.name  source          community

com2sec notConfigUser  default       public#修改这里

[root@server120 ~]# service snmpd restart

 

.svn泄露

在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息。但一些网站管理员在发布代码时,不愿意使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使.svn隐藏文件夹被暴露于外网环境,黑客可以借助其中包含的用于版本信息追踪的‘entries’文件,逐步摸清站点结构。更严重的问题在于,SVN产生的.svn目录下还包含了以.svn-base结尾的源代码文件副本(低版本SVN具体路径为text-base目录,高版本SVN为pristine目录),如果服务器没有对此类后缀做解析,黑客则可以直接获得文件源代码。

 

svn<=1.6

从svn的结构图可以看到一个目录text-base,这里有我们源文件的备份,比如要下载somedomain/phpinfo.php,直接访问目录somedomain/.svn/text-base/phpinfo.php.text-base,一般的服务器既不会阻止该目录也不会解释该后缀,我们就可以直接读到本地来。现在只是访问最顶层的文件信息,那怎么遍历呢?这里面就有.svn/entries,这个文件包含着该基础目录下所有的文件和目录,直接递推查找就行。

svn>1.6

svn在1.6之后引入了wc.db来管理文件,该文件位于.svn/wc.db。普通文件位置:somedomain/.svn/pristine/”XX”/”CHECKSUM”.svn-base,CHECKSUM是文件的sha1值,xx则是他的前两位。那这个CHECKSUM去哪找呢?就是我们刚才提到的wc.db,这是一个sqlite数据库。数据库的大体结构如下:

$ sqlite3 wc.db .tables

ACTUAL_NODE NODES PRISTINE WC_LOCK

EXTERNALS NODES_BASE REPOSITORY WORK_QUEUE

LOCK NODES_CURRENT WCROOT

$ sqlite3 wc.db 'select local_relpath, checksum from NODES'

index.php|$sha1$4e6a225331f9ae872db25a8f85ae7be05cea6d51

scripts/menu.js|$sha1$fabeb3ba6a96cf0cbcad1308abdbe0c2427eeebf

style/style.js|$sha1$2cc5590e0ba024c3db77a13896da09b39ea74799

$ sqlite3 wc.db 'select local_relpath, ".svn/pristine/" || substr(checksum,7,2) || "/" || substr(checksum,7) || ".svn-base" as alpha from NODES;'

index.php|.svn/pristine/4e/4e6a225331f9ae872db25a8f85ae7be05cea6d51.svn-base

scripts/menu.js|.svn/pristine/fa/fabeb3ba6a96cf0cbcad1308abdbe0c2427eeebf.svn-base

style/style.js|.svn/pristine/2s/2cc5590e0ba024c3db77a13896da09b39ea74799.svn-base

下载wc.db,然后从NODES表中找到文件名和其sha1值,最后构造下载链接。

 

利用工具:

Seay-Svn源代码泄露漏洞利用工具.exe

 

.git信息泄露

下载.git/index文件,这是一种git特有的格式,在该文件中包含着文件名和文件SHA1值。

根据该文件SHA1值到objects目录下载相应文件,具体路径somedomain/.git/objects/”XX”/”CHECKSUM”

zlib解压文件,按照原始目录写入源代码。

 

利用工具:

https://github.com/lijiejie/GitHack

http://wutongyu.info/perl/rip-git.pl

 

.DS_Store

.DS_Store是Mac下Finder用来保存如何展示 文件/文件夹 的数据文件,每个文件夹下对应一个。

如果开发/设计人员将.DS_Store上传部署到线上环境,可能造成文件目录结构泄漏,特别是备份文件、源代码文件。

 

利用工具:

https://github.com/lijiejie/ds_store_exp