php2shell- audit felt: Windows bruger exe, Linux, py, 10 minutter til at finde ud af PHP.
Det handler ikke om bøjer. Det handler om bank:Læsseværktøj, løbemaskiner, rengøring af mål, læseresultater, afgørelse af, om plasteret skal anbringes eller ejEn drage. Ti minutter til slut.
For det første er CVE- 2026- 109618 og CVE- 2026- 109619 uautoriserede RCE for selve PHP-motoren, den officielle restaurerede version er 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12. To sæt kaliber...PHP officielle CVSS 4.0 beat 9.2, NVD CVSS 3.1 beat 9.89.8 i titlen er det sidste, og begge refererer til det samme to-til-et smuthul, ikke at tro det er anderledes.
Her er værktøjerne:Vivipenclaw- kode / php2shell- udApache- 2.0, lige i dag. Det gør to ting: kontrollere, hvad PHP 'er er installeret på denne maskine, feje den uopdagede version af den far- off storm.Det angriber ikke trafikken, ikke skriver diske, ikke ændrer nogen konfiguration.Og det er hvad jeg har tjekket i kildekoden, og fjernbetjeningen sender kun én HEAD anmodning om et svar hoved.
To måder at se, hvilket system du er i.
Linux / MacOS gå Python, nul afhængighed, standard bibliotek er nok, ingen pip til at indlæse noget:
git clone https://github.com/viviopenclaw-code/php2shell-audit.git
cd php2shell-audit
chmod +x php2shell_audit.py
python3 php2shell_audit.py --local
Windows går direkte til exe, uden Python. Grab på udgivelsesside php2shell-audit.exe:
certutil -hashfile php2shell-audit.exe SHA256
php2shell-audit.exe --local
Exe er et enkelt filkonsol program, som Win10 / 11 x64 er tilgængelig,Ingen kode signatur.Så det første løb for SmartScreen ville stoppe. Lad os løbe først. SHA256SUMS.txt Igen - dette skridt er et skridt, hvor ingen rører den "grønne" version, der bliver cirkuleret online.
To versioner af de samme parametre. Kun et sæt på bagsiden af tutorial, Windows. python3 php2shell_audit.py Erstat php2shell-audit.exe Bare gør det.
Hvad sker der?
python3 php2shell_audit.py --local
Det vil gøre fire ting:
- Find PHP.:
/usr/bin/php*Det ved jeg ikke./usr/sbin/php-fpm*Det ved jeg ikke./opt/*Det ved jeg ikke./usr/lib/php/*/sapi/*Homebrew tæller også. Windows, tjek det ud.C:\phpPHP under XAMPP, WAMP, Laragon, Chocolatey, Scoop, Programfiler. - Læs version: Kør
php -vTag Banner med 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12. - Markér indstilling: fortolkning af de midlertidige afbødende instrukser i php.ini.
- Kolonneproces: liste over alle de værker, der skal genstartes efter plasteret.
Jeg kørte over en maskine uden en PHP. Her er 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.
Se den sidste linje:Ingen PHP det er ukendt, ingen pass.Dette design er meget velanerkendt -- der er intet problem med at finde noget. Det er to forskellige ting.
Forresten, det er forbundet. expose_php Dem alle sammen. Denne har intet at gøre med selve smuthullet, men det er en direkte beslutning om, hvorvidt en fjernscanning kan læse dit versionsnummer.Sluk for det. Gerningsmandens fingeraftryk er halvblinde.Det ved jeg ikke. Det kaldes selvfølgelig ikke reparation, men reduktion af informationseksponeringen.
III. Parametre
| Parametre | Rolle | Standard |
|---|---|---|
--local / --remote | To eller en, vi beslutter at tjekke maskinen eller målet. | Krævet |
--file targets.txt | Batch mål, en i én række, # start med kommentar | Ingen |
--workers N | Antal samtidige kurser på længere sigt | 10 |
--json report.json | Output komplet JSON,- Hit til stdout | Ingen |
--timeout N | Enkelt anmodning timeout (sek) | 8 |
--insecure | Skip TLS-verifikation, kun for fingeraftryk | Luk |
Afslut kode: direkte til CI-kortpunktet
| Udgangskode | Betydning |
|---|---|
0 | Ingen påvirket version fundet |
2 | Mindst én berørt version blev fundet. |
1 | Fejl på selve værktøjet (f. eks. JSON kan ikke skrive) |
Stop nummer to, det er pointen.Det betyder, at du kan sætte det i flow line, feje det gennem byggeriet fase, ramte det, og ikke vente på mennesker til at finde det.
iv. Svedende fjernbetjening: -fjernbetjening hvordan
# 单个目标
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
Hvad? Skriv
# production fleet
example.com
https://shop.example.net
10.0.0.5:8080
Start med en seddel, en linje, en i lageret targets.example.txt Den kan kopieres direkte.
Hvad sendte den?
Hvert mål.Send kun én HEAD anmodning, kun én gang vil serveren afvise HeAD. Og læs det. Server:Det ved jeg ikke.X-Powered-By: og Set-CookieKom ud derfra. PHP/x.y.zDet ved jeg ikke.
Ingen multipart, ingen stor krop, ingen OOM, ingen brug-efter-fri.Det døde i kildenoten som en designbegrænsning.Det er ikke tilfældigt.
Prisen skal være klar:Fjernbetjening viser ikke brugbarhedDen kan kun rapportere oplysninger, som serveren frivilligt spytter ud. Skjul versionsnummerets mål, og resultatet vil altid være UNKNOWN.
V. Hvordan man læser konklusionerne
[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
- [VULNERABLE] Den version blev læst og lavere end den gendannede version.
- [PASS] Versionen blev læst og er større end eller lig med den gendannede version.
- [ADVARSEL] De midlertidige afbødende instrukser blev ikke fastsat som foreslået.
- [UNKNOWN] Utilstrækkelige beviser.Ikke sikkert, ikke kendt.
Denne skelnen er, hvor hele værktøjet er mest værdifuldt. De fleste scannere giver dig kun rød, gul og grøn, og så tror du, det hele er på skærmen.UNKNOWN skal betragtes som to- doEnten sluk for den skjulte version, kør i beholderen -- lokal, eller log på maskinen.
Seks, fire huller, en mere end den anden.
Pipe 1: UNKNOWN ≠ Clear
Værten der gemte versionsnummeret vil altid rapportere UNKNOWN. Bare sørg for, at det kun er på mainframen. --localDet ved jeg ikke.
Pocket 2: Udgivelsen er fejlrapporteret.
Debian / Ubuntu / RHEL / Alpine indkalder regelmæssigt sikkerhedsrettelser, menGå ikke versionsnummerDet ved jeg ikke. Resultatet er den færdige maskine, som det ser ud.
Så gå ikke i panik, før du ser den røde.
apt changelog php8.4
rpm -q --changelog php-8.4 | head -50
Dette skridt, eller ikke at gøre det, ville ikke være andet end en eskalation; det ville også være en fejlberegning, som er det virkelige behov for en opgradering.
Pit 3: Der anmodes også om et HEAD
Det vil være i hinandens log, og det vil blive skrevet ned af WAF. At feje uden en skriftlig tilladelse er af natur en uautoriseret opdagelse - en lov som CFAA, UK CMA 1990.
Jeg skal bruge tilladelse til at rydde op i mit firmas aktiver.Især tværsektorielle, tværsektorielle, multikulturelle konti. Tænk ikke, "Jeg kigger bare på et svarhoved" tæller ikke.
Pocket 4: -Lokal kun kontrollere maskinen.
PHP kører i beholderen, kører i beholderen, eller bruger det på værten. --remote Havnen, der blev kortlagt. Værten løber. --local Hvis du ikke kan finde PHP i beholderen, vil du få en UNKNOWN -- UNKNOWN virkelig ikke ved, ikke beholderen er sikker.
Find ud af, der er et problem.
Patching er den eneste komplette reparation.Resten bløder.
# Debian / Ubuntu
sudo apt update && sudo apt install --only-upgrade php
# RHEL / Fedora
sudo dnf upgrade 'php*'
# Alpine
sudo apk upgrade php83 php84
Opgradering: 8.2 gren til 8.2.358, 3 til 8.3.36Det er 8,4. 8.4.27Det er 8,5. 8.5.12Det ved jeg ikke. 8.1 og videre, kun kildeniveau rapport.
Hvis du ikke kan få et plaster, så gør det først, og start forfra.
; 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=0Skal skrives i php.ini, FPM værktøj eller server konfiguration,Den skal være effektiv før anmodningen.Det ved jeg ikke. Det er for sent.memory_limit=-1Jeg har brug for det.php_admin_valueNiveauindstillingen af sådanne applikationer er uændret, samtidig med at det sikres, at der ikke er nogen pool / mappe / program til at genoprette den begrænsede værdi.- Brug aldrig RLIMIT AS eller RLIMIT DATA- De to vil få Kort til at fejle og bare vende tilbage til den farlige longjmp sti.
- Ændringer skal genstarte alle arbejdstagere:
systemctl restart php*-fpm apache2 nginxDet ved jeg ikke.Ingen genstart er ingen forandring.
Ingen af disse fire kan gøre dig sikker, og myndighederne selv er helt klar. De har kun én værdi:Før du lapper den, så dæk døren.
VIII. En komplet sekvens
- Tjek dig selv først.:
--localTre eller fem sekunder, se version og konfiguration. - Fjerngennemsøgning af batchDet er vigtigt.
--remote --fileOg løb, ud af JSON. - Klassificeringsbehandling: VULNERABLE opgradering, Warry genopfyldning, UNKNOWN identifikation --Det er ikke lukket, det skal gøres.
- Opgradering + genstart arbejder: Patches, og derefter genstarte alle FPM / Apache / nginx.
- Nulstil godkendelseLøbe igen, bekræfte grøn. Se backport fejl og se changelog om nødvendigt.
- Ind i vandledningen.: Afslut kode 2 Direkte mislykkes konstruktion, og næste gang ingen vil huske.
Hele processen er 10 minutter, og den virkelige tid er det tredje skridt.Tjek UNKNOWN linjerne.Det ved jeg ikke. Men det vil ikke redde det, for hvis du springer over, får du en smuk, falsk, grøn rapport.
Scanneren giver dig ikke grønt lys, den tvinger dig til at indrømme, hvor du ikke ved det.
Genafspil projektadressen:Gythub.com / viviopenclaw- code / php2shell- uditDet ved jeg ikke. Læs DISSLAIMER.md før det er skrevet på kinesisk.
Sidste sætning minder mig om, at dette værktøj er 1.1.0 i dag, den første offentlige version, en enkelt nul gaffel, et lille antal koder, kan du læse dem alle. php2shell_audit.pyDet ved jeg ikke.Se kildekoden., især hvis du ønsker at læse php.ini og proceslisten med administrator tilladelse.