由于电网设施保护非常严格,整个网络拓扑也异常复杂,说实话前两天一直在梳理整个体系架构(后来发现完全没必要)。整整4天,找到两个栈溢出,但都没法利用,只好按DOS交了。据我了解,从外网进入内部网络的可能性几乎没有,实际漏挖也是需要线下网线接入交换机。
说实话我也不知道这种内网漏洞的意义是什么,感觉像是审潜在代码BUG
接入设备
首先就是接入交换机然后ssh上服务器,不过接入的时候是不能开启wifi,不能连接其他网络,不然监管系统会一直报警👮👮👮
ssh上去之后的第一件事就是看看内网的所有机器以及对应IP,以此确定从哪台机子的服务入手进行漏挖。
1 | cat /etc/hosts #查看不同设备及对应IP |
之后就是查看该设备有哪些服务是开启的
1 | netstat -tulnp #查看所有的TCP/UDP进程 |
找到对应可能存在漏洞的程序后,就可以scp
拷贝到本机,然后IDA逆向分析了
1 | scp name@127.0.0.1:<remote path> <local path> |
逆向分析
虽然新系统从安全角度考虑不会将源码交给我们。但我目前接触到的系统似乎未对程序进行任何混淆、加壳或者阻碍反汇编的行为,甚至变量的符号表都是存在的。逆向起来非常舒适,跟直接审源码区别也不大。
由于这些服务大多都是标准的C/S结构,那么分析的关键入口点就是找到recv
, recvfrom
, read
这样的接收数据的函数。当然他们的接收函数往往都是自行封装后的,直接搜索函数不一定会有结果。
找到接收函数之后,就是分析报文结构了。由于这些程序的通信都有一套符合自身标准的报文格式,熟悉对应的格式,可以更快速的理解后续的报文处理part。
基本所有的报文结构都可以用header + body概况,关键便是理解header中各个字段的含义。这里的报文分析可以从两个角度进行处理:
- 由于已经连入内网,可以直接用tcpdump抓取报文配合wireshark进行分析
- 可以直接使用IDA PRO从处理流程的角度逆向分析
上述两者相互配合效果会好很多
1 | tcpdump -i any -n tcp port 9999 -w /tmp/123.cap #抓取TCP包 |
用上述命令保存抓到的包后,scp到本机用wireshark分析即可
漏洞利用
在挖洞的时候我注意到,几乎所有的设备都是采用国产的linux某系统。不太清楚是该系统一直未更新的缘故还是gcc未更新的缘故,设备上所有的服务都没有canary和PIE防护。这在很大程度上降低了漏洞利用的难度,使得基于二进制漏洞的RCE更容易实现。