← Volver a la lista

campo php2shell-audit: Windows utiliza exe, Linux, py, 10 minutos para averiguar PHP.

itadol5j

No se trata de curvas. Todo se trata de golpes:Herramientas de carga, máquinas de funcionamiento, objetivos de limpieza, conclusiones de lectura, decidir si parche o noUn dragón. Diez minutos para terminar.

Primero, CVE-2026-109618 y CVE-2026-109619 son RCE no autorizados para el propio motor PHP, la versión oficial restaurada es 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12. Dos juegos de calibre...PHP CVSS 4.0 beat 9.2, NVD CVSS 3.1 beat 9.89.8 en el título es el último, y ambos se refieren a la misma laguna de dos a uno, para no pensar que es diferente.

Aquí están las herramientas:Código de Vivipenclaw/php2shell-uditApache-2.0, solo hoy. Hace dos cosas: comprueba qué PHP están instalados en esta máquina, barre la versión descubierta de la tormenta distante.No ataca el tráfico, no escribe discos, no cambia ninguna configuración.Y eso es lo que he comprobado en el código fuente, y el modo remoto sólo está enviando una solicitud HEAD para una cabeza de respuesta.

fp2shell-udit terminal efectos de funcionamiento

Dos maneras de ver en qué sistema estás.

Linux / MacOS go Python, dependencia cero, biblioteca estándar es suficiente, sin pip para cargar cualquier cosa:

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

Windows va directamente a la exe, sin Python. Agarra la página de lanzamiento php2shell-audit.exe:

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

Exe es un único programa de consola de archivos que Win10/11 x64 está disponible,No hay firma de código.Así que la primera carrera para SmartScreen se detendría. Vamos a correr primero. SHA256SUMS.txt Una vez más — este paso es uno en el que nadie toca la versión “verde” que se distribuye en línea.

Dos versiones de los mismos parámetros. Sólo un conjunto en la parte posterior del tutorial, Windows. python3 php2shell_audit.py Sustitución php2shell-audit.exe Hazlo.

Métodos de instalación de Linux y Windows

¿Qué está pasando?

python3 php2shell_audit.py --local

Hará cuatro cosas, una cosa:

  1. Busque PHP.:/usr/bin/php*No lo sé./usr/sbin/php-fpm*No lo sé./opt/*No lo sé./usr/lib/php/*/sapi/*Homebrew también cuenta. Windows, echa un vistazo. C:\phpPHP bajo XAMPP, WAMP, Laragon, Chocolatey, Scoop, Archivos de programa.
  2. VersiónCorre php -v Tome Banner, con 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12.
  3. Configuración de cheques: parsing the interim mitigation instructions in php.ini.
  4. Proceso de columna: lista todas las obras que deben ser reiniciadas después del parche.

Corrí sobre una máquina sin un PHP. Aquí está la salida:

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.

Mira la última línea:No PHP es UNKNOWN, no PASS.Este diseño es muy bien reconocido... no hay problema con encontrar nada. Son dos cosas diferentes.

Por cierto, está conectado. expose_php Todos. Este no tiene nada que ver con el agujero en sí mismo, pero es una decisión directa sobre si un escáner remoto puede leer su número de versión.Apágalo. Las huellas del agresor son medio ciegas.No lo sé. Por supuesto, no se llama reparación, se llama reducción de la exposición a la información.

III. Parámetros

vista general del argumento de php2shell-udit
ParámetrosFunciónDefault
--local / --remoteDos o uno, decidimos revisar la máquina o el objetivo.Necesidades
--file targets.txtBatch target, uno en una fila, # comienza con comentarioNinguno
--workers NNúmero de cursos simultáneos a largo plazo10
--json report.jsonProducto completo JSON,- Hit to stdoutNinguno
--timeout NPlazo de solicitud individual (segundo)8
--insecureSaltar verificación TLS, sólo para huellas dactilaresCerca

Código de salida: directo al punto de tarjeta CI

Código de salidaSignificado
0No se encontró ninguna versión afectada
2Al menos se encontró una versión afectada.
1Error en la propia herramienta (por ejemplo, JSON no puede escribir)

Quit número dos, este es el punto.Significa que puedes ponerla en la línea de flujo, barrerla a través de la fase de construcción, golpearla, y no esperar que los humanos lo encuentren.

iv. Errastre remoto: – Reduzca cómo

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

¿Qué? Escriba

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

# Empieza con una nota, una línea, una en el almacén targets.example.txt Se puede copiar directamente.

¿Qué envió?

Cada objetivo.Enviar sólo una petición HEAD, sólo una vez el servidor rechazará HeAD. Y lee. Server:No lo sé.X-Powered-By: y Set-CookieSal de ahí. PHP/x.y.zNo lo sé.

Sin multiparte, sin cuerpo grande, sin OOM, sin uso después.Murió en la nota fuente como una limitación de diseño.No es aleatorio.

El precio debe ser claro:El modo remoto no prueba usabilidadSólo puede reportar información que el servidor escupe voluntariamente. Ocultar el objetivo del número de versión, y el resultado siempre será UNKNOWN.

V. Cómo leer las conclusiones

Significado de las tres conclusiones
[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] La versión fue leída y inferior a la versión restaurada.
  • [PASS] La versión fue leída y es mayor o igual a la versión restaurada.
  • [WARNING] The interim mitigation instructions were not set as suggested.
  • [UNKNOWN] Insuficiente evidencia.No es seguro, no conocido.

Esta distinción es donde toda la herramienta es más valiosa. La mayoría de los escáneres sólo te dan rojo, amarillo y verde, y luego piensas que está por toda la pantalla.UNKNOWN debe ser consideradoO apagar la versión oculta, ejecutar en el contenedor -- local, o conectarse a la máquina.

Seis, cuatro fosos, uno más que el otro.

Cuatro notas usando php2shell-udit

Pipe 1: UNKNOWN ل Clear

El anfitrión que escondió el número de versión siempre reportará UNKNOWN. Sólo asegúrate de que sólo esté en el mainframe. --localNo lo sé.

La liberación es errónea.

Debian / Ubuntu / RHEL / Alpine llama regularmente en parches de seguridad peroNo saltar versión númeroNo lo sé. El resultado es la máquina completa, como parece.

Así que no entres en pánico hasta que veas el rojo.

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

Este paso, o no hacerlo, no sería más que una escalada; también sería una mal cálculo, que es la verdadera necesidad de una actualización.

Pit 3: A HEAD is also requested

Estarán en el registro del otro, y será escrito por WAF. Sweeping without a written authorization is by nature an unauthorized detection - a law such as the CFAA, the UK CMA 1990.

Necesito autorización para limpiar los activos de mi compañía.En particular, cuentas multisectoriales, de subempresas, basadas en la nube. No creas que "sólo estoy mirando una cabeza de respuesta" no cuenta.

Pocket 4:-local sólo comprobar la máquina.

PHP se ejecuta en el contenedor, se ejecuta en el contenedor, o lo utiliza en el host. --remote El puerto que fue mapeado. El anfitrión corre. --local Si no puedes encontrar el PHP en el contenedor, obtendrás un UNKNOWN -- el UNKNOWN realmente no lo sabe, no el contenedor es seguro.

Siete, averigua que hay un problema, ¿entonces qué?

Patching es la única reparación completa.Todo el resto está sangrando.

# Debian / Ubuntu
sudo apt update && sudo apt install --only-upgrade php

# RHEL / Fedora
sudo dnf upgrade 'php*'

# Alpine
sudo apk upgrade php83 php84

Actualización: 8.2 rama a 8.2.358.3 a 8.3.36Son las 8.4. 8.4.27Es 8.5. 8.5.12No lo sé. 8.1 y más allá del informe únicamente sobre el nivel de fuente.

Si no puedes conseguir un parche, haz esto primero, y luego empieza de nuevo.

; 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 Para ser escrito en php.ini, herramienta FPM o configuración del servidor,Debe ser eficaz antes de la solicitud.No lo sé. Es demasiado tarde.
  • memory_limit=-1 Lo necesito. php_admin_value La configuración de nivel de tales aplicaciones no se cambia, asegurando al mismo tiempo que no existe una aplicación de directorio/recomendador para restaurar el valor limitado.
  • Nunca use RLIMIT AS o RLIMIT DATA- Esos dos harán que Map falle y vuelva a entrar en ese peligroso camino de longjmp.
  • El cambio debe reiniciar a cada trabajador:systemctl restart php*-fpm apache2 nginxNo lo sé.Ningún reinicio no es cambio.

Ninguno de estos cuatro puede hacerlo seguro, y las propias autoridades están muy claras. Sólo tienen un valor:Antes de que lo parches, cubra la puerta.

VIII. Una secuencia completa

  1. Comprueba primero.:--localTres o cinco segundos, vea la versión y configuración.
  2. Barrido de lote remotoEs importante.--remote --file Y corre, fuera de JSON.
  3. Proceso de clasificación: Actualización útil, reposición de las amenazas, identificación de UNKNOWN...No está cerrado, debe hacerse.
  4. Actualización + reinicio: Patches, y luego reiniciar todo FPM/ Apache/ nginx.
  5. Resweep Authentication: Corre otra vez, confirma verde. Vea el error de backport y ver el cambio de registro si es necesario.
  6. Sube a la línea de agua.: Quit Code 2 Construcción de falla directa, y la próxima vez nadie recordará.

Todo el proceso es de diez minutos, y el tiempo real es el tercer paso.Revisa las líneas UNKNOWN.No lo sé. Pero eso no va a salvarlo, porque saltando, tienes un reporte bastante, falso y verde.

El valor del escáner no te da luces verdes, te obliga a admitir dónde no lo sabes.

Replay la dirección del proyecto:Gythub.com/viviopenclaw-code/php2shell-uditNo lo sé. Lea DISSLAIMER.md antes de que esté escrito en chino.

La última frase me recuerda que esta herramienta es 1.1.0 hoy, la primera versión pública, un solo tenedor cero, un pequeño número de códigos, puedes leerlos todos. php2shell_audit.pyNo lo sé.Mira el código fuente., especialmente si desea leer el php.ini y la lista de procesos con permiso de administrador.