去年秋天,实验渗透我在一台旧笔记本上装了个叫「灰洞」的实验渗透渗透测试框架。不是实验渗透为了攻击谁,纯粹想看看自己搭的实验渗透防御体系到底有多脆。那天下午三点十七分,实验渗透我拿到了内网第一台靶机的实验渗透shell——过程比想象中简单,简单到让人后背发凉。实验渗透
「灰洞」的实验渗透扫描模块先跑了一遍C段。它不急着发SYN包,实验渗透而是实验渗透先做反向DNS解析,把那些有PTR记录的实验渗透主机挑出来。这招挺贼的实验渗透,因为运维习惯给核心设备配域名,实验渗透边缘设备往往只有IP。实验渗透结果出来,实验渗透192.168.12.0/24里只有三台机器有完整域名,其中一台叫「oa-backup」。名字暴露了用途,也暴露了优先级。
我盯着屏幕喝了口凉掉的咖啡。端口扫描只开了80和443,常规得让人犯困。但「灰洞」的指纹识别模块在响应包里嗅到了Tomcat 7.0.81——版本号精确到小数点后两位。这个版本有个已知的PUT漏洞,CVE-2017-12615,利用条件苛刻,需要目标开启readonly=false。我随手试了下,返回201 Created。文件传上去了,JSP马儿静悄悄地躺在webapps/ROOT目录里。
接下来是权限维持。我用了两个方法,一个藏在Tomcat的conf目录下改了个Listener,另一个在crontab里加了条每十分钟回连的Python脚本。前者隐蔽但重启失效,后者粗暴但稳定。搞渗透的人都有这种矛盾心态:既想留个优雅的后门,又怕优雅的东西自己看不懂。
横向移动没费什么劲。那台oa-backup的机器上存着运维组的SSH私钥,没设密码。我顺着私钥里的注释找到了跳板机,又从跳板机的history文件里翻出了数据库的临时密码。整个过程像在别人家里翻抽屉,抽屉没锁,钥匙还插在锁孔上。
真正让我停下来的是一台老旧的Windows Server 2003。它跑着某个内部OA的附件预览服务,用的是Flash。对,就是那个2020年就该死透了的Flash。我盯着那个ActiveX控件看了很久,最后没打。不是打不下来,是觉得打下来也没意思——这台机器像一座废墟,你进去只能捡到锈掉的铁皮。
晚上八点,我关掉「灰洞」,在笔记本上写了几行字:内网渗透的难点从来不是技术,是耐心。你得等,等一个配置疏漏,等一个没改的默认口令,等运维周五下午急着下班时随手关掉的防火墙规则。防御方总在假设攻击者会用什么高级0day,但现实是,大多数缺口都敞在明面上,只是没人愿意承认自家院子篱笆破了个洞。
第二天我把报告发给了运维组。他们回了个「收到」,然后问我能不能帮忙写个自动巡检脚本。我说行,但得加钱。其实不加钱我也会写,只是觉得得让他们记住这次教训——渗透测试不是演习,是有人真的走进来了,还顺手把你家钥匙配了一把。
后来那台Tomcat服务器被重装了,crontab里的Python脚本也清掉了。但我知道,只要还有「oa-backup」这种命名习惯,只要还有人把私钥放在家目录不设密码,下一个拿着「灰洞」的人,照样能进来。区别只在于,他会不会像我一样,在最后那台Windows 2003面前停手。