有幸参加了某省首届工控安全大赛,学到了很多,发现了一些作为web
狗的底层缺陷,谈谈此次比赛的体验。
预赛
题目详情
刚开始我们前方屏幕显示如下,是一个工业控制的模拟图
可以发现,模拟了一些工业、小区居住区的地区图。PLC
,菜鸡我是这样理解的,首先web
安全和工控安全,开始前期的信息收集、渗透测试都是差不多的:外网攻击,渗透内网,提权等等。最大的不同在于工控安全还跟PLC相结合,这意味着什么?一个工业的控制系统,交由某台主机控制,包括控制所有机器的操作控制,一旦紧急情况发生,重启这台主机是不行的,因为往往会造成巨大的经济损失,甚至危害到群众的生命危险,更甚者,引发灾难(震网事件、乌克兰电厂停电事件)
比赛非预期解法
刚开始我们的电脑只连接了路由器设备,主办方没有给任何ip
提示。
尝试查看ip
,发现是169.254.xx.xx
的静态ip
抓个包玩玩,发现192.168.10.11
IPV4协议IP改为192.168.10.11
,子网掩码255.255.255.0
,发现ip
还是静态ip
(这里估计DHCP
服务器关掉了,只能靠抓包分析了)
难道思路错了?nmap
扫扫试试。
扫到两个192.168.10.11
和192.168.10.111
,那么应该是ip冲突了,后面ip手动改成192.168.10.x
,x
表示任意数字,这里取10
,改正为192.168.10.10
然后再ipconfig
,ok,成功了
成功获取ip
后,可以发现,上面nmap
扫端口时,192.168.10.11
开放的端口贼多,我们尝试了去访问80
端口,并没有发现http
服务。后面,队友提示了135
、139
、445
这些端口,我们准备用kali
的msf
“永恒之蓝”攻击,突然队友又说了句,试试3389
,然后远程登录试试,我们用户名用Administrator
,密码第一次尝试”000000
“、第二次尝试”123456
“、第三次尝试”admin
“、…… 。发现无果,准备关掉去试永恒之蓝,随意输了”admin123
“,结果弹出个登录成功的运行界面,卧槽,我和我的小伙伴都惊呆了,然后按照题目第三关的要求,直接添加了一个队伍名的账号,直接拿了一血,我滴个天啊。
其实,当我们手动改ip
成功后,通过路由表,也是可以发现C
段内的其余主机ip
比赛预期解法
其实这也不算是非预期解法,安全本就于此,任何漏洞都可能会被利用,不管漏洞利用的可能性是否高低,只要被利用,都是“好”漏洞。后面学习了下,问了下一些大佬,其实预期做法是通过mac
地址泛洪攻击开始第一关,利用交换机的mac
地址学习机制,不断的进行mac
地址刷新,迅速填满交换机的mac
地址表,以至崩溃,使交换机不得不使用广播发包,从而获取其他人的报文信息。而其中,我们需要获得的是ftp
的账号和密码,通过上诉攻击方法,尝试登陆ftp
,同时抓包会得到正确的ftp
账号和密码,登陆后,取得题目第二关所要寻找的test
文件。
决赛
题目详情
与昨日的预赛规则相比,最大的不同就是多了个内网的防火墙,以下为比赛的关卡:
- 要求获取主机
SCADA
系统的管理员的权限 - 获取
SCADA
系统的敏感信息文件 - 造成
SCADA
系统与靶机系统拒绝服务 - 修改
SCADA
系统监控状态 - 修改靶机系统逻辑
- 攻坚保卫战
一共6
个关卡,提供了一条网线。
比赛解法
比赛开始后,接入网线,抓包看看流量的流向,发现毫无踪迹,不像昨天的预赛,可以发现特殊的局域网ip
走向。
那咋办,想起昨天的比赛ip分配机制,网段即是按照队伍比赛序号分配的,于是,我们先直接nmap
扫192.168.0.0/16
,发现存在ip:192.168.2.217
,想到昨天预赛的ip冲突,保险点,我们直接手动将ip改为192.168.2.x
,x
为任意值,我们这里取的是218
,观察流量包入下,ipconfig
命令也发现ip变为192.168.2.218
当然,此时我们还不能确定网段,nmap
再扫一下,看看同网段有没有其他的ip
地址
nice!证明我们的判断是没错的,还发现了192.168.2.202
开放的端口,看到23
,想到了telnet
。虚拟机kali
尝试telnet
登陆192.168.2.202
,发现需要账号和密码。(windows10
系统默认telnet
服务没开,后面的telnet
服务都是通过虚拟机进行的)
那么再namp
下这个ip
可以看到主机名为MM-PC
,尝试弱密码登陆无果。
这里有个清况,当我们以为取ip
为192.168.2.218
,是为了不与192.168.2.217
冲突,但是正是这个决定,让我们搞不清楚网段中存在哪些机器。因为刚开始,我们没像预赛开始一样通过抓包找到属于网段中的数据流向,这就意味着存在网段中存在着防火墙。如果192.168.2.202
是SCADA
的IP
,难道192.168.2.217
是防火墙的IP?我们尝试去ping
下试试(此时ip
为192.168.2.218
),不出所料,ping
不通192.168.2.217
?(防火墙一般是禁ping的,但是为了防止意味,我们后面还是手动将ip尝试改为192.168.2.217
,按照常理,如果防火墙的ip为192.168.2.217
,那么此时会有ip
冲突,但是不可思议的事情发生了。并没有像想象中的一样会出现ip冲突,ipconfig /renew
,得到的ip
结果为192.168.2.217
,这意味着,不存在ip
冲突。再尝试了下,ping 192.168.2.217
,发现竟然ping
通了。此时我们猜想,是否是路由器分配了一个空的ip
地址给我们的主机,而这个地址就是192.168.2.217
。随后我们再次进行nmap
,卧槽,竟然多了一个192.168.2.2
这个新的ip,nmap
再扫下192.168.2.2
,发现没有开放任何服务(这里的比赛截图因为操作失误,没有成功截取)
所以这个时候,我们才真正意识到我们之前的思路错了,正确的划分,应该是,192.168.2.217
是路由器划分给我们的ip
,192.168.2.202
是SCADA
服务器的ip
,192.168.2.2
是防火墙ip
。
比赛进行到这,我们按照这个正确的想法尝试了许久,发现192.168.2.202
开放的服务只有telnet(445
,135
,139
都开着,那时候还想打一波永恒之蓝)。于是我们开始手动爆破telnet的登陆用户名和密码,经过十几分钟的尝试,用户名:MM
,密码:666666
(这里直觉就是跟初赛差不多的弱密码,没想到最后是六个六)
nice!
但是由于之前的学习原因,没有运用过telnet
协议,不知道怎么登,再加上win10
跟旧版windows
系统的操作差别,导致我们不知道该怎么利用,后面浪费了一点时间,才去开启windows sever2003
的虚拟机试水。
windows sever2003
配置ip
为192.168.2.66
,改为桥接模式。手动配置成功后,进行下述操作:
查看网络资源管理界面
命令行方式下,登陆MM-PC
登陆成功后,查看当前SCADA
服务器的ip
查看当前路由表
查看当前主机系统信息
随后我们添加了属于自己队伍名的用户net localgroup administrators haha 000000 /add
,提权操作net localgroup administrators haha /add
,至此我们成功的完成了第一关。
随后,我们按照第二关的要求,查看桌面内容,发现了密函文件,其实是个Rar压缩包文件,伪装成了txt
然而尴尬的事情发生了,虚拟机windows sever2003
不知道如何开启远程桌面,而物理机win10
,在无法外网查找资料下,不知如何开启,导致通过命令行telnet
的操作只能了解到这么多的信息。后面还查看了下C
盘目录
后面估计需要一句话写入执行开启3389
远程端口,然后通过远程操作,进行后面的关卡操作。
或者正如下图所说
太菜了,打不动,plc
层面的东西都没接触到。。。
总结
对于每一个安全问题而言,不鸣风平浪静,一鸣灰飞烟灭。此次比赛,说实话,渗透方面不算难,甚至简单,但是非常考察一名优秀的白帽子的夯实的基础能力,对协议的深刻理解、面对突发事件的应急思维和处理能力、熟悉不同操作系统命令行方式下的操作、代码执行能力等等。基础的确很重要。