← Retour à la liste

php2shell-audit field: Windows utilise exe, Linux, py, 10 minutes pour comprendre PHP.

itadol5j

Il ne s'agit pas de virages. Il s'agit de coups :Outils de chargement, machines à rouler, cibles de nettoyage, lecture des conclusions, décision de patch ou nonUn dragon. Dix minutes avant la fin.

Tout d'abord, CVE-2026-109618 et CVE-2026-109619 sont non autorisés RCE pour le moteur PHP lui-même, la version officielle restaurée est 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12. Deux séries de calibre...CVSS 4.0 officiel PHP battre 9,2, NVD CVSS 3.1 battre 9,89.8 dans le titre est ce dernier, et les deux se réfèrent à la même échappatoire de deux à un, de ne pas penser que c'est différent.

Voici les outils :Vivipenclaw-code/php2shell-uritApache-2.0, aujourd'hui. Il fait deux choses : vérifier ce que PHP sont installés sur cette machine, balayer la version non découverte de la tempête lointaine.Il n'attaque pas le trafic, n'écrit pas les disques, ne modifie aucune configuration.Et c'est ce que j'ai vérifié dans le code source, et le mode distant n'envoie vraiment qu'une seule requête HEAD pour une tête de réponse.

php2shell-wit terminal effets de fonctionnement

I. DIFTING: Deux façons de voir dans quel système vous êtes.

Linux / MacOS go Python, aucune dépendance, bibliothèque standard est suffisant, pas de pip pour charger quoi que ce soit:

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

Windows va directement à l'exe, sans Python. Saisissez sur la page de publication php2shell-audit.exe:

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

Exe est un programme de console de fichiers unique qui Win10/11 x64 est disponible,Pas de signature de code.Donc la première manche pour SmartScreen s'arrêtait. Courons d'abord. SHA256SUMS.txt Encore une fois — cette étape est une étape dans laquelle personne ne touche à la version verte qui est diffusée en ligne.

Deux versions des mêmes paramètres. Un seul set à l'arrière du tutoriel, Windows. python3 php2shell_audit.py Remplacer php2shell-audit.exe Fais-le.

Méthodes d'installation Linux et Windows

Qu'est-ce qui se passe ?

python3 php2shell_audit.py --local

Ça fera quatre choses, une chose :

  1. Trouvez PHP.:/usr/bin/php*Je ne sais pas./usr/sbin/php-fpm*Je ne sais pas./opt/*Je ne sais pas./usr/lib/php/*/sapi/*Homebrew compte aussi. Regarde. C:\phpPHP sous XAMPP, WAMP, Laragon, Chocolaté, Scoop, Fichiers de programme.
  2. Lire la version: Courir php -v Prendre Bannière, avec 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12
  3. Vérifier la configuration: analyse des instructions provisoires d'atténuation en php.ini.
  4. Processus de colonne: liste toutes les œuvres qui doivent être redémarrées après le patch.

J'ai écrasé une machine sans PHP. Voici la sortie :

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.

Regardez la dernière ligne :Pas de PHP, pas de PASS.Ce design est très bien reconnu -- il n'y a aucun problème à trouver quoi que ce soit. C'est deux choses différentes.

Au fait, c'est connecté. expose_php Tous. Celui-ci n'a rien à voir avec la faille elle-même, mais c'est une décision directe quant à savoir si un balayage à distance peut lire votre numéro de version.Éteins ça. Les empreintes de l'agresseur sont à moitié aveugles.Je ne sais pas. Bien sûr, ce n'est pas une réparation, c'est une réduction de l'exposition à l'information.

III. Paramètres

Aperçu de l'argument php2shell-urit
ParamètresRôlePar défaut
--local / --remoteDeux ou un, nous décidons de vérifier la machine ou la cible.Requis
--file targets.txtCible par lots, une ligne en une ligne, # commencer par un commentaireAucune
--workers NNombre de cours concomitants de longue durée10
--json report.jsonProduit complet JSON,- Frappe à stdoutAucune
--timeout NDélai de demande unique (sec)8
--insecurePasser la vérification TLS, seulement pour les empreintes digitalesFermer

Code de sortie : directement au point de carte CI

Code de sortieSignification
0Aucune version affectée trouvée
2Au moins une version affectée a été trouvée.
1Erreur sur l'outil lui-même (par exemple JSON ne peut pas écrire)

Quittez le numéro deux, c'est ça.Cela signifie que vous pouvez le mettre dans la ligne d'écoulement, le balayer dans la phase de construction, le frapper, et ne pas attendre que les humains le trouvent.

iv. La télécommande de balayage: –remarquer comment

# 单个目标
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

Quoi ? Écrire

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

# Commencez par une note, une ligne, une dans l'entrepôt targets.example.txt Il peut être copié directement.

Qu'est-ce qu'il a envoyé ?

Chaque but.Envoyer une seule demande HEAD, seulement une fois le serveur rejettera HeAD. Et lisez-le. Server:Je ne sais pas.X-Powered-By: et Set-CookieSortez d'ici. PHP/x.y.zJe ne sais pas.

Pas de multiparties, pas de gros corps, pas de OOM, pas d'utilisation-après-libre.Il est mort dans la note source comme une contrainte de conception.Ce n'est pas aléatoire.

Le prix doit être clair:Le mode distant ne prouve pas sa facilité d'utilisationIl ne peut rapporter que les informations que le serveur crache volontairement. Cacher la cible du numéro de version, et le résultat sera toujours UNKNOWN.

V. Comment lire les conclusions

Signification des trois conclusions
[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
  • [VULNÉRABLE] La version a été lue et inférieure à la version restaurée.
  • [PASSE] La version a été lue et est supérieure ou égale à la version restaurée.
  • [AVOIR] Les instructions provisoires d'atténuation n'ont pas été établies comme suggéré.
  • [UNCNOWN] Des preuves insuffisantes.Pas sûr, pas connu.

Cette distinction est là où tout l'outil est le plus précieux. La plupart des scanners vous donnent seulement rouge, jaune et vert, et puis vous pensez que c'est partout sur l'écran.UNKNOWN doit être considéré commeÉteignez la version cachée, exécutez dans le conteneur -- local, ou connectez-vous à la machine.

Six, quatre fosses, une de plus que l'autre.

Quatre notes utilisant php2shell-urit

Tuyau 1: UNKNOWN

L'hôte qui a caché le numéro de version rapportera toujours UNKNOWN. Assurez-vous que c'est sur l'ordinateur central. --localJe ne sais pas.

Poche 2 : La libération est mal signalée.

Debian / Ubuntu / RHEL / Alpine appelle régulièrement dans les correctifs de sécurité maisNe sautez pas le numéro de versionJe ne sais pas. Le résultat est la machine terminée, comme il apparaît.

Alors ne paniquez pas avant de voir le rouge.

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

Cette étape, ou le fait de ne pas le faire, ne serait rien d'autre qu'une escalade; il s'agirait également d'une erreur de calcul, qui est le véritable besoin d'une mise à niveau.

Pit 3: Une HEAD est également demandée

Ça sera dans le journal de l'autre, et ça sera écrit par la WAF. Le fait de balayer sans autorisation écrite est par nature une détection non autorisée - une loi telle que la CFA, la CMA britannique 1990.

J'aurai besoin d'autorisation pour nettoyer les actifs de ma société.En particulier, comptes transsectoriels, inter-sous-sociétés, basés sur le cloud. Ne pensez pas, "Je regarde juste une tête de réponse" ne compte pas.

Poche 4:-local seulement vérifier la machine.

PHP fonctionne dans le conteneur, s'exécute dans le conteneur ou l'utilise sur l'hôte. --remote Le port qui a été cartographié. L'hôte court. --local Si vous ne trouvez pas le PHP dans le conteneur, vous obtiendrez un KNOWN -- le KNOWN ne sait vraiment pas, pas le conteneur est sûr.

Sept, trouve un problème, alors quoi ?

Patching est la seule réparation complète.Tout le reste saigne.

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

# RHEL / Fedora
sudo dnf upgrade 'php*'

# Alpine
sudo apk upgrade php83 php84

Mise à jour: 8.2 branche à 8.2.358.3 à 8.3.36Il est 8.4. 8.4.27Il est 8.5. 8.5.12Je ne sais pas. 8.1 et au-delà, seuls les rapports de sources.

Si vous ne pouvez pas obtenir un patch, faites-le d'abord, puis recommencez à zéro.

; 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 Pour être écrit en php.ini, outil FPM ou configuration du serveur,Elle doit être effective avant la demande.Je ne sais pas. Il est trop tard.
  • memory_limit=-1 J'en ai besoin. php_admin_value Le réglage de niveau de ces applications est inchangé, tout en veillant à ce qu'il n'y ait pas d'application pool/ directory/ pour restaurer la valeur limitée.
  • N'utilisez jamais RLIMIT AS ou RLIMIT DATA- Ces deux-là vont faire échouer Map et juste rentrer dans ce dangereux longjmp chemin.
  • Le changement doit redémarrer chaque travailleur :systemctl restart php*-fpm apache2 nginxJe ne sais pas.Aucun redémarrage n'est un changement.

Aucun de ces quatre-là ne peut vous protéger, et les autorités elles-mêmes sont très claires. Ils n'ont qu'une valeur :Avant de le réparer, couvrez la porte.

VIII. Une séquence complète

  1. Vérifiez-vous d'abord.:--localTrois ou cinq secondes, voir la version et la configuration.
  2. Balayage par lots à distanceC'est important.--remote --file Et fuyez, hors de JSON.
  3. Traitement du classement:Mise à niveau VULNÉRABLE, RENFORCEMENT D'AVERTISSEMENT, Identification INNOVABLE --Ce n'est pas fermé, c'est à faire.
  4. Mise à jour + Redémarrer le travailleur: Patches, puis redémarrer tous les FPM/ Apache/ nginx.
  5. Authentification de la répétition: Courez encore, confirmez le vert. Regardez l'erreur de backport et regardez le changelog si nécessaire.
  6. Monte dans la ligne d'eau.: Quitter le Code 2 La construction directe échoue, et la prochaine fois, personne ne se souviendra.

Tout le processus est de dix minutes, et le temps réel est la troisième étape.Vérifiez les lignes UNKNOWN.Je ne sais pas. Mais ça ne va pas le sauver, parce que si on saute, on obtient un joli rapport vert.

La valeur du scanner ne vous donne pas de lumières vertes, ça vous force à admettre où vous ne savez pas vraiment.

Rejouer l'adresse du projet :Gythub.com/viviopenclaw-code/php2shell-uritJe ne sais pas. Lisez DISSLAIMER.md avant qu'il soit écrit en chinois.

La dernière phrase me rappelle que cet outil est 1.1.0 aujourd'hui, la première version publique, une seule fourchette zéro, un petit nombre de codes, vous pouvez les lire tous. php2shell_audit.pyJe ne sais pas.Regardez le code source., surtout si vous voulez lire le php.ini et la liste des processus avec la permission de l'administrateur.