contenido
Puerta trasera compuesta de php.ini
Puerta trasera de PHP compuesta por archivos .user.ini
Implementación de serialización de PHP
Vulnerabilidad de deserialización de PHP
Todo bien. clase, clase
Puerta trasera
Puerta trasera compuesta de php.ini
利用 auto_prepend_file 和 include_path
Puerta trasera de PHP compuesta por archivos .user.ini
.user.ini se ejecuta en todos los servidores que ejecutan fastcgi.
El método de uso es el mismo que php.ini
deserializar
Implementación de serialización de PHP
procesadores comunes
Hay varios tipos de procesamiento de serialización en PHP, a saber, php, php_serialize, php_binary y WDDX (el soporte debe estar habilitado en tiempo de compilación). El valor predeterminado es php, que se puede session.serialize_handler
modificar .
Si PHP se compila con compatibilidad con WDDX, solo se puede usar WDDX. WDDX está obsoleto desde PHP 7.4. php_serialize está disponible desde PHP 5.5.4. php_serialize simplemente usa las funciones serializar/deserializar directamente internamente y no tiene las limitaciones que tienen php y php_binary.
El formato del procesador PHP es: nombre clave + barra vertical + valor serializado por la función serialize().
El formato del procesador php_binary es: el carácter ASCII correspondiente a la longitud del nombre de la clave + el nombre de la clave + el valor serializado por la función serialize().
El formato del procesador php_serialize es: una matriz serializada por la función serialize().
formato de serialización
La implementación de php_serialize está php-src/ext/standard/var.c
en , la función principal es php_var_serialize_intern
, el formato serializado es el siguiente:
boolean
b:<value>;
b:1; // true
b:0; // false
integer
i:<value>;
double
d:<value>;
NULL
N;
string
s:<length>:"<value>";
s:1:"s";
array
a:<length>:{key, value};
a:1:{s:4:"key1";s:6:"value1";} // array("key1" => "value1");
object
O:<class_name_length>:"<class_name>":<number_of_properties>:{<properties>};
reference
指针类型
R:reference;
O:1:"A":2:{s:1:"a";i:1;s:1:"b";R:2;}
$a = new A();$a->a=1;$a->b=&$a->a;
privado与proteger
A diferencia de las variables de protección y las variables públicas, las privadas no se pueden configurar directamente.
Solo se puede acceder a la propiedad privada dentro de la clase en la que está definida y no se heredará Agregar el nombre de la clase antes de que la propiedad se %00className%00
use para indicar que es privada.
Se puede acceder al atributo protegido en la clase principal y la clase secundaria, y se agrega la variable %00*%00
para marcarlo como protegido.
Vulnerabilidad de deserialización de PHP
__wakeup
PHP llamará a la función / etc al deserializar __sleep
, lo que puede causar problemas como la ejecución del código. Si no hay una función relacionada, el destructor relacionado también se llamará al destruir, lo que también provocará la ejecución del código.
También se pueden utilizar otras __toString
/ dos funciones.__call
Entre __wakeup
ellos , se activa cuando se deserializa, se activa __destruct
cuando se activa GC, se activa __toString
cuando se activa el eco y se activa __call
cuando se llama a una función indefinida.
A continuación se proporciona una demostración simple.
class Demo
{
public $data;
public function __construct($data)
{
$this->data = $data;
echo "construct<br />";
}
public function __wakeup()
{
echo "wake up<br />";
}
public function __destruct()
{
echo "Data's value is $this->data. <br />";
echo "destruct<br />";
}
}
var_dump(serialize(new Demo("raw value")));
producción
construct
Data's value is raw value.
destruct
string(44) "O:4:"Demo":1:{s:4:"data";s:9:"raw value";}"
Después de modificar la cadena serializada, ejecute
unserialize('O:4:"Demo":1:{s:4:"data";s:15:"malicious value";}');
producción
wake up
Data's value is malicious value.
destruct
Aquí puede ver que el valor ha sido modificado.
Lo anterior es unserialize()
una aplicación simple de No es difícil ver que si __wakeup()
o __desturct()
tiene operaciones sensibles, como leer y escribir archivos y operar bases de datos, el comportamiento de lectura y escritura de archivos o lectura de datos se puede realizar a través de funciones.
Entonces, __wakeup()
¿ agregar un juicio puede prevenir esta vulnerabilidad? En __wakeup()
el añadimos una línea de código.
public function __wakeup()
{
if($this->data != 'raw value') $this->data = 'raw value';
echo "wake up<br />";
}
Pero, de hecho, aún se puede omitir. Hay vulnerabilidades de activación en las versiones PHP5 < 5.6.25 y PHP7 < 7.0.10. Cuando el número de objetos en deserialización no es igual al número anterior, se omitirá la reactivación, por lo que se utiliza la siguiente carga útil
unserialize('O:7:"HITCON":1:{s:4:"data";s:15:"malicious value";}');
producción
Data's value is malicious value.
destruct
Aquí se omite la activación y el valor aún se modifica.
punto de uso
Uso nativo de SoapClient
La clase SoapClient en php puede crear paquetes de datos de jabón. En el modo no wsdl, cuando la instancia de SoapClient se deserializa, realizará una solicitud de jabón a la URL especificada por el segundo parámetro. Esta característica se puede usar para SSRF.
Archivo zip
ZipArchive::open()
Si el parámetro de bandera en la clase nativa de php se establece en ZipArchive::OVERWRITE
, el archivo especificado se eliminará Esta característica se puede usar para eliminar archivos bajo ciertas condiciones.
Sesión
Las sesiones en PHP se almacenan como archivos de forma predeterminada. Los archivos se nombran con sess_sessionid. Cuando la sesión es controlable hasta cierto punto, la deserialización se puede activar a través de la sesión.
CVEs relacionados
CVE-2016-7124
Antes de PHP 5.6.25 y antes de 7.0.10, cuando el número de propiedades (variables) de un objeto es mayor que el número real, __wakeup()
no se ejecutará.
【Recomendación de recursos】
-
Sistema dedicado de prueba de penetración
- imagen del sistema kali-linux-e17-2019.1a-amd64.iso
- imagen del sistema kali-linux-e17-2019.1a-amd64.iso_imagen de kalilinux-recursos de documentación de Linux-descarga de CSDN
- sistema operativo kali-linux-2018.4-amd64
- kali-linux-2018.4-amd64 sistema operativo_amdkalilinux-Recursos de documentación de Linux-Descarga de CSDN
- imagen del sistema manjaro-xfce-17.1.7-stable-x86_64.iso
- imagen del sistema manjaro-xfce-17.1.7-stable-x86_64.iso _descarga de imagen manjaro, descarga del sistema manjaro-recursos de documentación de Linux-descarga CSDN
- Sistema de penetración WiFi dedicado nst-32-11992.x86_64.iso imagen del sistema operativo
- nst-32-11992.x86_64.iso sistema operativo imagen.zip_Explicación de herramientas de descifrado de contraseñas de uso común y recursos de documentación de Linux de combate real-descarga de CSDN
- Imagen del sistema operativo Parrot-security-4.1_amd64.iso
- Imagen del sistema operativo Parrot-security-4.1_amd64.iso _ParrotSecurity-Recursos de documentación de Linux-Descarga de CSDN
- sistema operativo manjaro-xfce-17.1.7-estable-x86_64
- manjaro-xfce-17.1.7-stable-x86_64 operating system _manjaroxfce tutorial de instalación - Recursos de documentación de Linux - Descarga CSDN
- sistema operativo cyborg-hawk-linux-v-1.1
- Sistema operativo cyborg-hawk-linux-v-1.1 _tutorial de instalación de máquina virtual cyborghawk - Recursos de documentación de Linux - Descarga CSDN
-
Herramientas relacionadas con pruebas de penetración
- Columna de práctica de prueba de penetración
- [Herramientas comunes de Kali] Herramienta de monitoreo de comportamiento en Internet
- Herramientas de comportamiento de Internet_Explicación de herramientas de descifrado de contraseñas de uso común y combate real
- [Herramientas comunes de Kali] herramienta de captura Charles Windows versión gratuita de 64 bits
- Herramienta de captura de paquetes CharlesWindows64 Free Edition_Herramientas de descifrado de contraseñas comúnmente utilizadas para explicar y combatir
- [Herramientas comunes de Kali] herramienta de estampado stamp.zip
- Stamp tool stamp.zip_intext:LexSaints-Recursos de documentos de fabricación-Descarga de CSDN
- [Herramientas comunes de Kali] herramienta brutecrack [WIFIPR versión china] y diccionario wpa/wpa2
- Herramienta Brutecrack [WIFIPR versión china] y wpa/wpa2 dictionary_wifipr tutorial-otros recursos de documentos-descarga de CSDN
- [Herramientas comunes de Kali] EWSA 5.1.282-Herramienta de ruptura
- [Herramientas comunes de Kali] EWSA5.1.282 - herramienta de interrupción de paquetes _herramienta de paquetes en ejecución de Kali - recursos de documentación del software de gestión - descarga de CSDN
- [Herramientas comunes de Kali] Controlador de tarjeta de red Realtek 8812AU KALI y tutorial de instalación
- [Herramientas comunes de Kali] Controlador de tarjeta de red Realtek8812AUKALI y tutorial de instalación
- [Herramientas comunes de Kali] Herramienta de búsqueda de señal inalámbrica _actualización de kali
- [Herramientas comunes de Kali] Herramienta de búsqueda de señal inalámbrica _actualización de kali _actualización de kali-recursos de documentos de Internet-descarga de CSDN
- [Herramientas comunes de Kali] software de prueba de señal interna _herramientas comunes de Kali
- [Herramientas comunes de Kali] software de prueba de señal interna_herramientas comunes de Kali-software de gestión de red recursos de documentación-descarga de CSDN
- [Herramientas comunes de Kali] Herramienta de modificación de direcciones MAC para proteger el terminal de la exposición
- [Herramientas comunes de Kali] Herramienta de modificación de direcciones MAC para proteger el terminal de la exposición_modificador de mac-recursos de documentación de Linux-descarga de CSDN
- [Herramientas comunes de Kali] Herramientas de administración de scripts Las páginas php y jsp reciben parámetros de comando y los ejecutan en el lado del servidor
- Las herramientas de administración de secuencias de comandos, las páginas php y jsp, reciben parámetros de comando y los ejecutan en el lado del servidor_intext:LexSaints-Network Security Documentation Resources-CSDN Download
- Java implementa el posicionamiento GPS de fotografías [script completo]
- ReadPicExif.zip-Recurso de clase de documento Java-Descarga de CSDN
- Python implementa el posicionamiento GPS de fotos [script completo]
- Python localiza la ubicación exacta de la secuencia de comandos del código completo de la foto: cómo ubicar la ubicación a través de la foto
- Goddess olvida la contraseña del álbum python20 líneas de código para abrir [script completo]
- La diosa olvidó la contraseña del álbum python20 líneas de código para abrir.py_keepalive_timeout-Python document resource-CSDN download
- Python modifica el color de fondo, el tamaño, el fondo y el recorte de la foto de identificación [código fuente completo]
- Python modifica el color de fondo, el tamaño, el fondo y el recorte de la foto de identificación [código fuente completo] _python Cambio de color de la foto de identificación-Recurso de documentación de Python-Descarga de CSDN
combate pitón
- [Python Combat] Boda de ex novia, Python descifró el WIFI en el sitio de la boda y cambió el nombre a
- [combate de python] El "520 happy.pdf" encriptado enviado por mi ex novia, después de descifrarlo con python, descubrí que
- [combate de python] Anoche, usé python para tomar una selfie con la tarjeta de identificación de la señora de al lado, y descubrí que ...
- [combate de python] novia que trabaja horas extras en medio de la noche para enviar una selfie novio de python encontró un secreto impactante con 30 líneas de código
- [python combat] python you TM es demasiado delgado: solo 30 líneas de código pueden registrar cada movimiento del teclado
- [ python combat] Olvidé la contraseña del álbum de la diosa, solo escribí 20 líneas de código en Python~~~
[Código fuente completo de 30 casos de desarrollo real de desarrollo de pygame]
[columna de desarrollo de juegos pygame, obtenga el código fuente completo + tutorial]
- Aprendamos pygame juntos, 30 casos de desarrollo de juegos (2) - juego de defensa de la torre
- Aprendamos pygame juntos, 30 casos de desarrollo de juegos (4) - Tetris game
- Columna de práctica de prueba de penetración
- Columna de administración de Windows AD/Exchange
- Construcción de servidor Linux de alto rendimiento
- Columna de automatización de PowerShell
Recomendación de estudio oficial de CSDN ↓ ↓ ↓
- El mapa de conocimiento completo de Python de CSDN es demasiado sólido, ¡se lo recomiendo a todos!