信捷电气股份有限公司(XINJE)是一家专注于工业自动化产品研发与应用的国内知名企业,该公司拥有可编程控制器(PLC)、人机界面(HMI)、工业信息化、伺服控制系统、变频步进等核心产品,在北京奥运会、上海工博会等国家重点工程项目上都有信捷产品的正式应用。
信捷PLC编程软件是一款功能强大的PLC编程软件,能够帮助用户使用各种编程模式进行PLC的编程管理工作,提高工作效率,让编程更加方便快捷。
Part1漏洞状态
Part2漏洞描述
信捷PLC编程软件V3.5.1存在DLL劫持漏洞,该漏洞源于DLL搜索顺序劫持,结合信捷PLC编程软件zipslip漏洞,本地攻击者可以通过打开项目文件方式将恶意DLL文件写入信捷PLC编程软件所在目录,其结果可导致攻击者执行任意命令。
Part3漏洞复现
1.实验环境
实验主机:win软件版本:信捷PLC编程软件V3.5.12.涉及工具Python2.7VC++6.0Processmonitor3.漏洞复现1)第一步通过Processmonitor寻找可以劫持的dll文件,打开PLC项目文件后,点击打开Processmonitor并设置几个过滤条件,分别是进程名、路径以及结果,如下图所示:
然后点击“添加TCP/IP设备设置”,发现有两个dll文件被加载,如下如所示:
其中,加载rasadhlp.dll在程序所在目录没找到后,在C:\Windows\System32目录下面查找,如下图所示:
且与注册表对比,rasadhlp.dll不是受保护的dll文件,说明rasadhlp.dll可以被劫持,如下图所示:
2)生成源码CPP文件和dll文件。
首先要配置Python2.7环境,安装好后,pip下载所需要的包pefile,并借助DLL_Hijacker.py获取rasadhlp.dll的导出函数,生成源码cpp文件在命令行中执行如下命令:pythonDLL_Hijacker.pyC:\Windows\System32\rasadhlp.dll在该目录下,rasadhlp.cpp文件也已经生成,如下图所示:
然后使用VC++6.0将rasadhlp.cpp编译为rasadhlp.dll。首先在VC++6.0中新建一个Win32Dynamic-LinkLibrary工程,如下图所示:
然后将rasadhlp.cpp中的代码复制到该工程SourceFile文件夹下的rasadhlp.cpp文件中。
更改程序,将代码中劫持成功后为弹窗改为弹出计算器,如上图所示。通过点击“组建--组建rasadhlp.cpp”,编译,编译无误后,点击“组建--组建rasadhlp.dll”,正确完成后,可以在工程目录下的Debug文件夹下找到生成的dll文件。
3)结合信捷PLC编程软件zipslip漏洞,将该dll文件压缩成恶意项目文件,根据如下脚本可以生成一个名为“poc.zip”文件,阅读脚本可知,一旦在有漏洞的环境加载“poc.zip”后,“rasadhlp.dll”文件会被解压到程序所在目录下。
将生成的“poc.zip”重命名为“poc.xdp”。
4)使用信捷PLC编程软件打开“poc.xdp”项目文件,此时发现恶意dll已被成功解压至程序所在目录,如下图所示:
之后关闭程序,再次打开程序,之后点击选项下的“添加TCP/IP设备设置”,进行添加,此时会弹出计算器,劫持成功,说明此时加载的是C:\Users\admin\Desktop\