二进制漏洞利用与挖掘_[原创]某SCADA的远程代码执行漏洞挖掘与利用

本文介绍了对国产SCADA软件的漏洞挖掘过程,通过分析其Web接口和WebSocket通信,发现了一个栈缓冲区溢出问题。在详细阐述漏洞成因后,讨论了如何利用该漏洞,包括绕过缓解措施、构造payload和寻找跳板指令。最后强调了此类漏洞在工控领域的潜在风险。
摘要由CSDN通过智能技术生成

前言

近年来网络安全形势日渐严峻,国内外都开始对工控安全越来越重视,而工控领域由于常年来对安全的忽视,导致暴露出数量惊人的严重安全漏洞,更为严重的是,相当一部分厂商即使在漏洞披露出来后也没有能力去修复。本文从实战出发,通过一个国产的SCADA软件作为例子,来介绍对工控软件的漏洞挖掘方法,希望通过这篇文章能够让越来越多的安全研究员重视工控领域的安全。

漏洞挖掘

先简单画一个界面,快速组态一个工程并且运行后,可以发现该软件提供web接口去访问该操作界面。

29884c5ed7db2ab1e5ef8775d44494b3.png

局域网访问是默认开启的:

bf8d4343771c0972e5a329f9ddd2d41b.png

这部分的逻辑主要是NodeJS编写的,这种情况下,可以通过传统的web漏洞挖掘思路去分析存在的安全问题,例如XSS,CSRF,敏感信息泄露,越权等。(通过这个思路在这个软件挖到了相当多的漏洞)

dafe4f37e1b7fc88d579b7be227ebd66.png

分析其和服务端通信的数据包,可以发现还有一部分操作逻辑走的websocket协议,而这部分最后数据会直接传到一个用c/c++编写的程序中处理,于是想到分析该软件数据处理存在的问题。

5881157d8c237cb350f53211844d22dc.png

不出意外,IDA分析后的几分钟之内直接定位了一个基于栈的缓冲区溢出问题。漏洞出在0x1功能码中,会将json中的value的值直接拷贝到栈上,导致缓冲区溢出:

ecc0800db2cc1864aa2de990c99367db.png

漏洞利用

通过上面的分析可以知道,该漏洞是非常经典的栈缓冲区溢出漏洞。在利用这个漏洞之前,先要分析该二进制程序开启的缓解措施,幸运的是,该二进制文件都关闭所有的漏洞缓解措施了,这就非常方便我们对漏洞进行利用。

780098c3da93e403eb5b6c935d106d26.png

对于这类栈溢出漏洞,传统的方法是把shellcode部署在栈上,然后通过跳板指令jmp esp跳转到shellcode达到代码执行的目的。值得注意的是,由于payload是通过json进行传入的,所以shellcode和跳板指令(jmp esp)的地址不能大于0x7e,否则js那边会进行转码(实在找不到合适的jmp esp指令可以寻找合适的ROP替代)。

在这里,我们使用一个弹出对话框的payload进行测试,shellcode使用编码器进行编码来保证payload能够正常传到二进制程序中处理:

在内存中搜索特征码,寻找符合条件的跳版指令:

cf9b7f904f8cc884deb70c0c6f2bb9a0.png

整理exp如下:

82e8135df35aec232df96bbd579c1566.png

攻击效果为弹出一个"hello world"弹框:

9265ada1f1f2ac378f64468d9f096bf6.png

总结

整个流程看下来,从漏洞发现和漏洞利用并没有多少技术含量,但是这类漏洞在工控领域软件层出不穷。这类漏洞轻则造成拒绝服务,重则造成远程代码执行。尤其是关键工业生产行业中,就算无法成功利用导致拒绝服务,也会造成重大损失。

PS:

之前在看雪发了很多怎么去发现工控软件漏洞的文章(国内估计也没多少人共享这类技术),但发现没有人多少关注,所以这次初步尝试把漏洞发现和漏洞利用放在一起说,但是工控领域是非常敏感的行业,有些东西能说,有些东西不能说,所以不可能面面俱到,也希望大家理解。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值