← Terug naar overzicht

php2shell-audit veld: Windows gebruikt exe, Linux, py, 10 minuten om PHP uit te zoeken.

itadol5j

Het gaat niet om bochten. Het draait allemaal om kloppen:Laadgereedschappen, loopmachines, reinigingsdoelen, leesconclusies, besluit al dan niet te patchenEen draak. Nog tien minuten.

Ten eerste, CVE-2026-109618 en CVE-2026-109619 zijn onbevoegd RCE voor de PHP-motor zelf, de officiële gerestaureerde versie is 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12. Twee sets kaliber...PHP officiële CVSS 4.0 beat 9.2, NVD CVSS 3.1 beat 9.89,8 in de titel is de laatste, en beide verwijzen naar dezelfde twee-op-één maas, niet om te denken dat het anders is.

Hier zijn de instrumenten:Vivipenclaw-code/php2shell-uditApache-2, vandaag nog. Het doet twee dingen: controleer welke PHP's zijn geïnstalleerd op deze machine, veeg de onontdekte versie van de verre storm.Het valt geen verkeer aan, schrijft geen schijven, verandert geen configuratie.En dat is wat ik heb gecontroleerd in de broncode, en de remote modus is eigenlijk maar één HEAD-verzoek sturen voor een antwoordkop.

php2shell-udit terminal draaiende effecten

Twee manieren om te zien in welk systeem je zit.

Linux / MacOS gaan Python, nul afhankelijkheid, standaardbibliotheek is genoeg, geen pip om iets te laden:

git clone https://github.com/viviopenclaw-code/php2shell-audit.git
cd php2shell-audit
chmod +x php2shell_audit.py
python3 php2shell_audit.py --local

Ramen gaan rechtstreeks naar de exe, zonder Python. Pak op release pagina php2shell-audit.exe:

certutil -hashfile php2shell-audit.exe SHA256
php2shell-audit.exe --local

Exe is een enkel bestand console programma dat Win10/11 x64 beschikbaar is,Geen code handtekening.Dus de eerste run voor SmartScreen zou stoppen. Laten we eerst rennen. SHA256SUMS.txt Wederom is deze stap is een waarin niemand raakt de

Twee versies van dezelfde parameters. Slechts één set aan de achterkant van de tutorial, Windows. python3 php2shell_audit.py Vervang php2shell-audit.exe Doe het gewoon.

Linux en Windows installatiemethoden

Wat is er aan de hand?

python3 php2shell_audit.py --local

Het zal vier dingen doen, één ding:

  1. Zoek PHP.:/usr/bin/php*Ik weet het niet./usr/sbin/php-fpm*Ik weet het niet./opt/*Ik weet het niet./usr/lib/php/*/sapi/*Homebrew telt ook. Ramen, kijk eens. C:\phpPHP onder XAMPP, WAMP, Laragon, Chocolatey, Scoop, Programmabestanden.
  2. Versie lezen: Run php -v Neem Banner, met 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12.
  3. Controleer configuratie: het verwerken van de tussentijdse mitigatie instructies in php.ini.
  4. Kolomproces: vermeld alle werken die na de pleister opnieuw gestart moeten worden.

Ik reed over een machine zonder PHP. Hier is de uitvoer:

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.

Let op de laatste regel:Geen PHP het is onbekend, geen pass.Dit ontwerp is zeer goed erkend -- er is geen probleem om iets te vinden. Het zijn twee verschillende dingen.

Trouwens, het is verbonden. expose_php Allemaal. Deze heeft niets te maken met de maas zelf, maar het is een directe beslissing of een remote scan uw versienummer kan lezen.Zet het uit. De vingerafdrukken van de aanvaller zijn half blind.Ik weet het niet. Natuurlijk heet het geen reparatie, het heet het verminderen van informatie blootstelling.

III. Parameters

php2shell-udit argumentoverzicht
ParametersRolStandaard
--local / --remoteTwee of één, we besluiten de machine of het doelwit te controleren.Vereist
--file targets.txtBatch doel, een op een rij, # start met commentaarGeen
--workers NAantal gelijktijdige cursussen op lange termijn10
--json report.jsonUitvoer volledige JSON,- Druk op stdoutGeen
--timeout NTijdslimiet voor eenmalig verzoek (sec)8
--insecureTLS-verificatie overslaan, alleen voor vingerafdrukkenSluiten

Exitcode: rechtstreeks naar het CI-kaartpunt

ExitcodeBetekenis
0Geen beïnvloede versie gevonden
2Er is tenminste één versie gevonden.
1Fout op het gereedschap zelf (bv. JSON kan niet schrijven)

Stop nummer twee, dit is het punt.Het betekent dat je het in de stroomlijn kunt zetten, het door de bouwfase kunt vegen, het raken, en niet wachten tot mensen het vinden.

iv. Afstand afvegen:

# 单个目标
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

Wat? Schrijven

# production fleet
example.com
https://shop.example.net
10.0.0.5:8080

Begin met een noot, één regel, één in het magazijn targets.example.txt Het kan direct gekopieerd worden.

Wat heeft het gestuurd?

Elk doel.Slechts één HEAD-verzoek versturen, slechts één keer zal de server HeAD weigeren. En lees het. Server:Ik weet het niet.X-Powered-By: en Set-CookieGa daar weg. PHP/x.y.zIk weet het niet.

Geen multi-part, geen groot lichaam, geen OOM, geen gebruik-na-vrij.Het stierf in de bronnotitie als een ontwerpbeperking.Het is niet willekeurig.

De prijs moet duidelijk zijn:Remote modus bewijst niet bruikbaarheidHet kan alleen informatie rapporteren dat de server vrijwillig spuwt. Verberg het doel van het versienummer en het resultaat zal altijd ONBEKEND zijn.

V. De conclusies lezen

Betekenis van de drie conclusies
[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
  • [KLAAR] De versie werd gelezen en lager dan de gerestaureerde versie.
  • [PASS] De versie werd gelezen en is groter dan of gelijk aan de herstelde versie.
  • [WARNING] De tussentijdse mitigatie-instructies werden niet vastgesteld zoals voorgesteld.
  • [Onbekend] Onvoldoende bewijs.Niet veilig, niet bekend.

Dit onderscheid is waar het hele gereedschap het meest waardevol is. De meeste scanners geven je alleen rood, geel en groen, en dan denk je dat het op het scherm staat.ONBEKEND moet als taak worden beschouwdOfwel zet u de verborgen versie uit, draai in de container -- lokaal, of log in op de machine.

Zes, vier pits, de ene meer dan de andere.

Vier noten met php2shell-udit

Pijp 1: ONBEKEND occidiostatica Helder

De host die het versienummer verborg zal altijd ONBEKEND rapporteren. Zorg ervoor dat het alleen op het mainframe staat. --localIk weet het niet.

Pocket 2: Loslaten wordt verkeerd gerapporteerd.

Debian / Ubuntu / RHEL / Alpine regelmatig oproepen in veiligheid patches, maarVersienummer niet springenIk weet het niet. Het resultaat is de voltooide machine, zoals het lijkt.

Dus geen paniek tot je de rode ziet.

apt changelog php8.4
rpm -q --changelog php-8.4 | head -50

Deze stap, of het niet doen, zou niets anders zijn dan een escalatie; het zou ook een misrekening zijn, dat is de werkelijke behoefte aan een upgrade.

Punt 3: Een HEAD wordt ook gevraagd

Het staat in elkaars logboek en wordt opgeschreven door WAF. Vegen zonder schriftelijke toestemming is van nature een ongeoorloofde opsporing - een wet zoals het CFAA, de UK CMA 1990.

Ik heb toestemming nodig om de activa van mijn bedrijf op te ruimen.Met name sectoroverschrijdende, cross-sub-company, cloud-gebaseerde accounts. Denk niet, "Ik kijk naar een antwoord hoofd" telt niet.

Zak 4:-lokaal alleen controleren van de machine.

PHP draait in de container, draait in de container, of gebruikt het op de gastheer. --remote De haven die in kaart was gebracht. De gastheer rent. --local Als je de PHP niet in de container kunt vinden, krijg je een ONBEKEND -- de ONBEKENDE weet het echt niet, niet de container is veilig.

Zeven, zoek uit dat er een probleem is, wat dan?

Patchen is de enige complete reparatie.De rest bloedt.

# 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 branch naar 8.2.358,3 tot 8.3.36Het is 8,4. 8.4.27Het is 8,5. 8.5.12Ik weet het niet. 8.1 en verder, alleen bronniveaurapport.

Als je geen pleister kunt krijgen, doe dit dan eerst en begin dan opnieuw.

; 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 Te schrijven in php.ini, FPM-tool of serverconfiguratie,Het moet vóór het verzoek effectief zijn.Ik weet het niet. Het is te laat.
  • memory_limit=-1 Ik heb het nodig. php_admin_value De niveauinstelling van dergelijke toepassingen is ongewijzigd, terwijl er geen pool/directory/applicatie is om de beperkte waarde te herstellen.
  • Gebruik nooit RLIMIT ALS of RLIMIT DATA- Die twee zullen Map laten falen... en gewoon dat gevaarlijke lange-jmp pad weer invoeren.
  • Verandering moet elke werknemer opnieuw starten:systemctl restart php*-fpm apache2 nginxIk weet het niet.Geen herstart is geen verandering.

Geen van deze vier kan je veilig maken, en de autoriteiten zelf zijn heel duidelijk. Ze hebben slechts één waarde:Voor je het oplapt, bedek de deur.

VIII. Een volledige reeks

  1. Controleer jezelf eerst.:--localDrie of vijf seconden, zie de versie en configuratie.
  2. Groep op afstand vegenHet is belangrijk.--remote --file En weglopen, uit JSON.
  3. Indeling:VULNERABLE upgrade, ATTENTIE-aanvulling, onbekende identificatie --Het is niet gesloten, het moet gebeuren.
  4. Upgrade + Herstart werker: Patches, en herstart dan alle FPM/Apache/nginx.
  5. Authenticatie resweep: Ren opnieuw, bevestig groen. Bekijk de backportfout en bekijk changelog indien nodig.
  6. Stap in de waterleiding.: Stop Code 2 Directe mislukking constructie, en de volgende keer zal niemand zich herinneren.

Het hele proces duurt tien minuten en de echte tijd is de derde stap.Controleer de onbekende lijnen.Ik weet het niet. Maar dat gaat het niet redden, want als je het overslaat, krijg je een mooi, nep, groen rapport.

De waarde van de scanner geeft je geen groen licht, het dwingt je toe te geven waar je niet echt weet.

Het projectadres opnieuw afspelen:Gythub.com/viviopenclaw-code/php2shell-uditIk weet het niet. Lees DISLAIMER.md voordat het in het Chinees wordt geschreven.

De laatste zin herinnert me eraan dat deze tool vandaag 1.1.0 is, de eerste publieke versie, een enkele nul vork, een klein aantal codes, je kunt ze allemaal lezen. php2shell_audit.pyIk weet het niet.Kijk naar de broncode., vooral als je de php.ini en de proceslijst wilt lezen met toestemming van de beheerder.