
Scans WordPress Forminator for CVE-2026-15748 unauthenticated RCE. Detects vulnerable sites, crawls forms, extracts nonces, runs safe upload tests. WordPress Forminator에서 CVE-2026-15748 인증되지 않은 RCE를 스캔합니다. 취약한 사이트를 탐지하고, 양식을 크롤링하며, nonce를 추출하고, 안전한 업로드 테스트를 실행합니다.
WordPress 설치 환경에서 Forminator 플러그인을 사용하는지 식별하고 버전 관련 노출도를 평가하기 위한 Python 기반 보안 연구 및 취약점 평가 스캐너입니다.
교육 및 승인된 테스트 전용
본인이 소유하거나 평가에 대한 명시적 허가를 받은 시스템에 대해서만 이 프로젝트를 실행하십시오.
CVE-2026-15748은 WordPress용 Forminator 플러그인과 관련된 취약점입니다.
이 프로젝트는 보안 연구 및 승인된 테스트를 위한 스캐너를 제공합니다. 일련의 수동적 및 애플리케이션 수준 검사를 수행하여 WordPress를 식별하고, Forminator를 찾아내며, 가능한 경우 설치된 버전을 확인하고, 관련 페이지와 폼을 검사한 뒤, 그 결과로 도출된 평가를 보고합니다.
이 스캐너는 보안 연구자들이 승인된 WordPress 환경의 노출도를 이해할 수 있도록 돕기 위한 것이며, 스캐너 결과를 악용 가능성에 대한 절대적인 증거로 간주해서는 안 됩니다.
스캐너는 다음과 같은 일반적인 워크플로를 따릅니다:
Target
|
v
Normalize URL
|
v
Detect WordPress
|
+---- not detected ----> NOT WORDPRESS
|
v
Crawl relevant pages
|
v
Detect Forminator
|
v
Detect Forminator version
|
v
Compare version
|
v
Inspect forms
|
v
Generate result
| 기능 | 설명 |
|---|---|
| WordPress 탐지 | 대상이 WordPress를 사용하는 것으로 보이는지 탐지합니다. |
| Forminator 탐지 | Forminator 플러그인의 징후를 검색합니다. |
| 버전 탐지 | 사용 가능한 소스에서 설치된 Forminator 버전을 식별하려고 시도합니다. |
| 버전 확인 | 탐지된 버전을 구성된 VULN_MAX 값과 비교합니다. |
| 웹사이트 크롤링 | 추가 검사를 위해 관련 페이지와 내부 링크를 수집합니다. |
| 사이트맵 탐지 | 일반적인 WordPress 사이트맵 위치를 확인합니다. |
| 폼 탐지 | 관련 Forminator 폼과 폼 요소를 찾습니다. |
| Nonce 탐지 | 탐지된 폼 데이터에서 Forminator nonce를 식별하려고 시도합니다. |
| 멀티스레딩 | 여러 대상을 동시에 처리하는 것을 지원합니다. |
| 재시도 처리 | 구성된 한도에 따라 실패한 요청을 재시도합니다. |
| 요청 지연 | 요청 사이에 구성 가능한 무작위 지연을 추가합니다. |
| 상세 결과 | 수집된 평가 결과를 상세 결과 파일에 기록합니다. |
requestspackagingurllib3필요한 패키지를 설치하세요:
pip install requests packaging urllib3
또는:
python -m pip install requests packaging urllib3
저장소를 복제합니다:
git clone https://github.com/yora1928/cve-2026-15748.git
프로젝트 디렉터리로 이동합니다:
cd cve-2026-15748
종속성을 설치합니다:
pip install requests packaging urllib3
Python 설치를 확인합니다:
python --version
스캐너 구성은 소스 코드에 직접 정의됩니다:
TIMEOUT = 15
THREADS = 8
VULN_MAX = "1.56.1"
MAX_RETRIES = 3
DELAY_MIN = 1.0
DELAY_MAX = 2.5
CRAWL_DEPTH = 2
| 변수 | 기본값 | 설명 |
|---|---|---|
TIMEOUT | 15 | HTTP 요청 타임아웃. |
THREADS | 8 | 스캔에 사용되는 워커 스레드 수. |
VULN_MAX | 1.56.1 | 스캐너의 버전 평가에서 영향을 받는 것으로 간주되는 최대 버전. |
MAX_RETRIES | 3 | 실패한 요청에 대한 최대 재시도 횟수. |
DELAY_MIN | 1.0 | 최소 요청 지연. |
DELAY_MAX | 2.5 | 최대 요청 지연. |
CRAWL_DEPTH | 2 | 최대 크롤링 깊이. |
위 값은 스캐너의 현재 소스 코드 구성을 나타냅니다.
스캐너는 단일 대상 URL 또는 여러 대상 URL이 포함된 텍스트 파일을 허용합니다.
python cve-2026-15748.py -u https://target.com
-u와 --url은 하나의 대상 URL을 지정합니다.
단일 승인된 환경에 대한 평가를 수행할 때 이 모드를 사용하십시오.
targets.txt와 같은 파일을 생성하십시오:
https://target1.example
https://target2.example
https://target3.example
그런 다음 실행합니다:
python cve-2026-15748.py -f targets.txt
-f와 --file은 대상 목록을 지정합니다.
비어 있지 않은 각 줄은 대상으로 처리됩니다.
기본 구성은 8개의 스레드를 사용합니다.
예를 들어:
python cve-2026-15748.py -f targets.txt -t 10
또는:
python cve-2026-15748.py -f targets.txt -t 5
-t는 스캐너가 사용하는 워커 스레드 수를 변경합니다.
스캐너는 선택적인 --upload 모드도 제공합니다:
python cve-2026-15748.py -u https://lab.example.com --upload
여러 승인된 대상의 경우:
python cve-2026-15748.py -f authorized-targets.txt -t 5 --upload
이 모드는 관련 조건이 충족될 때 Forminator 엔드포인트에 대해 POST/업로드 요청을 수행할 수 있습니다.
이 테스트가 명시적으로 승인된 시스템에서만 --upload를 사용하십시오.
| 명령 | 목적 |
|---|---|
-u, --url | 단일 대상 URL을 스캔합니다. |
-f, --file | 파일에서 여러 대상을 읽습니다. |
-t | 스캔 스레드 수를 설정합니다. |
--upload | 승인된 대상에 대해 업로드 테스트 모드를 활성화합니다. |
단일 대상:
python cve-2026-15748.py -u https://target.com
여러 대상:
python cve-2026-15748.py -f targets.txt
사용자 지정 동시성을 사용한 다중 대상:
python cve-2026-15748.py -f targets.txt -t 10
Authorized lab 업로드 테스트:
python cve-2026-15748.py -u https://lab.example.com --upload
스캐너는 평가 중 여러 단계를 수행합니다.
요청이 이루어지기 전에 대상 URL이 정규화되어, 이후 검사에서 일관된 URL 형식을 사용하도록 합니다.
스캐너는 다음을 포함한 일반적인 WordPress 지표와 엔드포인트를 확인합니다:
/wp-login.php
/wp-json
/xmlrpc.php
/wp-content
또한 다음과 같은 지표를 응답에서 검색합니다:
wp-content
wp-includes
WordPress를 식별할 수 없는 경우, 스캐너는 다음을 보고합니다:
[NOT WORDPRESS]
스캐너는 일반적인 경로, 사이트맵 위치, 대상에서 발견된 내부 링크를 바탕으로 페이지 목록을 작성합니다.
검사하는 경로의 예시는 다음과 같습니다:
/contact
/kontak
/hubungi-kami
/form
/forms
/formulir
/upload
/unggah
/submit
/kirim
/gallery
/kontribusi
/daftar
/pendaftaran
/registration
/register
/file-upload
/submit-document
/unggah-berkas
/upload-file
일반적인 사이트맵 위치는 다음과 같습니다:
/sitemap.xml
/sitemap_index.xml
/wp-sitemap.xml
크롤러는 CRAWL_DEPTH에 의해 제한됩니다.
스캐너는 다음과 같은 Forminator 식별자를 검색합니다:
forminator-form-<ID>
감지된 폼의 경우 다음과 같은 관련 요소를 확인합니다:
type="file"
및:
<select>
또한 다음을 얻으려고 시도합니다:
form_id
nonce
HTML 폼에서 가져옵니다.
스캐너는 대상이 노출한 정보를 바탕으로 Forminator 버전을 판별하려고 시도합니다.
한 가지 소스는 다음과 유사한 자산 경로입니다:
/wp-content/plugins/forminator/...
버전 매개변수를 사용하는 경우:
?ver=X.X.X
스캐너에는 다음을 검색하는 폴백 기능도 있습니다:
Stable tag:
HTML 또는 readme.txt에서.
보고된 탐지 방법에는 다음이 포함될 수 있습니다:
html-source
또는:
readme.txt
구성된 평가 경계는 다음과 같습니다:
1.56.1
탐지된 버전은 VULN_MAX와 비교됩니다.
가능한 평가 상태는 다음과 같습니다:
VULNERABLE
PATCHED
Forminator가 감지되었지만 버전을 확인할 수 없는 경우, 스캐너는 다음을 보고할 수 있습니다:
INSTALLED (unknown version)
스캐너 분류는 대상이 악용 가능하다는 절대적인 증거가 아니라 평가 결과로 취급해야 합니다.
주요 출력은 다음과 같은 일반적인 구조를 따릅니다:
[STATUS] URL VERSION (METHOD) [PAGES] [FORM STATUS] [VULNERABILITY STATUS] [UPLOAD STATUS]
예시:
[FOUND] https://target.com v1.56.0 (html-source) [25 pages] [HAS UPLOAD FORM] [VULNERABLE]
업로드 양식이 감지되지 않을 때:
[FOUND] https://target.com v1.56.0 (html-source) [25 pages] [VULNERABLE]
FOUNDForminator가 탐지되었으며 관련 정보가 성공적으로 수집되었습니다.
NOT FOUNDForminator를 탐지할 수 없습니다.
예시:
[NOT FOUND] https://target.com [17 pages]
NOT WORDPRESS대상이 WordPress 설치로 감지되지 않았습니다.
예시:
[NOT WORDPRESS] https://target.com
INSTALLED (unknown version)Forminator가 설치된 것으로 보이지만, 스캐너가 버전을 확인할 수 없었습니다.
VULNERABLE탐지된 버전이 구성된 경계값 이하입니다:
1.56.1
PATCHED탐지된 버전이 구성된 경계보다 높습니다:
1.56.1
대상을 스캔한 후, 도구는 다음과 유사한 요약을 표시합니다:
========== SUMMARY ==========
VULNERABLE : 10
PATCHED : 5
UNKNOWN VERSION : 3
NOT FOUND : 20
NOT WORDPRESS : 2
TOTAL SCANNED : 40
[+] HAVE UPLOAD FORM: 2
값은 현재 스캔 중 수집된 결과를 나타냅니다.
스캔이 완료되면 도구는 다음을 생성합니다:
scan_results_detailed.txt
결과 파일은 다음과 같은 섹션으로 구성됩니다:
=== VULNERABLE (with upload form) ===
=== VULNERABLE (no upload form) ===
=== UNKNOWN VERSION (assume vulnerable) ===
예시:
=== VULNERABLE (with upload form) ===
https://target.example - v1.56.0 (html-source) - form_data: ...
=== VULNERABLE (no upload form) ===
https://target.example - v1.55.0 (html-source)
=== UNKNOWN VERSION (assume vulnerable) ===
https://target.example
스캔 결과에 대상 정보나 기타 민감한 데이터가 포함되어 있는 경우, 스캔 결과를 공개 저장소에 커밋하지 마십시오.
cve-2026-15748/
|
├── cve-2026-15748.py
├── README.md
├── targets.txt
└── scan_results_detailed.txt
| 파일 | 용도 |
|---|---|
cve-2026-15748.py | 메인 스캐너 구현. |
README.md | 프로젝트 문서. |
targets.txt | 처리할 대상 목록. |
scan_results_detailed.txt | 자동 생성된 스캔 결과. |
소스 코드는 여러 기능 영역으로 구성되어 있습니다: