作者 | 绿盟科技格物实验室 陈杰

前言

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

漏洞挖掘

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

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

这部分的逻辑主要是NodeJS编写的,可以通过传统的web漏洞挖掘思路去分析存在的安全问题,例如XSS,CSRF,敏感信息泄露,越权等。

分析其和服务端通信的数据包,可以发现还有一部分操作逻辑走的是websocket协议,数据会直接传到一个用c/c++编写的程序中处理,于是想到分析该软件数据处理存在的问题。不出意外,IDA分析后很快定位了一个基于栈的缓冲区溢出问题。漏洞出在0x1功能码中,会将json中的value的值直接拷贝到栈上,导致缓冲区溢出:

漏洞利用

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

对于这类栈溢出漏洞,传统的方法是把shellcode部署在栈上,然后通过跳板指令jmp esp跳转到shellcode达到代码执行的目的。值得注意的是,由于payload是通过json进行传入的,所以shellcode和跳板指令(jmp esp)的地址字节值不能大于0x7e,否则会被js进行转码(实在找不到合适的jmp esp指令可以寻找合适的ROP替代)。使用一个弹出对话框的payload进行测试,shellcode使用编码器进行编码来保证payload能够正常传到二进制程序中处理:

msfvenom -a x86 --platform windows -p  windows/messagebox TEXT="hello world"  -e x86/alpha_mixed   -b '\x5c\x22\x27\x08\x0c\x09\x0d\x0a\x00'  BufferRegister=esp

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

整理exp如下:

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

总结

由于现在的上位机SCADA软件的基础组件还是主要由C/C++进行开发,所以不可避免还是存在一些内存破坏类漏洞。这类漏洞轻则造成拒绝服务,重则造成远程代码执行。尤其是关键工业生产行业中,就算无法成功利用也可以导致拒绝服务,会造成重大损失。用户需要有安全意识,及时更新工控软件安全补丁,工控厂商也要培养开发者的安全开发能力,并对提交漏洞快速进行响应,提出修复和缓解措施。转载请注明来自:关键基础设施安全应急响应中心

c++ 界面交互影响处理代码执行速度_原创 | 某SCADA的远程代码执行漏洞挖掘与利用...相关推荐

  1. idea2020shezhi代码检查级别_结合 CPU 理解一行 Java 代码是怎么执行的

    根据冯·诺依曼思想,计算机采用二进制作为数制基础,必须包含:运算器.控制器.存储设备,以及输入输出设备,如下图所示. 我们先来分析 CPU 的工作原理,现代 CPU 芯片中大都集成了,控制单元,运算单 ...

  2. python代码执行过程记录_[原创]IDAPython+OdbgScript动态获取程序执行流程

    题记: 最近知道了有一种方法,可以获取到程序的执行流程,具体做法是先获取程序中每一个函数的地址,在这些地址上设置断点,然后让程序运行起来,hook调试器,断点中断时,不要停下来继续执行,并记录命中的断 ...

  3. 代码打字速度_使用VueJS创建打字速度效果

    代码打字速度 VueJS is commonly being adopted as a Javascript framework, and many developers are trying it ...

  4. rmi远程代码执行漏洞_微软 Windows DNS Server 远程代码执行漏洞

    安全预警 漏洞:微软 Windows DNS Server 远程代码执行漏洞漏洞编号:CVE-2020-1350威胁程度:高影响范围: Windows Server 2008 for 32-bit S ...

  5. angular发布代码有缓存_如何在Angular应用程序中执行请求?

    全文共5358字,预计学习时长16分钟 来源:Pexels 本文将讨论如何在Angular应用程序中执行请求. 1. 使用拦截器来装饰请求 2. HttpClient 与HttpBackend的对比 ...

  6. python如何执行代码漏洞_织梦dedecms最新远程代码执行利用脚本(python)

    织梦CMS漏洞,就好比女人的大姨妈,每个月不来上一次,这就算是内分泌失调.代码是用python写的,小伙伴们自行调试吧!在前段时间,织梦爆出了一个远程文件包含漏洞.呃,感谢hoseph同学提供的代码吧 ...

  7. python代码编写工具_编写更好的Python代码的终极指南

    python代码编写工具 Despite its 尽管它 downsides, Python remains the king of today's programming world. Its ve ...

  8. java代码规范插件_「Java基础知识」代码规范插件怎么用

    原标题:「Java基础知识」代码规范插件怎么用 在开发中,好的编程风格可以提升团队合作能力,提升开发的效率,但是每个人都有自己的编程习惯,如何能够将大家的编程风格统一,这个在团队中也很重要; 在Jav ...

  9. python交互式方式、代码文件方式_涨见识了,在终端执行 Python 代码的 6 种方式

    原作:BRETT CANNON 译者:豌豆花下猫@Python猫 英文:https://snarky.ca/the-many-ways-to-pass-code-to-python-from-the- ...

最新文章

  1. Docker的安装、镜像源更换与简单应用
  2. PHP的学习--PHP的引用
  3. Python中的反射机制(reflect)
  4. android 文件名 标题,有什么方法可以让Android的默认浏览器识别Content-Disposition:attachment下载中的非ASCII文件名?...
  5. 企业网络推广下微软服务器浸泡于液体试图提高服务器的散热与性能
  6. 在Python中用Selenium执行JavaScript
  7. 使用 Java 配置进行 Spring bean 管理--转
  8. KVM 虚拟化环境安装
  9. 蓝桥杯2018初赛-哪天返回-模拟
  10. js页面自适应屏幕大小_移动端自适应布局方法的calc()与vw
  11. 【LeetCode】剑指 Offer 66. 构建乘积数组
  12. 系统学习深度学习(四十一)--AlphaGo Zero强化学习原理
  13. Oracle的去重函数 distinct
  14. 用户体验五要素_用户体验五要素—结构性思考
  15. sockaddr_in结构体、socklen_t类型、bzero函数简要记录
  16. ERP的模块流程/组织架构和其他基础知识
  17. 异步社区本周(3.26-4.1)半价电子书
  18. 计算机键盘怎样做除法,电脑键盘除法是哪个键?
  19. 全球第一个完整的Angular 2.0系列视频教程,大漠穷秋
  20. 怎么一键拼图多张照片?快来码住这些拼图方法

热门文章

  1. Li‘s 影像组学视频学习笔记(10)-T检验+lasso+随机森林、Li‘s have a solution and plan.
  2. oc引导win方法_[OC更新]机械革命10代标压稳定版更新
  3. tf.keras.activations.relu 激活函数 示例
  4. linux Address already in use 端口被占用解决办法
  5. 七、处理机调度概念、层次
  6. 批量修改文件夹下图片名称(Python)
  7. 运动会加油稿计算机学院150字,大学运动会加油稿150字左右
  8. linux如何添加默认路由表_Linux-如何添加路由表
  9. tomcat9配置https-pfx
  10. 【RocketMQ工作原理】消息的存储