← Zurück zur Liste

php2shell-audit-Feld: Windows verwendet exe, Linux, py, 10 Minuten, um PHP herauszufinden.

itadol5j

Es geht nicht um Kurven. Es geht um Klopfen:Ladewerkzeuge, laufende Maschinen, Reinigungsziele, Lesen von Schlussfolgerungen, Entscheidung, ob gepatcht werden soll oder nichtEin Drache. Zehn Minuten bis zum Ende.

Erstens sind CVE-2026-109618 und CVE-2026-109619 nicht autorisierte RCE für die PHP-Engine selbst, die offizielle wiederhergestellte Version ist 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12. Zwei Sets von Kaliber...PHP offiziell CVSS 4.0 beat 9.2, NVD CVSS 3.1 beat 9.89.8 im Titel ist letzteres, und beide beziehen sich auf das gleiche Zwei-zu-Eins-Schlupfloch, nicht zu denken, dass es anders ist.

Hier sind die Werkzeuge:Vivipenclaw-code/php2shell-uditApache-2.0, gerade heute. Es macht zwei Dinge: Überprüfen Sie, welche PHPs auf dieser Maschine installiert sind, fegen Sie die unentdeckte Version des fernen Sturms.Es greift den Datenverkehr nicht an, schreibt keine Discs, ändert keine Konfiguration.Und das habe ich im Quellcode überprüft, und der Remote-Modus sendet wirklich nur eine HEAD-Anfrage für einen Antwortkopf.

php2shell-udit Terminal-Laufeffekte

I. DIFTING: Zwei Möglichkeiten, um zu sehen, in welchem System Sie sich befinden.

Linux / MacOS gehen Python, Nullabhängigkeit, Standardbibliothek ist genug, kein Pip, um etwas zu laden:

git clone https://github.com/viviopenclaw-code/php2shell-audit.git
cd php2shell-audit
chmod +x php2shell_audit.py
python3 php2shell_audit.py --local

Windows geht direkt zum Exe, ohne Python. Grab auf Release Page php2shell-audit.exe:

certutil -hashfile php2shell-audit.exe SHA256
php2shell-audit.exe --local

Exe ist ein einzelnes Dateikonsole-Programm, das Win10/11 x64 verfügbar ist,Keine Codesignatur.Der erste Lauf für SmartScreen würde also aufhören. Lassen Sie uns zuerst laufen. SHA256SUMS.txt Noch einmal - dieser Schritt ist einer, bei dem niemand die "grüne" Version berührt, die online verbreitet wird.

Zwei Versionen der gleichen Parameter. Nur ein Satz auf der Rückseite des Tutorials, Windows. python3 php2shell_audit.py Ersetzen php2shell-audit.exe Tun Sie es einfach.

Linux- und Windows-Installationsmethoden

Was ist los?

python3 php2shell_audit.py --local

Es wird vier Dinge tun, eine Sache:

  1. Finden Sie PHP.:/usr/bin/php*Ich weiß es nicht./usr/sbin/php-fpm*Ich weiß es nicht./opt/*Ich weiß es nicht./usr/lib/php/*/sapi/*Homebrew zählt auch. Windows, check it out. C:\phpPHP unter XAMPP, WAMP, Laragon, Chocolatey, Scoop, Program Files.
  2. Lesen Sie die Version: Lauf php -v Nehmen Sie Banner mit 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12.
  3. Prüfkonfiguration: Parsing der vorläufigen Minderungsanweisungen in php.ini.
  4. Säulenprozess: Liste alle Werke auf, die nach dem Patch neu gestartet werden müssen.

Ich lief über eine Maschine ohne PHP. Hier ist der Output:

php2shell-audit 1.1.0 - local audit
Host    : admin
System  : Linux 7.0.0-30-generic (x86_64)
------------------------------------------------------------------------
[UNKNOWN] No PHP installation detected.
------------------------------------------------------------------------
php.ini mitigation directives
[WARNING] session.upload_progress.enabled = (unset)  (recommended 0)
[WARNING] fatal_error_backtraces = (unset)  (recommended 0)
[WARNING] expose_php = (unset)  (recommended 0)
------------------------------------------------------------------------
Running services that must be restarted after patching
[INFO] apache2 - 3 process(es)
------------------------------------------------------------------------
[INFO] No PHP binary, FPM daemon or Apache PHP module was found on this host.
------------------------------------------------------------------------
Remediation
[UNKNOWN] No PHP install was audited, so nothing can be confirmed safe.

Sehen Sie sich die letzte Zeile an:Kein PHP ist unbekannt, kein Pass.Dieses Design ist sehr anerkannt - es gibt kein Problem, etwas zu finden. Es sind zwei verschiedene Dinge.

Es ist übrigens verbunden. expose_php Alle von ihnen. Dieser hat nichts mit der Lücke selbst zu tun, aber es ist eine direkte Entscheidung, ob ein Remote-Scan Ihre Versionsnummer lesen kann.Schalten Sie es aus. Die Fingerabdrücke des Angreifers sind halb blind.Ich weiß es nicht. Natürlich heißt es nicht Reparatur, sondern Reduzierung der Informationsbelastung.

III. Parameter

php2shell-udit Argumentübersicht
ParameterRolleAusfall
--local / --remoteZwei oder eins, wir beschließen, die Maschine oder das Ziel zu überprüfen.erforderlich
--file targets.txtBatch-Ziel, eins in einer Reihe, # beginnen mit KommentarKeine
--workers NAnzahl langfristiger paralleler Kurse10
--json report.jsonProduktion vollständig JSON,- Schlag auf StdoutKeine
--timeout NSingle Request Timeout (Sec)8
--insecureSkip TLS Verifizierung, nur für FingerabdrückeSchließen

Ausfahrtscode: direkt zum CI-Kartenpunkt

AusstiegscodeBedeutung
0Keine betroffene Version gefunden
2Mindestens eine betroffene Version wurde gefunden.
1Fehler am Tool selbst (z. B. JSON kann nicht schreiben)

Quit Nummer zwei, das ist der Punkt.Es bedeutet, dass Sie es in die Flusslinie stecken können, es durch die Bauphase fegen, es treffen und nicht darauf warten können, dass Menschen es finden.

iv. Sweeping remote: –remote how

# 单个目标
python3 php2shell_audit.py --remote example.com

# 批量,20 个并发,出 JSON
python3 php2shell_audit.py --remote --file targets.txt --workers 20 --json out.json

# 也可以直接写在命令行里
python3 php2shell_audit.py --remote https://a.example 10.0.0.5

Was? Schreiben

# production fleet
example.com
https://shop.example.net
10.0.0.5:8080

# Beginnen Sie mit einer Notiz, einer Zeile, einer im Lager targets.example.txt Es kann direkt kopiert werden.

Was hat es geschickt?

Jedes Ziel.Senden Sie nur eine HEAD RequestNur einmal wird der Server HeAD ablehnen. Und lesen Sie es. Server:Ich weiß es nicht.X-Powered-By: und Set-CookieGeh raus von dort. PHP/x.y.zIch weiß es nicht.

Kein mehrteiliger, kein großer Körper, kein OOM, kein Use-after-free.Es starb in der Quellnote als Design-Einschränkung.Es ist nicht zufällig.

Der Preis muss klar sein:Der Remote-Modus beweist keine UsabilityEs kann nur Informationen melden, die der Server freiwillig ausspuckt. Verstecken Sie das Ziel der Versionsnummer und das Ergebnis wird immer UNKNOWN sein.

V. Wie man die Schlussfolgerungen liest

Bedeutung der drei Schlussfolgerungen
[VULNERABLE] https://shop.example.net
         http    : 200
         server  : Apache/2.4.62 (Debian)
         powered : PHP/8.4.16
         php     : 8.4.16
         verdict : PHP 8.4.16 < fixed 8.4.27
  • [SCHULDBAR] Die Version wurde gelesen und niedriger als die wiederhergestellte Version.
  • [PASS] Die Version wurde gelesen und ist größer oder gleich der wiederhergestellten Version.
  • [WARNUNG] Die vorläufigen Minderungsanweisungen wurden nicht wie vorgeschlagen festgelegt.
  • [UNTERNEHMEN] Unzureichende Beweise.Nicht sicher, nicht bekannt.

Diese Unterscheidung ist, wo das gesamte Werkzeug am wertvollsten ist. Die meisten Scanner geben Ihnen nur rot, gelb und grün, und dann denken Sie, es ist überall auf dem Bildschirm.Unbekannt muss als To-Do betrachtet werdenSchalten Sie entweder die versteckte Version aus, laufen Sie im Container - lokal - oder melden Sie sich an der Maschine an.

Sechs, vier Gruben, eine mehr als die andere.

Vier Noten mit php2shell-udit

Pipe 1: UNKNOWN ≠ Clear

Der Host, der die Versionsnummer versteckt hat, meldet immer UNKNOWN. Stellen Sie nur sicher, dass es nur auf dem Mainframe ist. --localIch weiß es nicht.

Pocket 2: Release wird falsch gemeldet.

Debian / Ubuntu / RHEL / Alpine ruft regelmäßig Sicherheitspatches auf, aberNicht springen Version NummerIch weiß es nicht. Das Ergebnis ist die fertige Maschine, wie es scheint.

Also keine Panik, bis Sie das Rot sehen.

apt changelog php8.4
rpm -q --changelog php-8.4 | head -50

Dieser Schritt, oder dies nicht zu tun, wäre nichts anderes als eine Eskalation; es wäre auch eine Fehlkalkulation, die die wirkliche Notwendigkeit für ein Upgrade ist.

Pit 3: A HEAD wird ebenfalls angefordert

Es wird im Protokoll des anderen sein, und es wird von der WAF niedergeschrieben. Das Fegen ohne schriftliche Genehmigung ist von Natur aus eine unbefugte Entdeckung - ein Gesetz wie die CFAA, die UK CMA 1990.

Ich brauche eine Genehmigung, um die Vermögenswerte meines Unternehmens zu bereinigen.Insbesondere sektorübergreifende, subunternehmensübergreifende, cloudbasierte Konten. Denken Sie nicht, "Ich schaue nur auf einen Antwortkopf" zählt nicht.

Pocket 4:-local überprüft nur die Maschine.

PHP läuft im Container, läuft im Container oder verwendet es auf dem Host. --remote Der Hafen, der kartographiert wurde. Der Gastgeber läuft. --local Wenn Sie das PHP im Container nicht finden können, erhalten Sie ein UNKNOWN - das UNKNOWN weiß es wirklich nicht, nicht der Container ist sicher.

Sieben, finde heraus, dass es ein Problem gibt, was dann?

Patching ist die einzige vollständige Reparatur.Der ganze Rest blutet.

# Debian / Ubuntu
sudo apt update && sudo apt install --only-upgrade php

# RHEL / Fedora
sudo dnf upgrade 'php*'

# Alpine
sudo apk upgrade php83 php84

Upgrade: 8.2 Branch to 8.2.358,3 bis 8.3.36Es ist 8,4. 8.4.27Es ist 8,5. 8.5.12Ich weiß es nicht. 8.1 und darüber hinaus, nur Source Level Report.

Wenn Sie keinen Patch bekommen können, tun Sie diese zuerst, dann beginnen Sie von vorne.

; CVE-2026-109619
session.upload_progress.enabled = 0

; CVE-2026-109618
memory_limit = -1

; 仅 PHP 8.5
fatal_error_backtraces = 0
  • session.upload_progress.enabled=0 In php.ini, FPM-Tool oder Serverkonfiguration zu schreiben,Es muss vor dem Antrag wirksam sein.Ich weiß es nicht. Es ist zu spät.
  • memory_limit=-1 Ich brauche es. php_admin_value Die Niveaueinstellung solcher Anwendungen ist unverändert, wobei sichergestellt wird, dass es keinen Pool / Verzeichnis / Anwendung gibt, um den begrenzten Wert wiederherzustellen.
  • Verwenden Sie niemals RLIMIT AS oder RLIMIT DATADiese beiden werden Map zum Scheitern bringen und einfach wieder in diesen gefährlichen Longjmp-Pfad eintreten.
  • Change muss jeden Worker neu starten:systemctl restart php*-fpm apache2 nginxIch weiß es nicht.Kein Neustart ist keine Änderung.

Keine dieser vier kann Sie in Sicherheit bringen, und die Behörden selbst sind sich darüber im Klaren. Sie haben nur einen Wert:Bevor Sie es patchen, decken Sie die Tür.

VIII. Eine vollständige Sequenz

  1. Überprüfen Sie sich zuerst.:--localDrei oder fünf Sekunden, siehe Version und Konfiguration.
  2. Remote Batch SweepEs ist eine große Sache.--remote --file Und lauf raus aus JSON.
  3. KlassifikationsverarbeitungVULNERABLE Upgrade, WARNUNG Nachfüllung, UNKNOWN Identifikation --Es ist nicht geschlossen, es muss getan werden.
  4. Upgrade + Restart WorkerPatches, und starten Sie dann alle FPM / Apache / nginx neu.
  5. Resweep-Authentifizierung: Lauf wieder, bestätige Grün. Beobachten Sie den Backport-Fehler und beobachten Sie Changelog, wenn nötig.
  6. Geh in die Wasserlinie.Beenden Sie Code 2 Direkte Fehlerkonstruktion, und das nächste Mal wird sich niemand erinnern.

Der gesamte Prozess dauert zehn Minuten, und die Echtzeit ist der dritte Schritt.Überprüfen Sie die unbekannten Linien.Ich weiß es nicht. Aber das wird es nicht retten, denn wenn man es überspringt, bekommt man einen hübschen, gefälschten, grünen Bericht.

Der Wert des Scanners gibt Ihnen kein grünes Licht, er zwingt Sie zuzugeben, wo Sie es nicht wirklich wissen.

Wiedergabe der Projektadresse:Gythub.com/viviopenclaw-code/php2shell-uditIch weiß es nicht. Lesen Sie DISSLAIMER.md, bevor es auf Chinesisch geschrieben wird.

Der letzte Satz erinnert mich daran, dass dieses Tool heute 1.1.0 ist, die erste öffentliche Version, eine einzelne Nullgabel, eine kleine Anzahl von Codes, Sie können sie alle lesen. php2shell_audit.pyIch weiß es nicht.Schauen Sie sich den Quellcode an., vor allem, wenn Sie die php.ini und die Prozessliste mit Administratorberechtigung lesen möchten.