由于电网设施保护非常严格,整个网络拓扑也异常复杂,说实话前两天一直在梳理整个体系架构(后来发现完全没必要)。整整4天,找到两个栈溢出,但都没法利用,只好按DOS交了。据我了解,从外网进入内部网络的可能性几乎没有,实际漏挖也是需要线下网线接入交换机。

说实话我也不知道这种内网漏洞的意义是什么,感觉像是审潜在代码BUG

接入设备

首先就是接入交换机然后ssh上服务器,不过接入的时候是不能开启wifi,不能连接其他网络,不然监管系统会一直报警👮👮👮

ssh上去之后的第一件事就是看看内网的所有机器以及对应IP,以此确定从哪台机子的服务入手进行漏挖。

1
cat /etc/hosts #查看不同设备及对应IP

之后就是查看该设备有哪些服务是开启的

1
2
3
4
5
6
netstat -tulnp #查看所有的TCP/UDP进程
# -t 为TCP -u为UDP

#下面两个指令都是用来寻找程序路径
ps - ef #查看进程
whereis/which <name>

找到对应可能存在漏洞的程序后,就可以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
2
tcpdump -i any -n tcp port 9999 -w /tmp/123.cap #抓取TCP包
tcpdump -i any -n udp port 9999 -w /tmp/123.cap #抓取UDP包

用上述命令保存抓到的包后,scp到本机用wireshark分析即可

漏洞利用

在挖洞的时候我注意到,几乎所有的设备都是采用国产的linux某系统。不太清楚是该系统一直未更新的缘故还是gcc未更新的缘故,设备上所有的服务都没有canaryPIE防护。这在很大程度上降低了漏洞利用的难度,使得基于二进制漏洞的RCE更容易实现。

image-20230710154558220