
Joomla JCE의 profile-import 업로드를 통해 CVE-2026-48907을 익스플로잇하고, 셸 경로를 검증하며, 권한이 부여된 대상에서 대화형 명령 채널을 여는 Python CLI.
E.L.V — Exploit Loader & Vulnerability Firmware
승인된 취약점 평가를 위한 사이버보안 연구 유틸리티.
E.L.V CVE 연구 및 평가 프레임워크는 통제된 보안 연구 및 승인된 취약점 평가를 위해 설계된 Python 기반 명령줄 유틸리티입니다.
제공된 구현에는 다음과 같은 기능이 포함되어 있습니다:
현재 소스는 연구 대상을 다음과 같이 식별합니다:
CVE-2026-48907 Joomla! JCE Extension < 2.9.99.5 Unauthenticated RCE
해당 CVE/제품 주장은 소스 코드에서 제공된 메타데이터이며 이 README에서 독립적으로 검증되지 않았습니다. 보안 주장을 게시하기 전에 식별자, 영향을 받는 버전, 권고, 영향을 받는 구성 요소 및 해결 정보를 신뢰할 수 있는 벤더/CVE 출처와 대조하여 검증하십시오.
이 프로젝트는 원격 웹 애플리케이션과 상호 작용하며, 제공된 구현에는 사용자 지정 서버 측 페이로드를 업로드하고 업로드된 셸과 통신하기 위한 기능이 포함되어 있습니다.
명시적 승인을 받은 시스템에만 사용하십시오.
다음 목적으로 이 프로젝트를 사용하지 마십시오:
안전한 실험실 환경을 위해서는 격리된 로컬 VM/컨테이너 환경 또는 의도적으로 취약하게 구성된 훈련 대상을 사용하십시오.
| 필드 | 값 |
|---|---|
| 프로젝트 | E.L.V CVE 연구 및 평가 프레임워크 |
| 작성자 / 엔진 | HxN / E.L.V |
| 버전 | 1.0.0 |
| 언어 | Python |
| 플랫폼 | *nix / Unix 계열 시스템 |
| 라이선스 | GNU GPL v3 |
| 인터페이스 | 명령줄 |
| HTTP 클라이언트 | requests |
| 동시성 | ThreadPoolExecutor |
| 주요 목적 | 승인된 보안 연구 및 평가 |
제공된 elv-cve.py 소스에는 다음과 같은 주요 구성 요소가 포함되어 있습니다.
스크립트는 --shell 옵션을 통해 제공된 로컬 파일을 읽습니다.
소스는 이를 사용자 지정 셸/업로더 파일로 설명하며, 지정된 파일을 읽을 수 없으면 종료합니다.
프로그램은 상호 배타적인 두 가지 대상 모드를 지원합니다:
각 대상에 대해 스크립트는 대상 루트에 GET 요청을 수행하고 계속 진행하기 전에 HTTP 200 응답을 기대합니다.
구현은 정규식을 사용하여 반환된 HTML에서 CSRF 관련 값을 검색합니다.
현재 두 가지 패턴이 구현되어 있습니다.
스크립트는 다음에 대해 멀티파트 업로드 요청을 구성합니다:```text /index.php?option=com_jce
요청에는 profile-import 작업과 추출된 토큰이 포함됩니다.
### 6. 후보 경로 검증
업로드 요청 후, 프로그램은 결과 파일에 대해 여러 가능한 위치를 확인합니다.
현재 소스에는 다음과 같은 후보 경로가 포함되어 있습니다:```text
/tmp/
/images/
/images/stories/
/media/
단일 대상의 경우, 현재 프로그램은 성공적으로 업로드된 셸 경로를 보고할 때 대화형 명령 인터페이스를 호출합니다.
소스는 다음 이름의 POST 매개변수를 사용하여 명령을 전송합니다:```text cmd c
이 기능은 원격 명령 실행을 초래할 수 있으므로, 격리된 명시적 승인 환경으로 제한해야 합니다.
### 8. 다중 대상 처리
대상 파일이 제공되면, 프로그램은 `ThreadPoolExecutor`를 사용하여 대상을 동시에 처리합니다.
소스의 기본 스레드 수는 다음과 같습니다:```text
10
높은 수준에서, 현재 구현은 다음 흐름을 따릅니다:```text Start │ ├── Parse command-line arguments │ ├── Load local payload file │ ├── Load one target OR target list │ ├── Create ELV_CVE output directory │ ├── Target processing │ │ │ ├── GET target │ ├── Check HTTP response │ ├── Extract token │ ├── Submit profile-import request │ ├── Check candidate file paths │ └── Record result │ └── Write results / display summary
---
## 요구 사항
제공된 소스는 다음을 가져옵니다:
- Python 표준 라이브러리 모듈:
- `random`
- `re`
- `time`
- `argparse`
- `sys`
- `os`
- `json`
- `threading`
- `concurrent.futures`
- 서드파티 모듈:
- `requests`
- `urllib3`
따라서 최소한의 의존성 설치는 다음과 같습니다:```bash
python3 -m pip install requests urllib3
재현 가능한 배포를 위해서는 requirements.txt 파일에 의존성을 고정하세요.
예시:```text requests urllib3
---
## 설치
프로젝트를 격리된 평가 환경에 복제하거나 복사하세요.
예시:```bash
git clone <YOUR-REPOSITORY-URL>
cd <YOUR-REPOSITORY-DIRECTORY>
가상 환경을 생성합니다:```bash python3 -m venv .venv
활성화하세요:```bash
source .venv/bin/activate
종속성 설치:```bash python3 -m pip install -r requirements.txt
Python 확인:```bash
python3 --version
의존성을 확인합니다:```bash python3 -c "import requests, urllib3; print('Dependencies OK')"
> `<YOUR-REPOSITORY-URL>` 및 `<YOUR-REPOSITORY-DIRECTORY>`를 저장소에서 사용하는 값으로 바꾸세요.
---
## 명령줄 인터페이스
소스는 다음과 같은 명령줄 옵션을 정의합니다.
### 대상 선택```text
-u, --url
단일 대상 URL.```text -f, --file
대상 URL이 포함된 파일의 경로입니다.
이 옵션들은 상호 배타적이며 그중 하나는 필수입니다.
### 페이로드 선택```text
--shell
로컬 사용자 정의 페이로드 파일의 경로입니다.
이 인수는 현재 구현에서 필수입니다.
-t, --threads
작업자 스레드 수.
기본값:```text
10
-v, --verbose
인수 파서가 노출하는 verbose 플래그를 활성화합니다.
참고: 현재 소스는 이 옵션을 정의하지만 `args.verbose`를 사용하여 출력 동작을 실질적으로 변경하지는 않습니다.
### 출력 옵션```text
-o, --output
인수는 파서에 의해 정의되지만, 현재 구현에서는 최종 결과를 작성할 때 args.output을 사용하지 않습니다. 현재 결과 경로는 다음과 같이 하드코딩되어 있습니다:```text
ELV_CVE/success.txt
This is an implementation detail worth fixing in a future release.
---
## Input Files
### Target list
The target-list mode expects one URL per line.
Blank lines are ignored.
Lines beginning with `#` are ignored.
Conceptual format:```text
https://authorized-target-01.example
https://authorized-target-02.example
# laboratory target
https://authorized-target-03.example
명시적으로 평가 권한을 부여받은 대상만 파일에 넣어야 합니다.
--shell 인수는 프로그램이 텍스트로 읽는 로컬 파일을 가리킵니다.
제공된 소스는 파일을 성공적으로 읽는 것 외에는 파일 내용을 검증하지 않습니다.
안전한 개발과 테스트를 위해서는 명령을 실행하는 페이로드 대신 무해한 테스트 픽스처를 사용하십시오.
프로그램은 다음을 생성합니다:```text ELV_CVE/
다중 대상 모드의 경우, 다음과 같이 기록합니다:```text
ELV_CVE/success.txt
현재 소스는 성공한 셸 URL을 이 파일에 기록합니다.
예시 결과 형식:```text https://authorized-lab.example/path/to/result
프로그램은 또한 로드된 대상 수에 대한 성공적인 결과의 수를 포함하는 완료 요약을 출력합니다.
---
## 동시성
다중 대상 모드는 다음을 사용합니다:```python
ThreadPoolExecutor
설정된 스레드 수는 기본값이 10입니다.
동시성이 높아지면 다음과 같은 문제가 증가할 수 있습니다:
통제된 평가에서는 낮은 동시성 값으로 시작하고, 환경과 권한이 허용할 때만 값을 높이십시오.
제공된 구현은 HTTP 통신을 위해 requests.Session()을 사용합니다.
주요 네트워크 작업은 다음과 같습니다:
소스는 명시적인 요청 타임아웃을 사용합니다:
이 값들은 현재 소스에 하드코딩되어 있습니다.
구현은 다음을 설정합니다:```python s.verify = False
`InsecureRequestWarning`을 억제합니다.
이는 인증서 검증이 비활성화되었음을 의미합니다.
자체 서명 인증서를 사용하는 일회성 랩 환경에서는 유용할 수 있지만, **일반적인 프로덕션 보안 도구에서는 권장되지 않습니다**.
더 안전한 구현은 인증서 검증을 구성 가능하게 만들고 기본적으로 검증을 활성화된 상태로 유지해야 합니다.
---
## 로깅 및 결과
소스는 워커 스레드 간의 출력 충돌을 줄이기 위해 `safe_print()` 주위에 스레드 잠금을 사용합니다.
일반적인 상태 범주는 다음과 같습니다:```text
failed
success
결과 객체는 다음과 같은 필드도 포함할 수 있습니다:```text url status reason shell_url
멀티 타깃 수집기는 추가로 다음을 확인합니다:```text
uploaded_hidden
다만, 제공된 exploit() 구현은 현재 해당 상태를 반환하지 않습니다.
이는 향후 버전에서 결과 모델을 정리할 수 있는 영역을 나타냅니다.
현재 구현은 여러 실패 사례를 처리합니다:
실패한 HTTP 요청은 예외 메시지와 함께 실패한 대상으로 기록됩니다.
초기 GET이 HTTP 200을 반환하지 않으면 해당 대상에 대한 처리가 중단됩니다.
예상된 토큰을 추출할 수 없으면 대상은 실패한 취약점 검사로 보고됩니다.
업로드 요청 중 예외가 포착되고 스크립트는 다음 확장자/경로 시도로 계속 진행됩니다.
로컬 페이로드 파일이 존재하지 않으면 프로그램은 오류와 함께 종료됩니다.
대화형 채널은 KeyboardInterrupt를 처리하고 세션을 종료합니다.
제공된 소스의 주요 함수는 다음과 같습니다:
safe_print(msg)스레드 안전 콘솔 출력 도우미.
read_custom_shell(filepath)디코딩 오류를 무시하고 로컬 페이로드 파일을 UTF-8 텍스트로 읽습니다.