campo php2shell-audit: Windows utilizza exe, Linux, py, 10 minuti per capire PHP.
Non si tratta di curve. Si tratta solo di bussi:Strumenti di carico, macchine in esecuzione, obiettivi di pulizia, conclusioni di lettura, decidere se o meno patchUn drago. Dieci minuti per finire.
In primo luogo, CVE-2026-109618 e CVE-2026-109619 sono RCE non autorizzati per il motore PHP stesso, la versione restaurata ufficiale è 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12. Due serie di calibri...PHP ufficiale CVSS 4.0 beat 9.2, NVD CVSS 3.1 beat 9.89.8 nel titolo è quest'ultimo, ed entrambi si riferiscono alla stessa scappatoia da due a uno, per non pensare che sia diverso.
Ecco gli strumenti:Vivipenclaw-code/php2shell-uditApache-2.0, proprio oggi. Fa due cose: controllare che cosa PHP sono installati su questa macchina, spazzare la versione non scoperta della tempesta lontano.Non attacca il traffico, non scrive dischi, non cambia alcuna configurazione.Ed e' quello che ho controllato nel codice sorgente, e la modalità remota manda solo una richiesta HEAD per una testa di risposta.
I. DIFTING: Due modi per vedere in che sistema sei.
Linux / MacOS go Python, zero dipendenza, libreria standard è sufficiente, nessun pip per caricare nulla:
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 dritto all'exe, senza Python. Afferra la pagina di rilascio php2shell-audit.exe:
certutil -hashfile php2shell-audit.exe SHA256
php2shell-audit.exe --local
Exe è un unico programma di console di file che Win10/11 x64 è disponibile,Nessun codice.Quindi la prima corsa per SmartScreen si fermerebbe. Corriamo prima. SHA256SUMS.txt Ancora una volta — questo passo è uno in cui nessuno tocca la versione “verde” che è circolato online.
Due versioni degli stessi parametri. Solo uno impostato sul retro del tutorial, Windows. python3 php2shell_audit.py Sostituire php2shell-audit.exe Fallo e basta.
Che succede?
python3 php2shell_audit.py --local
Farà quattro cose, una cosa:
- Trova PHP.:
/usr/bin/php*Non lo so./usr/sbin/php-fpm*Non lo so./opt/*Non lo so./usr/lib/php/*/sapi/*L'omelia conta anche. Finestre, guarda.C:\phpPHP sotto XAMPP, WAMP, Laragon, Chocolatey, Scoop, File di programma. - Leggi la versione: Correre
php -vPrendere Banner, con 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12. - Controllare la configurazione: l'analisi delle istruzioni di mitigazione provvisoria in php.ini.
- Processo di colonna: elencare tutte le opere che devono essere riavviate dopo la patch.
Ho investito una macchina senza PHP. Ecco l'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.
Guarda l'ultima riga:Nessun PHP è UNKNOWN, nessun PASS.Questo design è molto ben riconosciuto -- non c'è problema nel trovare nulla. Sono due cose diverse.
A proposito, e' collegato. expose_php Tutti. Questo non ha niente a che fare con la scappatoia stessa, ma è una decisione diretta sul fatto che una scansione remota possa leggere il tuo numero di versione.Spegnilo. Le impronte dell'aggressore sono mezza cieca.Non lo so. Certo, non si chiama riparazione, si chiama ridurre l'esposizione alle informazioni.
III. Parametri
| Parametri | Role | Predefinito |
|---|---|---|
--local / --remote | Due o uno, decidiamo di controllare la macchina o il bersaglio. | Obbligo |
--file targets.txt | Batch target, uno in una riga, # avviare con il commento | Nessuno |
--workers N | Numero di corsi concorrenti a lungo termine | 10 |
--json report.json | Uscita completa JSON,- Colpo a stdout | Nessuno |
--timeout N | Singola richiesta timeout (sec) | 8 |
--insecure | Salta la verifica TLS, solo per le impronte digitali | Chiudi |
Codice di uscita: diretto al punto della carta CI
| Codice di uscita | Significato |
|---|---|
0 | Nessuna versione interessata trovata |
2 | Almeno una versione interessata è stata trovata. |
1 | Errore sullo strumento stesso (es. JSON non può scrivere) |
Basta numero due, questo è il punto.Significa che si può mettere nella linea di flusso, spazzare attraverso la fase di costruzione, colpire, e non aspettare che gli esseri umani per trovarlo.
iv. Traslocare da remoto: – rimuovere come
# 单个目标
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
Cosa? Scrivere
# production fleet
example.com
https://shop.example.net
10.0.0.5:8080
# Inizia con una nota, una linea, una nel magazzino targets.example.txt Può essere copiato direttamente.
Cosa ha mandato?
Ogni gol.Invia solo una richiesta HEAD, solo una volta il server respingerà HeAD. E leggilo. Server:Non lo so.X-Powered-By: e Set-CookieVattene. PHP/x.y.zNon lo so.
Nessun multipart, nessun corpo grande, nessun OOM, nessun uso-dopo-free.Morì nella nota di origine come costrizione progettuale.Non è casuale.
Il prezzo deve essere chiaro:La modalità remota non dimostra l'usabilitàPuò solo segnalare le informazioni che il server sputa volontariamente. Nascondi l'obiettivo del numero di versione e il risultato sarà sempre UNKNOWN.
V. Come leggere le conclusioni
[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
- [VULNERABILE] La versione è stata letta e inferiore alla versione restaurata.
- [PASS] La versione è stata letta ed è maggiore o uguale alla versione restaurata.
- [ATTENZIONE] Le istruzioni di mitigazione provvisoria non sono state impostate come suggerito.
- [UNKNOWN] Prove insufficienti.Non sicuro, non noto.
Questa distinzione è dove l'intero strumento è più prezioso. La maggior parte degli scanner ti dà solo rosso, giallo e verde, e poi pensi che sia tutto sullo schermo.UNKNOWN deve essere consideratoSpegnere la versione nascosta, eseguire nel contenitore - locale, o accedere alla macchina.
Sei, quattro pozzi, uno in piu' dell'altro.
Pipa 1: UNKNOWN ∞ Clear
L'host che ha nascosto il numero di versione riporta sempre UNKNOWN. Assicurati che sia solo sul mainframe. --localNon lo so.
Pocket 2: Il rilascio è errato.
Debian / Ubuntu / RHEL / Alpine chiama regolarmente nelle patch di sicurezza maNon saltare il numero di versioneNon lo so. Il risultato è la macchina completata, come appare.
Quindi non farti prendere dal panico finche' non vedi il rosso.
apt changelog php8.4
rpm -q --changelog php-8.4 | head -50
Questo passo, o il fallimento di farlo, non sarebbe altro che un'escalation; sarebbe anche un errore di calcolo, che è il vero bisogno di un aggiornamento.
Pit 3: Viene richiesto anche un HEAD
Sarà nel registro dell'altro, e sarà scritto dal WAF. Lo scambio senza autorizzazione scritta è per natura un rilevamento non autorizzato - una legge come la CFAA, la CMA del Regno Unito 1990.
Mi servira' l'autorizzazione per ripulire i beni della mia societa'.In particolare, account cross-sectoral, cross-sub-company, basati su cloud. Non pensare, "guardo solo una testa di risposta" non conta.
Pocket 4:-local controlla solo la macchina.
PHP funziona nel contenitore, funziona nel contenitore, o lo utilizza sull'host. --remote Il porto che e' stato incastrato. L'ospite corre. --local Se non riesci a trovare il PHP nel contenitore, otterrai un UNKNOWN -- l'UNKNOWN davvero non lo sa, non il contenitore è sicuro.
Sette, scopri che c'è un problema, allora cosa?
Patching è l'unica riparazione completa.Tutto il resto sta sanguinando.
# Debian / Ubuntu
sudo apt update && sudo apt install --only-upgrade php
# RHEL / Fedora
sudo dnf upgrade 'php*'
# Alpine
sudo apk upgrade php83 php84
Aggiornamento: 8.2 ramo a 8.2.358.3 a 8.3.36Sono le 8.4. 8.4.27Sono le 8.5. 8.5.12Non lo so. 8.1 e oltre, solo rapporto di livello sorgente.
Se non riesci ad avere un cerotto, fai questi prima, poi ricomincia da capo.
; 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=0Per essere scritto in php.ini, FPM o configurazione server,Deve essere efficace prima della richiesta.Non lo so. E' troppo tardi.memory_limit=-1Ne ho bisogno.php_admin_valueL'impostazione di livello di tali applicazioni è invariata, assicurando al contempo che non vi sia alcuna applicazione pool/ directory per ripristinare il valore limitato.- Non utilizzare i dati RLIMIT AS o RLIMIT- Quei due faranno fallire la mappa e rientreranno in quel pericoloso lungo sentiero.
- Il cambiamento deve riavviare ogni lavoratore:
systemctl restart php*-fpm apache2 nginxNon lo so.Nessun riavvio non è un cambiamento.
Nessuno di questi quattro può farti al sicuro, e le autorità stesse sono abbastanza chiare. Hanno un solo valore:Prima di ripararlo, copri la porta.
VIII. Una sequenza completa
- Prima controllati.:
--localTre o cinque secondi, vedere la versione e la configurazione. - Spazzola a lotto remotoE' un grosso problema.
--remote --fileE scappa, da JSON. - Processo di classificazione:VULNERABLE upgrade, WARNING replenishment, UNKNOWN identificazione --Non è chiuso, va fatto.
- Aggiornamento + Riavviare il Worker: Patches, e poi riavviare tutte le FPM/ Apache/ nginx.
- Autenticazione delle pecore: Correre di nuovo, confermare verde. Guarda l'errore backport e guarda il changelog se necessario.
- Sali sulla linea dell'acqua.: Quit Code 2 Costruzione fallita diretta, e la prossima volta nessuno ricorderà.
L'intero processo è di dieci minuti, e il tempo reale è il terzo passo.Controlla le linee UNKNOWN.Non lo so. Ma questo non lo salvera', perche' saltarlo, hai un rapporto piuttosto falso e verde.
Il valore dello scanner non ti dà luci verdi, ti costringe ad ammettere dove non sai davvero.
Riproduci l'indirizzo del progetto:Gythub.com/viviviopenclaw-code/php2shell-uditNon lo so. Leggi DISSLAIMER.md prima che sia scritto in cinese.
Ultima frase mi ricorda che questo strumento è 1.1.0 oggi, la prima versione pubblica, una singola forcella zero, un piccolo numero di codici, è possibile leggerli tutti. php2shell_audit.pyNon lo so.Guarda il codice sorgente., soprattutto se si desidera leggere il php.ini e l'elenco di processo con il permesso dell'amministratore.