CODESYS V3远程堆溢出漏洞复现


这是我在实验室学习渗透测试的第六个漏洞复现,耗费时间有些长,至今不知道哪里出了问题,又是怎样稀里糊涂没有的(也可能很早就成功了,但是我没有注意到,一直纠结于网页打不开的问题)。不管怎么说,最后还是做出来了,以此文记录。

漏洞介绍

2020年3月25日CODESYS发布CODESYS V3未经身份验证的远程堆溢出漏洞,攻击者利用精心设计的请求可能会导致基于堆的缓冲区溢出。该漏洞存在于CmpWebServerHandlerV3.dll(文件版本3.5.15.20)库中,源于该dll库未能正确验证由用户提交的发往Web Server URL端点的数据。此漏洞会造成Web 服务器崩溃、拒绝服务或者可能被用于远程代码执行。

漏洞原理可参考本文

实验环境

靶机:Windows 10 x64

攻击机:Kali Linux

实验过程

1. 安装CODESYS V3.5

安装地址:https://store.codesys.com/ftp_download/3S/CODESYS/300000/3.5.15.20/CODESYS%203.5.15.20.exe。因为有墙,会很慢,自己尝试特殊方式吧,注意,一定要安装32位的。该漏洞在3.5.15.40版本之前都存在。

2. 环境配置

新建一个工程,名字为test。

进入“此电脑–>管理–>服务和应用程序–>服务”,启动图中的服务。

双击左侧栏中的Device配置网关。在主界面的“扫描网络”一栏中点击右侧的计算机名后,回车,系统将自动扫描并激活节点。

右键左侧的Application,在“添加对象”一栏中找到“视图管理器”,激活WsuSymbols,然后打开。

打开后,可以对各参数进行配置。

继续进行视图添加(名字默认即可)。

点击右下角的“可视化工具箱”,可以在此处选择各种图标、组件,进行各种参数的配置。这里随便选一个即可。

在主菜单栏中选择“编译–>重新编译”,对所有的代码进行编译,没有报错即可。然后找到上面中间位置的“Application [Device: PLC逻辑]”,点击右侧相邻的按键(或者直接快捷键Alt+F8)。下载。然后到了这个界面。

点击“启动”(快捷键F5)。运行成功后,就可以看到组态的界面了。

打开命令行,输入netstat -ano,可以看到TCP Port 8080端口已经成功开启(为漏洞利用对应的业务端口)。

环境配置至此已结束,下面已经可以开始漏洞复现了。

3. 漏洞复现

开启攻击机(最开始我想在本机win10上试一下,但是一直打不开网页,后来换了kali才可以),打开192.168.227.133:8080/webvisu.htm(即靶机IP:8080/webvisu.htm),在我这里无法正常访问,但不影响后续过程。

然后,下载POC代码,放在合适的位置。

在运行代码前,先回到Windows端重启CODESYS服务,使CmpWebServerHandlerV3组件处于状态“0”,然后再运行POC脚本。格式为:

python PocName.py 靶机IP 端口号(默认为8080)

运行后,返回200,然后会报错,这是正常现象。若出现一堆A,说明攻击失败,需要查看前序步骤有无错误。

回到靶机查看服务,尽管“状态”一列显示为“正在运行”,但右键后发现服务已经关闭,说明攻击成功。服务在重启后可以正常访问。

参考文章

[1] https://mp.weixin.qq.com/s/B3t7S3rud3ngkCWaygXt5w

[2] https://www.freebuf.com/company-information/234023.html

最后,再心疼一下我可怜的内存…等我有钱了一定要换!!!


文章作者: 恰醋
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 恰醋 !
评论
  目录