Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
php2shell-exposurehunt — PHP2Shell 노출 헌팅 및 관련 분석을 위한 리포지토리 | Kitploit
도구/GitHubGitHub/deathbydata/php2shell-exposurehunt
Defensive ToolsVulnerability AnalysisConfiguration AuditingInformation GatheringThreat IntelligenceIncident ResponseLog Analysis
GitHubdeathbydata/php2shell-exposurehunt

php2shell-exposurehunt

PHP2Shell 노출 헌팅 및 관련 분석을 위한 리포지토리

저장소 보기
114시간 40분 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

php2shell-exposurehunt

PHP2Shell(CVE-2026-109618 / CVE-2026-109619)에 대한 Defender XDR 노출 헌팅.

v3.3 · 2026년 10월 22일

목적: PHP2Shell에 노출될 수 있는 PHP를 실행 중인 온보딩된 디바이스를 찾습니다.

범위: Defender XDR 고급 헌팅 · 온보딩된 Windows 및 Linux 엔드포인트 · 기본 30일 조회 기간 · 활성 PHP만 해당. 포함되지 않는 항목: 휴면 상태의 설치 및 관리되지 않는 디바이스. 설치된 소프트웨어(TVM) 테이블은 Defender XDR에서만 쿼리할 수 있으므로 Sentinel에서는 실행할 수 없습니다.

헌트 (OS별로 순서대로 실행)

헌트WindowsLinux질문
1windows/01-any-php.kqllinux/01-any-php.kqlPHP가 있는가? 디바이스별 예/아니오.
2windows/02-evidence-breakout.kqllinux/02-evidence-breakout.kql버전과 함께 증거 분류.
3windows/03-safety-net.kqllinux/03-safety-net.kql안전망: 웹 포트에서 서비스 중인 디바이스, 수신 대기 프로세스, PHP 상태.

헌팅 대상

모든 이벤트 검사는 각 헌트 상단의 let Lookback = 30d;라는 하나의 조회 기간을 사용합니다. IP 주소는 지난 7일 동안 어댑터별 최신 보고서에서 가져옵니다. 설치된 소프트웨어는 현재 TVM 스냅샷입니다. 온보딩된 엔드포인트만 검사합니다(OnboardingStatus == "Onboarded", DeviceCategory == "Endpoint").

PHP 탐지 블록 (헌트 1, 2, 3)

다음 중 하나라도 일치하면 해당 디바이스는 PHP가 확인됨으로 간주됩니다.

이름 매칭 방식:

  • 파일 이름은 고정 목록이 아닌 정규식으로 매칭됩니다. 각 정규식은 대소문자를 구분하지 않으며 앵커(^…$)가 적용되므로, 파일 이름 전체와 일치해야 하며 일부만 일치해서는 안 됩니다.
  • 먼저 저비용 이름 접두사 필터가 실행됩니다: startswith "php", 그리고 두 OS 모두에서 frankenphp, Linux에서는 lsphp. 그런 다음 남은 항목에 대해서만 정규식이 실행됩니다.
  • 아래 표의 이름은 각 패턴이 매칭하는 대상과 거부하는 대상의 예시입니다. 다른 버전 번호(예: 미래의 php9.dll)는 자동으로 매칭됩니다.
  • patterns.test.js는 각 정규식을 이러한 예시에 대해 실행합니다. 정규식을 변경하면 그곳의 예시도 업데이트하세요.

Windows

검사테이블매칭중요한 이유
PHP 실행 파일 시작됨DeviceProcessEvents정규식 ^(php(-cgi|-win)?|frankenphp)\.exe$, 정확히 네 개의 이름만 허용: php.exe(CLI), php-cgi.exe(FastCGI 워커), php-win.exe(CLI, 콘솔 없음), frankenphp.exe(웹 서버에 내장된 PHP). phpstorm64.exe 및 기타 php* 도구는 매칭되지 않음PHP가 실행되었음을 증명합니다. 헌트 2는 바이너리의 버전 정보(ProcessVersionInfoProductVersion)에서 버전을 보여줍니다
PHP 엔진 DLL 로드됨DeviceImageLoadEvents정규식 ^php\d*(ts|isapi|apache[\w_]*)?\.dll$: php, 임의의 버전 번호, 선택적 ts / isapi / apache… 접미사, 그다음 .dll. 예시는 아래 DLL 표에 있습니다. 확장 DLL(php_curl.dll 및 기타 php_*.dll)은 php 바로 뒤에 밑줄이 허용되지 않으므로 매칭되지 않습니다IIS 또는 Apache와 같이 php*.exe가 시작되지 않는 다른 프로세스 내부에서 실행 중인 PHP를 볼 수 있는 유일한 방법입니다. 헌트 2는 DLL과 이를 로드한 프로세스를 보여줍니다
설치된 소프트웨어DeviceTvmSoftwareInventory정규식 아님: SoftwareName has "php"(이름에서 php가 단어 전체로 존재) 또는 SoftwareVendor =~ "php"(정확히 일치, 대소문자 구분 없음)등록된 설치를 포착합니다. Zip 설치(일반적인 Windows 방식)는 보통 등록되지 않습니다

Windows 패턴이 매칭하는 PHP 엔진 DLL 예시

DLL무엇인지일반적인 호스트 프로세스 (hunt 2에 표시됨)
php8.dll, php7.dll엔진, 비스레드 안전 빌드php-cgi.exe (IIS, nginx 또는 Apache mod_fcgid 아래의 FastCGI), php.exe
php8ts.dll, php7ts.dll, php5ts.dll엔진, 스레드 안전 빌드httpd.exe (Apache 모듈), php.exe
php8apache2_4.dll, php7apache2_4.dll, php5apache2_2.dllApache 모듈 로더httpd.exe
php5isapi.dll레거시 IIS ISAPI 모듈 (PHP 5.2 이하, 지원되지 않음)w3wp.exe

이 표는 일반적인 이름을 나열한 것이지 허용 목록이 아닙니다. 패턴에 맞는 모든 이름이 일치합니다. DLL 이름은 주 버전만 알려줍니다. 정확한 버전은 동일한 장치의 php-cgi.exe 또는 php.exe 프로세스 행이나 설치된 소프트웨어에서 확인할 수 있습니다.

Linux

검사테이블일치 항목중요한 이유
PHP 바이너리 시작됨DeviceProcessEvents정규식 ^(php[\d.]*|php-(fpm|cgi)[\d.]*|lsphp[\d.]*|frankenphp)$: php, php-fpm, php-cgi 또는 lsphp (LiteSpeed), 각각 숫자와 점으로 구성된 선택적 버전이 붙을 수 있으며, 추가로 frankenphp. 예: php, php8.3, php83, php-fpm8.3, php-cgi8.2, lsphp83. phpunit, phpize, php-config 같은 도구는 기본 이름 뒤에 숫자와 점만 올 수 있으므로 일치하지 않습니다PHP가 실행되었음을 증명합니다. Hunt 2는 두 번째 정규식 php-?(?:fpm|cgi)?/?(\d+\.\d+) (예: php-fpm8.3 또는 /etc/php/8.3/는 8.3.x를 제공)을 통해 이름, 경로 또는 명령줄에서 추출한 major.minor 힌트를 표시합니다
설치된 패키지DeviceTvmSoftwareInventory정규식이 아님: SoftwareName contains "php" (부분 문자열이므로 php8.3-fpm 및 libapache2-mod-php8.3 같은 버전이 붙은 이름도 일치) 또는 SoftwareVendor =~ "php"Apache mod_php와 윈도우 이전부터 실행 중인 php-fpm을 확인하는 유일한 검사입니다. Linux에는 여기서 라이브러리 로드 검사가 없으며, 포크된 php-fpm 워커는 프로세스 시작을 생성하지 않습니다

Hunt 3 안전망 검사

검사테이블일치 항목중요한 이유
활성 웹 서비스DeviceNetworkEvents고정 포트 목록(80, 443, 8080, 8443)에서의 InboundConnectionAccepted. 루프백은 제외됩니다(RemoteIPType != "Loopback"). 고유 및 공용 소스와 수락 프로세스(via <process>)를 표시합니다웹 서버가 조회 기간 이전에 시작되었더라도 장치가 서비스 중임을 증명합니다. ntoskrnl.exe = HTTP.sys (IIS, ADFS, RD Gateway, Windows Admin Center, SSTP)
웹 서버 시작됨DeviceProcessEvents정규식이 아님: 대소문자를 구분하지 않는(in~) 정확한 이름의 고정 목록. Windows: w3wp.exe, httpd.exe, nginx.exe, caddy.exe, lighttpd.exe, frankenphp.exe. Linux: httpd, apache2, nginx, lshttpd, litespeed, openlitespeed, caddy, lighttpd, frankenphp기간 내에 시작되었고 PHP를 로드하지 않은 웹 서버는 높은 신뢰도로 "Not seen"을 제공합니다. Windows는 또한 정규식 -ap\s+"?([^"\s]+)을 통해 w3wp.exe 명령줄에서 추출한 IIS 애플리케이션 풀 이름을 표시합니다

hunt 3의 PHP 열 값

값의미
PHP seen (see hunt 2)하나 이상의 PHP 탐지 검사가 일치했습니다.
Not seenPHP 증거가 없으며, 기간 내에 웹 서버가 시작되었거나(높은 신뢰도) 장치가 웹을 서비스하지 않습니다.
Not seen - no web server start in <N>d (N = Lookback)웹 포트에서 서비스 중이지만 검사할 웹 서버 프로세스 시작이 없습니다. 이것이 남은 사각지대입니다. 호스트의 via 프로세스를 확인하세요.

사용법

  • 각 헌트는 기본적으로 해당 OS의 온보딩된 모든 디바이스를 반환하며, 서버가 먼저, 그다음 증거 행이 먼저 나옵니다. 증거 전용 행만 반환하려면 uncomment for evidence-only rows로 표시된 줄의 주석을 해제하세요.
  • Lookback: 각 헌트 상단의 단일 let Lookback = 30d; 줄을 변경하고, 모든 헌트에서 동일한 값을 사용하세요.
    • 30일이 최대입니다: Defender XDR Advanced Hunting은 디바이스 이벤트를 30일간 보관합니다. 더 큰 값은 오류를 내지 않고 조용히 30일로 반환되므로, npm test는 30d를 초과하는 값과 헌트 간에 혼재된 값을 거부합니다.
    • 더 짧은 기간은 쿼리 비용을 줄이지만, 더 많은 서버가 수동 확인을 위해 "웹 서버 시작 없음"으로 분류됩니다. 기준선이 설정된 환경에서 재실행할 때만 사용하세요.
    • 30일을 초과하는 침해 lookback(예: 2026년 8월 1일부터의 조기 지식 기간)에는 더 긴 보존 기간을 가진 Sentinel을 사용하세요. 이는 이 노출 팩과는 별개의 작업입니다.
  • 수정된 릴리스와 버전을 비교하세요: 8.5.12, 8.4.27, 8.3.36, 8.2.35. 이전 브랜치에는 업스트림 수정이 없습니다. Linux에서는 배포판이 업스트림 버전을 변경하지 않고 수정 사항을 백포트하므로, CVE ID에 대해서는 패키지 변경 로그나 배포판 보안 트래커를 확인하세요.

알려진 제한 사항

두 OS 모두:

  • 활성 PHP만 해당. lookback 기간 이전에 시작되어 다시 시작되지 않은 프로세스는 프로세스 이벤트를 남기지 않습니다. 헌트 3은 이를 수동 확인을 위해 "no web server start in d"로 표시합니다.
  • 버전 확인은 버전 번호 기반입니다. 벤더가 번들로 제공하는 빌드는 버전 변경 없이 수정 사항을 포함할 수 있습니다.
  • TVM 이름 필터는 모든 테넌트의 인벤토리 명명 방식에 대해 검증되지 않았습니다.

Windows:

  • Defender는 모든 DLL 로드를 기록하지 않습니다.
  • PHP의 Zip 설치 방식은 일반적으로 설치된 소프트웨어에 나타나지 않습니다.

Linux, Linux 양성 대조 테스트가 통과할 때까지 미검증:

  • TVM 패키지 이름에 "php"가 포함되는지 여부(헌트 1-3 패키지 확인). - 보류 중, 지금까지의 긍정적인 실제 결과는 이것이 작동함을 시사하지만 최종 검증이 필요합니다.

Linux 커버리지 격차:

  • 라이브러리 로드 확인이 없습니다. Apache mod_php와 기간 이전부터 실행 중인 php-fpm(워커는 포크되며 시작되지 않음)은 패키지 확인을 통해서만 발견됩니다.
  • 소스에서 빌드하거나 컨테이너에서 실행되는 PHP는 패키지로 나타나지 않을 수 있습니다.
  • 프로세스 버전은 바이너리 이름이나 경로에서 얻은 major.minor 힌트일 뿐입니다.

유지 관리

PHP 탐지 블록은 각 OS의 세 헌트 내에서 동일합니다. 세 개를 함께 변경하세요. 서로 어긋나면 npm test가 실패합니다. 탐지 정규식을 변경할 때는 tests/lint/patterns.test.js의 예상 일치 및 비일치 항목을 업데이트하세요. 테스트는 쿼리에서 정규식을 읽으므로, 복사본이 아닌 여러분의 수정 사항을 검사합니다.

테스트

도구 다운로드