php2shell-audit fält: Windows använder exe, Linux, py, 10 minuter för att räkna ut PHP.
Det handlar inte om böjningar. Allt handlar om knackar:Ladda verktyg, körmaskiner, rengöringsmål, läsa slutsatser, bestämma om du ska patchaEn drake. Tio minuter att avsluta.
För det första är CVE-2026-109618 och CVE-2026-109619 obehörig RCE för PHP-motorn själv, den officiella restaurerade versionen är 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12. Två uppsättningar kaliber...PHP officiella CVSS 4.0 slå 9.2, NVD CVSS 3.1 slå 9.89.8 i titeln är den senare, och båda hänvisar till samma två till ett kryphål, för att inte tro att det är annorlunda.
Här är verktygen:Vivipenclaw-kod/php2shell-uditApache-2.0, bara idag. Det gör två saker: kontrollera vad PHP installeras på denna maskin, sopa den oupptäckta versionen av avlägsen storm.Det attackerar inte trafiken, skriver inte skivor, ändrar inte någon konfiguration.Och det är vad jag har kontrollerat i källkoden, och fjärrläget skickar egentligen bara en HEAD-begäran för ett svarshuvud.
DIFTING: Två sätt att se vilket system du är i.
Linux / MacOS go Python, noll beroende, standardbibliotek är tillräckligt, ingen pip för att ladda något:
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 direkt till exe, utan Python. Grab på release page php2shell-audit.exeFrån:
certutil -hashfile php2shell-audit.exe SHA256
php2shell-audit.exe --local
Exe är ett enda filkonsolprogram som Win10/11 x64 är tillgängligt,Ingen kodsignatur.Den första körningen för SmartScreen skulle sluta. Låt oss springa först. SHA256SUMS.txt Återigen - detta steg är en där ingen rör den gröna versionen som cirkuleras online.
Två versioner av samma parametrar. Endast en inställning på baksidan av handledningen, Windows. python3 php2shell_audit.py Ersätt php2shell-audit.exe Gör det bara.
Vad händer?
python3 php2shell_audit.py --local
Det kommer att göra fyra saker, en sak:
- Hitta PHP.Från:
/usr/bin/php*Jag vet inte./usr/sbin/php-fpm*Jag vet inte./opt/*Jag vet inte./usr/lib/php/*/sapi/*Homebrew räknas också. Windows, kolla in det.C:\phpPHP under XAMPP, WAMP, Laragon, Chocolatey, Scoop, Programfiler. - Läs VersionKör
php -vTa Banner, med 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12. - Kontrollera konfigurationParsing interim mitigation instruktioner i php.ini.
- KolumnprocessLista alla verk som måste startas om efter plåstret.
Jag sprang över en maskin utan en PHP. Här är 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.
Titta på sista raden:Ingen PHP är UNKNOWN, ingen PASS.Denna design är mycket välkänd - det finns inga problem med att hitta något. Det är två olika saker.
Förresten är det anslutet. expose_php Alla. Den här har ingenting att göra med kryphålet själv, men det är ett direkt beslut om huruvida en fjärrskanning kan läsa ditt versionsnummer.Stäng av den. Angriparens fingeravtryck är halvblinda.Jag vet inte. Naturligtvis kallas det inte reparation, det kallas att minska informationsexponeringen.
III. Parametrar
| Parametrar | Rollen | Standard |
|---|---|---|
--local / --remote | Två eller ett beslutar vi att kontrollera maskinen eller målet. | Krav |
--file targets.txt | Batch mål, en i rad, # börja med kommentar | Ingen |
--workers N | Antal långsiktiga samtidiga kurser | 10 |
--json report.json | Utgång komplett JSON,- Hit till stdout | Ingen |
--timeout N | Enkel begäran timeout (sec) | 8 |
--insecure | Hoppa över TLS-verifiering, endast för fingeravtryck | Nära |
Exit code: direkt till CI-kortpunkten
| Exit Code | Betydelse |
|---|---|
0 | Ingen påverkad version hittades |
2 | Minst en påverkad version hittades. |
1 | Fel på själva verktyget (t.ex. JSON kan inte skriva) |
Avsluta nummer två, detta är poängen.Det betyder att du kan sätta den i flödeslinjen, sopa den genom byggfasen, slå den och vänta inte på att människor ska hitta den.
Iv. Sweeping fjärrkontroll: -fjärrkontroll
# 单个目标
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
Vad? Skriv
# production fleet
example.com
https://shop.example.net
10.0.0.5:8080
# Börja med en anteckning, en linje, en i lagret targets.example.txt Det kan kopieras direkt.
Vad skickade den?
Varje mål.Skicka endast en HEAD-begäranEndast en gång kommer servern att avvisa HeAD. Och läs den. Server:Jag vet inte.X-Powered-By: och Set-CookieFå därifrån. PHP/x.y.zJag vet inte.
Ingen multipart, ingen stor kropp, ingen OOM, ingen användning efter fri.Det dog i källnoten som en designbegränsning.Det är inte random.
Priset måste vara klart:Fjärrläge visar inte användbarhetDet kan bara rapportera information som servern frivilligt spottar ut. Dölj versionsnumrets mål och resultatet blir alltid UNKNOWN.
V. Hur man läser slutsatserna
[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] Versionen lästes och lägre än den återställda versionen.
- [PASS] Versionen lästes och är större än eller lika med den restaurerade versionen.
- [VARNING] Interimsbegränsningsinstruktionerna fastställdes inte som föreslagna.
- [OKNU] Otillräckliga bevis.Inte säker, inte känd.
Denna distinktion är där hela verktyget är mest värdefullt. De flesta skannrar ger dig bara rött, gult och grönt, och då tror du att det är över hela skärmen.UNKNOWN måste anses varaAntingen stäng av den dolda versionen, kör i behållaren - lokal eller logga in på maskinen.
Sex, fyra gropar, en mer än den andra.
Pipe 1: UNKNOWN Clear
Den värd som gömde versionsnumret kommer alltid att rapportera UNKNOWN. Se bara till att det bara är på huvudramen. --localJag vet inte.
Pocket 2: Release rapporteras felaktigt.
Debian / Ubuntu / RHEL / Alpine ringer regelbundet i säkerhetsfläckar menHoppa inte versionsnummerJag vet inte. Resultatet är den färdiga maskinen, som den verkar.
Inte panik förrän du ser det röda.
apt changelog php8.4
rpm -q --changelog php-8.4 | head -50
Detta steg, eller misslyckande att göra det, skulle inte vara något annat än en upptrappning, det skulle också vara en felberäkning, vilket är det verkliga behovet av en uppgradering.
Pit 3: En HEAD begärs också
Det kommer att finnas i varandras logg, och det kommer att skrivas ner av WAF. Att sopa utan skriftligt tillstånd är till sin natur en obehörig upptäckt - en lag som CFAA, UK CMA 1990.
Jag behöver tillstånd att städa upp mitt företags tillgångar.I synnerhet sektorsövergripande, tvärsub-företag, molnbaserade konton. Tänk inte, "Jag tittar bara på ett svar huvud" räknas inte.
Pocket 4:- Lokalt kontrollera bara maskinen.
PHP körs i behållaren, körs i behållaren eller använder den på värden. --remote Hamnen som kartlades ut. Värden löper. --local Om du inte kan hitta PHP i behållaren får du en UNKNOWN - UNKNOWN vet inte, inte behållaren är säker.
Sju, ta reda på att det finns ett problem, vad?
Patchning är den enda kompletta reparationen.Allt annat är blödning.
# Debian / Ubuntu
sudo apt update && sudo apt install --only-upgrade php
# RHEL / Fedora
sudo dnf upgrade 'php*'
# Alpine
sudo apk upgrade php83 php84
Uppgradera: 8.2 gren till 8.2.358.3 till 8.3.36Det är 8.4. 8.4.27Det är 8,5. 8.5.12Jag vet inte. 8.1 och bortom, endast källnivårapport.
Om du inte kan få ett lapp, gör det först, börja sedan igen.
; 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=0Skrivs i php.ini, FPM-verktyg eller serverkonfiguration,Det måste vara effektivt innan begäran.Jag vet inte. Det är för sent.memory_limit=-1Jag behöver det.php_admin_valueNivåinställningen för sådana applikationer är oförändrad, samtidigt som det säkerställs att det inte finns någon pool/katalog/applikation för att återställa det begränsade värdet.- Använd aldrig RLIMIT AS eller RLIMIT DATADe två kommer att göra kartan misslyckas och bara återinträda den farliga longjmp vägen.
- Förändring måste starta om varje arbetstagare:
systemctl restart php*-fpm apache2 nginxJag vet inte.Ingen omstart är ingen förändring.
Ingen av dessa fyra kan göra dig säker, och myndigheterna själva är ganska tydliga. De har bara ett värde:Innan du patch det, täck dörren.
VIII. En komplett sekvens
- Kontrollera dig först.Från:
--localTre eller fem sekunder, se versionen och konfigurationen. - Remote batch sweepDet är en stor sak.
--remote --fileOch spring, från JSON. - KlassificeringsbehandlingVULNERABLE uppgradering, WARNING replenishment, UNKNOWN-identifieringDet är inte stängt, det ska göras.
- Uppgradera + Restart WorkerPatches, och sedan starta om alla FPM / Apache / nginx.
- Resweep AuthenticationKör igen, bekräfta grönt. Titta på backport fel och titta på changelog om det behövs.
- Få i vattenlinjen.Avsluta kod 2 Direkt misslyckas konstruktion, och nästa gång kommer ingen ihåg.
Hela processen är tio minuter och realtid är det tredje steget.Kontrollera UNKNOWN-linjer.Jag vet inte. Men det kommer inte att spara det, för att hoppa över det får du en vacker, falsk, grön rapport.
Värdet på skannern ger dig inte gröna lampor, det tvingar dig att erkänna var du inte riktigt vet.
Replay projektadressen:Gythub.com/viviopenclaw-kod/php2shell-uditJag vet inte. Läs DISSLAIMER.md innan den är skriven på kinesiska.
Sista meningen påminner mig om att detta verktyg är 1.1.0 idag, den första offentliga versionen, en enda noll gaffel, ett litet antal koder, du kan läsa dem alla. php2shell_audit.pyJag vet inte.Titta på källkoden., särskilt om du vill läsa php.ini och processlistan med administratörstillstånd.