Repository navigation
PHP2Shell v2.7.0
PHP2Shell v2.7.0
Published: 22 October 2026
Tag: v2.7.0
Evidence-based compromise investigation assist: offline access/error-log review, offline process/EDR telemetry, passive webroot metadata investigation, cross-source temporal correlation, and independent IR statuses — in addition to PHP discovery and patch assessment from v2.6.0. Does not overwrite v2.6.0 (or earlier) release assets.
Downloads
php2shell-windows-amd64.zipphp2shell-linux-amd64.tar.gzphp2shell-linux-arm64.tar.gzphp2shell-darwin-amd64.tar.gz/php2shell-darwin-arm64.tar.gz(developer convenience builds)
Verify SHA256SUMS. Binaries are not code-signed. Confirm php2shell version prints 2.7.0.
What is new
HTTP access-log investigation
- Bounded offline
--access-logreview inside--investigate-from/--investigate-to(default floor 2026-10-17 UTC when investigating) - Long POST request-target heuristic (≥2048 characters of URI path/query as logged) — measures request-target length only, never request-body size
- Contributes to independent exploitation-attempt status (
NOT_ASSESSED/NO_MATCHES_IN_SCOPE/SUSPECTED_ATTEMPTS_REVIEW)
PHP / Apache error-log investigation
- Bounded
--error-logreview (≤32 MiB each) - Research-backed patterns (e.g. PHP Fatal memory exhausted in Unknown on line 0; Apache child segfault /
AH00052) - Memory errors or crashes alone are not successful exploitation or host compromise
Offline process / EDR telemetry
- Repeatable
--process-telemetryfor offline exports only (≤32 MiB each, ≤8 files, ≤50 000 events) - Supported formats: MDE DeviceProcessEvents CSV, Sysmon Event ID 1 CSV, Linux auditd EXECVE text, Elastic ECS process JSONL
- No live EDR APIs, credentials, or uploads
- Suspicious web/PHP parent→child relationship leads (behavioral; not confirmed compromise)
- Ordinary admin shells (e.g. explorer→cmd) are not treated as compromise
- Command lines redacted to classification tokens; entity/report IDs retained for trace-back
Passive webroot metadata investigation
- When
--webrootis supplied during investigation: metadata-only walk (depth≤8, ≤25 000 entries, symlinks skipped, contents never read) - Path location context (PHP under upload-like paths; unusual/double extensions) vs timestamp evidence (birth/mtime in window)
- Historical CMS files with both timestamps outside the window produce no leads
- In-window birth still reported when mtime is old; mtime is never creation or execution
- Path context alone never flips
POSSIBLE_COMPROMISE_REVIEW - Webroot-only possible compromise is labeled low-confidence in HTML/CSV
- Not a webshell/
evalcontent scanner; signed SHA-256 IOC hashing under--webrootunchanged
Cross-source correlation and independent statuses
- Temporal proximity (±15 minutes) among access, error, process, and webroot (birth-based) leads — proximity ≠ causality
- Independent axes: vulnerability / exploitation attempts / possible compromise / investigation coverage
- Never auto-
CONFIRMED_COMPROMISE; never equateNO_MATCHES_IN_SCOPEor empty findings with a clean host - Incomplete / missing inputs →
NOT_ASSESSEDorINCOMPLETE(not a negative clearance)
Fleet CSV v3
- Writers emit
php2shell-fleet-csv/v3with IR columns - Offline
rollupaccepts v1–v3 and writes v3 - See CSV-SCHEMA.md
Preserved from v2.6.0
- Optional
--deep-rootDeep Discovery; expanded well-known paths - Multi-install retention;
--php-ini/--config-root - Matching HTML + CSV pairs; IIS/Apache bounded inventory
- Passive, read-only scanning; discovered PHP never executed; no automatic customer upload
Security limitations (unchanged product rules)
- Not a clearance tool
- Active HTTP-serving SAPI not attested from config alone
- Vendor backports not independently verified
- First/last log/telemetry timestamps do not prove continuous coverage
- Binaries not code-signed; verify
SHA256SUMS - Licensing still pending (
LICENSE.proposedis not an approved license)
Out of scope for v2.7.0
- RPM DB inventory; PHP lifecycle calendar; AWS IP packs as strong IOCs
- Generic webshell/
evalcontent scanning; live EDR APIs; automatic remediation - Full IIS/Apache merge simulation; Tomcat/Java scanning
Quick start
.\php2shell-windows-amd64.exe scan --quiet --output-dir C:\ProgramData\PHP2Shell\Reports
.\php2shell-windows-amd64.exe scan `
--webroot 'E:\websites\prod\site' `
--access-log 'C:\inetpub\logs\LogFiles\W3SVC1\u_ex261018.log' `
--error-log 'C:\PHP\logs\php_errors.log' `
--process-telemetry 'C:\Engagement\exports\DeviceProcessEvents.csv' `
--investigate-from 2026-10-17 `
--quiet --output-dir C:\ProgramData\PHP2Shell\Reports./php2shell-linux-amd64 scan --quiet --output-dir "$HOME/.php2shell/reports"
./php2shell-linux-amd64 scan \
--webroot /var/www/html \
--access-log /var/log/nginx/access.log \
--error-log /var/log/php8.3-fpm.log \
--process-telemetry ./exports/auditd-execve.log \
--investigate-from 2026-10-17 \
--quiet --output-dir "$HOME/.php2shell/reports"Index: RELEASE-NOTES.md. Investigation: COMPROMISE-INVESTIGATION.md. Field guide: FIELD-VALIDATION-2.7.0.md. Schema: CSV-SCHEMA.md. Advanced: ADVANCED-USAGE.md.