本文首发于我的个人博客。
这是我在实验室学习渗透测试的第六个漏洞复现,耗费时间有些长,至今不知道哪里出了问题,又是怎样稀里糊涂没有的(也可能很早就成功了,但是我没有注意到,一直纠结于网页打不开的问题)。不管怎么说,最后还是做出来了,以此文记录。
漏洞介绍
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
最后,再心疼一下我可怜的内存...等我有钱了一定要换!!!