← Înapoi la listă

php2shell-audit domeniu: Windows utilizează exe, Linux, py, 10 minute pentru a da seama PHP.

itadol5j

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.

efecte terminale php2shell-udit

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.

Metode de instalare Linux și Windows

Ce se întâmplă?

python3 php2shell_audit.py --local

Va face patru lucruri, un lucru:

  1. 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.
  2. Citiți versiunea: Fugi php -v Ia Banner, cu 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12.
  3. Configurare verificare: conform instrucţiunilor de atenuare interimară din php.ini.
  4. 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

php2shell-udit argument prezentare
ParametriiRolImplicit
--local / --remoteDoi sau unu, decidem să verificăm maşina sau ţinta.Necesar
--file targets.txtLot țintă, unul într-un rând, # începe cu comentariuNiciuna
--workers NNumărul de cicluri concomitente pe termen lung10
--json report.jsonIeșire completă JSON,- Hit to stdoutNiciuna
--timeout NPauză de cerere unică (sec)8
--insecureOmite verificarea TLS, numai pentru amprenteÎnchide

Codul de ieșire: direct la punctul de card CI

Codul de ieșireSemnificație
0Nicio versiune afectată găsită
2Cel puțin o versiune afectată a fost găsită.
1Eroare 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

Semnificația celor trei concluzii
[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ă.

Patru note folosind php2shell-udit

Ţ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=0 Pentru 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=-1 Am nevoie de ea. php_admin_value Setarea 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ă

  1. Verifică-te mai întâi.:--localTrei sau cinci secunde, a se vedea versiunea și configurația.
  2. Verificarea la distanță a lotuluiE mare lucru.--remote --file Şi fugi, afară din JSON.
  3. Prelucrarea clasificării:Upgrade vulnerabil, realimentare de alertă, identificare necunoscut -Nu e închis, e de făcut.
  4. Actualizare + Repornire lucrător: Patches, and then reporn all FPM/ Apache/ nginx.
  5. Retransmite autentificareaRun din nou, confirma verde. Uita-te la eroarea backport și urmăriți Changelog, dacă este necesar.
  6. 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.