php2shell-audit domeniu: Windows utilizează exe, Linux, py, 10 minute pentru a da seama PHP.
Nu e vorba de îndoituri. Totul se rezumă la lovituri:Unelte de încărcare, mașini de rulare, ținte de curățare, concluzii de citire, care decid dacă să patch-uri sau nuUn dragon. Zece minute pentru a termina.
În primul rând, CVE-2026-109618 și CVE-2026-109619 sunt RCE neautorizate pentru motorul PHP în sine, versiunea oficială restaurată este 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12. Două seturi de calibru...PHP oficial CVSS 4.0 bate 9.2, NVD CVSS 3.1 bate 9.89.8 în titlu este acesta din urmă, și ambele se referă la aceeași portiță de la doi la unu, să nu cred că este diferit.
Aici sunt instrumentele:Vivipenclaw-code/php2shell-uditApache-2.0, azi. Face două lucruri: verificați ce PHP-uri sunt instalate pe această mașină, măturați versiunea nedescoperită a furtunii îndepărtate.Nu atacă traficul, nu scrie discuri, nu schimbă nicio configurație.Și asta este ceea ce am verificat în codul sursă, și modul de la distanță este într-adevăr trimite doar o cerere cap pentru un cap de răspuns.
Două moduri de a vedea în ce sistem eşti.
Linux / MacOS merge Python, dependenta zero, biblioteca standard este de ajuns, nu pip pentru a încărca nimic:
git clone https://github.com/viviopenclaw-code/php2shell-audit.git
cd php2shell-audit
chmod +x php2shell_audit.py
python3 php2shell_audit.py --local
Ferestrele merg direct la exe, fără Python. Apucă pe pagina de lansare php2shell-audit.exe:
certutil -hashfile php2shell-audit.exe SHA256
php2shell-audit.exe --local
Exe este un program de consolă de fișiere pe care Win10/11 x64 este disponibil,Nicio semnătură de cod.Deci prima cursă pentru SmartScreen s-ar fi oprit. Să fugim mai întâi. SHA256SUMS.txt Încă o dată
Două versiuni ale aceloraşi parametri. Un singur set în spatele tutorialului, Windows. python3 php2shell_audit.py Înlocuiește php2shell-audit.exe Fă-o.
Ce se întâmplă?
python3 php2shell_audit.py --local
Va face patru lucruri, un lucru:
- Găseşte PHP.:
/usr/bin/php*Nu ştiu./usr/sbin/php-fpm*Nu ştiu./opt/*Nu ştiu./usr/lib/php/*/sapi/*Homebrew mai contează. Windows, verifică.C:\phpPHP sub XAMP, WAMP, Laragon, Chocolatey, Scoop, Program Files. - Citiți versiunea: Fugi
php -vIa Banner, cu 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12. - Configurare verificare: conform instrucţiunilor de atenuare interimară din php.ini.
- Proces de coloană: listaţi toate lucrările care trebuie reluate după plasture.
Am călcat o maşină fără un PHP. Iată ieşirea:
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.
Uita-te la ultima linie:Nu PHP este necunoscut, nu Pass.Acest design este foarte bine recunoscut -- nu este nicio problemă în a găsi ceva. Sunt două lucruri diferite.
Apropo, e conectat. expose_php Toate. Asta nu are nimic de-a face cu portiţa de scăpare în sine, dar este o decizie directă dacă o scanare la distanţă poate citi numărul versiunii.Opreşte-l. Amprentele atacatorului sunt pe jumătate oarbe.Nu ştiu. Desigur, nu se numeşte reparaţie, se numeşte reducerea expunerii la informaţii.
III. Parametrii
| Parametrii | Rol | Implicit |
|---|---|---|
--local / --remote | Doi sau unu, decidem să verificăm maşina sau ţinta. | Necesar |
--file targets.txt | Lot țintă, unul într-un rând, # începe cu comentariu | Niciuna |
--workers N | Numărul de cicluri concomitente pe termen lung | 10 |
--json report.json | Ieșire completă JSON,- Hit to stdout | Niciuna |
--timeout N | Pauză de cerere unică (sec) | 8 |
--insecure | Omite verificarea TLS, numai pentru amprente | Închide |
Codul de ieșire: direct la punctul de card CI
| Codul de ieșire | Semnificație |
|---|---|
0 | Nicio versiune afectată găsită |
2 | Cel puțin o versiune afectată a fost găsită. |
1 | Eroare la instrumentul în sine (de exemplu JSON nu poate scrie) |
Renunţă la numărul doi, asta e ideea.Aceasta înseamnă că puteți pune în linia de debit, matura-l prin faza de construcție, a lovit-o, și nu așteptați ca oamenii să-l găsească.
I. Profilare la distanţă:
# 单个目标
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
Ce? Scrie
# production fleet
example.com
https://shop.example.net
10.0.0.5:8080
Începe cu un bilet, o linie, una în depozit targets.example.txt Poate fi copiat direct.
Ce a trimis?
Fiecare gol.Trimite doar o cerere de cap, doar o singură dată va serverul respinge HeAD. Şi citeşte-o. Server:Nu ştiu.X-Powered-By: şi Set-CookiePleacă de acolo. PHP/x.y.zNu ştiu.
Fără mai multe părţi, fără corp mare, fără OOM, fără folos după.A murit în nota sursă ca o constrângere de proiectare.Nu e la întâmplare.
Preţul trebuie să fie clar:Modul distant nu dovedeste usabilitatePoate raporta doar informaţiile pe care serverul le scuipă voluntar. Ascunde tinta numarul versiunii, iar rezultatul va fi mereu UNKNOWN.
V. Cum se citesc concluziile
[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
- [Vulnerabil] Versiunea a fost citită și mai mică decât versiunea restaurată.
- [PASS] Versiunea a fost citită și este mai mare sau egală cu versiunea restaurată.
- [WARNING] Instrucțiunile interimare de atenuare nu au fost stabilite după cum s-a sugerat.
- [NUNKNOWN] Dovezi insuficiente.Nu sunt în siguranţă, nu sunt cunoscute.
Această distincție este în cazul în care întregul instrument este cel mai valoros. Majoritatea scanerelor îţi dau doar roşu, galben şi verde, şi apoi crezi că e peste tot pe ecran.NECUNOSCUT trebuie luat în considerareOri opriți versiunea ascunsă, alergați în container -- local, ori conectați-vă la mașină.
Şase, patru gropi, una mai mult decât cealaltă.
Ţeava 1: necunoscuţi
Gazda care a ascuns numărul versiunii va raporta întotdeauna UNKNOW. Asigură-te că e doar pe server. --localNu ştiu.
Pocket 2: Eliberarea este greşit raportată.
Debian / Ubuntu / RHEL / Alpine apeluri regulate în patch-uri de siguranță, darNu sari numărul versiuniiNu ştiu. Rezultatul este maşina completă, aşa cum se pare.
Aşa că nu intraţi în panică până nu vedeţi roşul.
apt changelog php8.4
rpm -q --changelog php-8.4 | head -50
Acest pas, sau incapacitatea de a face acest lucru, ar fi nimic altceva decât o escaladare; ar fi, de asemenea, un calcul greșit, care este adevărata nevoie de o actualizare.
Pit 3: Un cap este, de asemenea, solicitat
Va fi în jurnalul celuilalt, şi va fi scris de WAF. Măturarea fără o autorizație scrisă este, prin natura sa, o detectare neautorizată - o lege precum CFAA, UK CMA 1990.
Am nevoie de autorizaţie să curăţ bunurile companiei mele.În special, conturi intersectoriale, inter-sub-companie, bazate pe cloud. Nu te gândi, "Mă uit doar la un cap de răspuns" nu se pune.
Pocket 4:-local verifica doar aparatul.
PHP rulează în container, rulează în container sau îl folosește pe gazdă. --remote Portul care a fost cartografiat. Gazda fuge. --local Dacă nu puteți găsi PHP în container, veți obține un UNKNOW - UNKNOW într-adevăr nu știe, nu containerul este sigur.
Seven, află că e o problemă, apoi ce?
Peticirea e singura reparaţie completă.Restul sângerează.
# 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 ramură la 8.2.358,3 8.3.36E 8,4. 8.4.27E 8.5. 8.5.12Nu ştiu. 8.1 și dincolo de aceasta, numai raportul privind nivelul surselor.
Dacă nu puteți obține un plasture, faceți aceste mai întâi, apoi începeți din nou.
; 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=0Pentru a fi scris în php.ini, instrumentul FPM sau configurarea serverului,Trebuie să fie eficientă înainte de cerere.Nu ştiu. E prea târziu.memory_limit=-1Am nevoie de ea.php_admin_valueSetarea nivelului acestor aplicații este neschimbată, asigurându-se în același timp că nu există nicio aplicație pentru a restabili valoarea limitată.- Nu utilizaţi niciodată date RLIMIT AS sau RLIMIT- Ăştia doi vor face harta să eşueze şi vor reintra pe acea cale periculoasă.
- Schimbarea trebuie să repornească fiecare lucrător:
systemctl restart php*-fpm apache2 nginxNu ştiu.Nici o repornire nu este nici o schimbare.
Niciunul din cei patru nu te poate face în siguranţă, iar autorităţile însăşi sunt destul de clare. Au o singură valoare:Înainte să-l bandajaţi, acoperiţi uşa.
VIII. O secvenţă completă
- Verifică-te mai întâi.:
--localTrei sau cinci secunde, a se vedea versiunea și configurația. - Verificarea la distanță a lotuluiE mare lucru.
--remote --fileŞi fugi, afară din JSON. - Prelucrarea clasificării:Upgrade vulnerabil, realimentare de alertă, identificare necunoscut -Nu e închis, e de făcut.
- Actualizare + Repornire lucrător: Patches, and then reporn all FPM/ Apache/ nginx.
- Retransmite autentificareaRun din nou, confirma verde. Uita-te la eroarea backport și urmăriți Changelog, dacă este necesar.
- Treci în linia de apă.: Ieșiți Cod 2 Construcție eșuată directă, și data viitoare nimeni nu va aminti.
Întregul proces este de zece minute, iar timpul real este al treilea pas.Verifică liniile necunoscute.Nu ştiu. Dar asta nu-l va salva, pentru că dacă sari peste el, primeşti un raport frumos, fals şi verde.
Valoarea scanerului nu-ţi dă lumini verzi, te obligă să recunoşti unde nu ştii cu adevărat.
Redă adresa proiectului:Gythub.com/viviviopenclaw-code/php2shell-uditNu ştiu. Citeşte dislaimer.md înainte să fie scris în chineză.
Ultima propoziţie îmi aminteşte că acest instrument este 1.1.0 astăzi, prima versiune publică, o singură furculiţă zero, un număr mic de coduri, le puteţi citi pe toate. php2shell_audit.pyNu ştiu.Uită-te la codul sursă., mai ales dacă doriți să citiți php.ini și lista de proces cu permisiunea administratorului.