长亭百川云 - 文章详情

如何挖掘工控设备的WEB漏洞——暴力破解漏洞篇

不忘初心px1624

102

2024-07-13

01

工控设备中的暴力破解漏洞概述

此处的工控设备是泛指的所有的工控相关的设备,比如PLC、SCADA、防火墙、交换机、管理系统等等。暴力破解漏洞简称“爆破”,是WEB漏洞中比较常见的一类漏洞,利用此类漏洞可以直接进入到相应系统,甚至往往都可以拿到系统管理员权限或者webshell权限。

02

工控设备中的暴力破解漏洞案例

由于工控固件设备的特殊性,有90%以上的暴力漏洞都是存在于登陆功能,所以本文主要以此功能点的不同情况来展开叙述。下面先来看一些互联网上收集到的实际案例。

某电网电力调度控制中心(后台可爆破—存在N多弱口令) 

暴力破解出账号密码,成功进入系统,直接影响到众多工控相关系统。

国内某大型风电工控系统应用配置失误

暴力破解成功,进入系统,再通过上传漏洞,成功获取webshell权限。

03

工控设备中的暴力破解漏洞的挖掘

前面说到过,由于工控固件设备的特殊性,在工控WEB系统中的暴力破解漏洞中,有90%以上都是存在于登陆功能。所以这里主要说的是如何对此类漏洞进行挖掘和检测。

通过分析发现,在工控WEB系统中,有70%以上的登陆功能的数据包,是对密码(或者账号密码等参数)的数据进行了加密处理的,但是这种加密大都是基于前端js代码的那种hash加密。还有一部分参数引入了一个随机的token参数用于校验,当然还有的是不但有token校验,还进行了密码等参数的加密。

关于如何去抓包,以及如何去进行暴力破解,介于《网络安全威胁信息发布管理办法》的规定,此文章亦不便进行详细的描述,有兴趣的朋友请自行百度搜索。

这里只是对于工控web系统经常遇到的几种暴力破解情况,进行分析说明,以便于大家更加深刻的了解此类漏洞的危害。

第一种:没有任何加密和校验,或者有页面验证码,但是验证码可以重复使用,这种直接抓包导入字典,设置好变量参数,再进行重放操作就可以了。

第二种:对部分参数进行了加密操作,比如对密码进行了md5加密,或者其他自定义的加密。

第三种:有随机的token参数进行请求校验的情况。

这里我用下面的案例,来分析说明这类情况下,要如何去导入字典暴力破解。

以下是某工控web系统的登陆功能,抓包POST请求数据如下。

通过分析得知,这里的hfK参数是起到的token校验功能,txtUN是用户名,然后txtPD参数是对密码进行了一定自定义的加密操作。

 首先来说说如何获取token

通过观察发现,token是每次刷新页面自动生成的,会出现在页面的返回数据中。所以只需要把对应的返回数据中的字符串,作为字典放到指定的变量参数上即可,这个很多人不知道要如何操作,其实burp就自带了这个功能,具体burp设置如下。

将数据包发到Intruder选项准备爆破,然后设置好变量。

注意这里的是,如果变量不是1个的话,Attack type的方式一定要选Pitchfork 如下图:

而且对应的线程一定要选1,也就是单线程,因为这种token参数,也就是这里的hfK参数,是通过刷新一次页面随机生成进行校验的,再次刷新后,之前的参数便会失效,同时生成新的校验参数,如果不用单线程的话,会导致获取到的参数再被使用的时候已经失效了。

接着去Grep - Extract中点击Add

在源码里找到指定的token参数,你会发现上面已经自动生成了正则规则,选好后点击OK保存设置。 

然后再去对应的Payload字典处,将Payload type选项选择为如下图所示的Recursive grep设置即可。 

经过上述的操作后,关于随机token校验的这种限制,就已经可以绕过进行暴力破解了。效果如下图,会自动获取返回数据中新的token字符,再将其赋值到下一次请求的参数中进行自动校验。 

● 下面来说说,参数加密的情况怎么处理

比如这里的txtPD参数是进行了加密,我们首先去源码中搜索登陆函数login的相关代码。 

发现这里是执行了一个encMe的函数,参数是密码和用户名,然后追踪这个函数 

继续追踪 stringToHex 函数

这样就可以获取到整个加密算法的核心代码,之前这种情况,我都是用自己写的脚本,去直接把算法提取出来进行加密转换的,然后生成一份对应的加密后的字典,再把加密后字典导入进去进行暴力破解的。

可以在浏览器控制台直接写代码调用指定函数,如下图。 

也可以自己写个小程序,提取出整个加密算法,再去专门进行处理。 

当然两种方法,都是需要具备一定的代码读写能力的,所以这里再给出一种不怎么需要代码功底,的相对比较简单的方法。那就是用burp插件jsEncrypter,配合phantomjs的一种方法。

首先下载以下2个程序。

jsEncrypter.jar  这是一个burp插件

phantomjs.exe  这是一个WebKit浏览器引擎

jsEncrypter.jar 的下载地址 

https://github.com/c0ny1/jsEncrypter

下载其中最新的zip包,然后里面有3个文件。

其中jar直接以burp插件的方式去安装,方法很多可以自己百度。这里给提供个别人写的教程,可以参考。 

https://blog.csdn.net/weixin\_40412037/article/details/103648034

安装OK后,这里会多出一个插件的选项。

接着需要下载 phantomjs.exe   

https://phantomjs.org/download.html

然后将phantomjs.exe和上面zip包里的phantomjs_server.js放到一个文件夹内。

下面就是如何把网页页面的加密过程,转换成这个插件可以支持并使用。首先从源码中找到最外层的加密函数,如下:

接着通过搜索关键字,找到了相应的加密算法所在的js文件,然后直接右键将js保存下来(如下图的security.js)。

然后将这个下载的js文件放在和

phantomjs_server.js的同一个目录里。

下面我们用编辑器打开phantomjs_server.js 去编写代码,可以看到,这个加密很简单,就是将用户名和密码进行了一次encMeD的加密。

那么我们就可以像如下方式写入代码。首先调用那个下载的js文件,其次写入加密代码,这里的payload变量对应的就是对应的burp的字典,newpayload变量对应的就是执行了相关加密函数后输出的内容。

这样就可以固定用户名去破解密码,如果是固定密码破解用户名的话,把参数反过来写,是不是觉得很简单呢。

这里肯定就有人问,那能不能用户名和密码同时进行破解?当然可以,不过就需要自己写代码去处理下字典了。

比如把字典以 admin----123456 的格式导入,然后相应代码去用split函数,如下图这样处理下就可以了。这里注意因为加密函数的第一个参数是密码,所以需要把payload[1]写在前面。

总之,payload这个对应的就是burp程序,暴力破解时候所用的字典,在遇到其他实际的情况时候,有代码基础的话可以自定义修改。

这种方法的好处就是不用去层层追踪加密过程,只需要保存对应的加密js文件,然后直接调用最外层的加密函数就可以了。

这里算法写好了,下面就要用到 phantomjs.exe 程序了,首先打开cmd,然后cd到phantomjs.exe所在文件夹目录。执行如下指令即可。

这时候再去burp的插件选项位置,点击Connect,可以看绿色的True,然后点击test可以直接测试加密。

这是这个插件的一个功能,可以直接导入字典进行批量加密,另一个功能就是可以直接在暴力破解的时候,在对应变量的设置中选择。

选择设置成功后保存,如下图。

设置好之后再去爆破,这样就可以直接爆破那种含有加密参数,或者token校验的数据请求了。我这里直接演示的是一个同时进行了token参数校验,以及密码参数加密的情况,可以看到,这个方法也是完全可以绕过限制去成功暴力破解的。

如上图,根据length可以判断爆破出的正确账号密码,如果觉得这样看着不太直观,也可以自行给数据包再添加一个变量,将未加密的字典也同步导入一下用于标记即可。

04

总  结

虽然工控设备一般情况都是网络和物理隔离,但是也不能忽视工控设备中的WEB安全问题,如果被恶意利用,危害也是比较大的。

该漏洞的主要的风险点

获取某些工控WEB系统的管理权限,比如某些SCADA系统、工控路由器交换机管理系统,以及某些自开发的工控WEB管理系统。在获取到某些WEB系统、WEBSHELL权限后,一步步深入攻击,从而获取到其他同服务器、同IP网段的系统及设备的权限,甚至最终获取到上位机、工控生产系统的权限等。

该漏洞的防御修补措施

a 如果用验证码校验,一定要保证验证码是不能重复使用的。

b 对于密码错误的次数做限制,对请求的频率做判断。

c 重要系统进行多重校验,比如检测到登陆请求,是在非常用设备、ip环境的时候,需要进行二次校验操作。

备注:部分案例及截图来自于互联网,如有侵权,请联系告知。

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2