Aprendizaje de escape de caracteres de deserialización de PHP

Más personajes después de filtrar

Primero, se da el código php local. Es muy simple y no explica demasiado, es decir, reemplaza una x después de la deserialización con dos

<?php

function change($str){
    
    
    return str_replace("xx","3",$str);
}

$name = $_GET['name'];
$age = "I am 11";
$arr = array($name,$age);
echo "反序列化字符串:";
var_dump(serialize($arr));
echo "<br/>";
echo "过滤后:";
$old = change(serialize($arr));
$new = unserialize($old);
var_dump($new);
echo "<br/>此时,age=$new[1]";

Bajo circunstancias normales
Inserte la descripción de la imagen aquí

¿Qué sucede si se pasa una x más en este momento? No hay duda de que la deserialización falla, debido al desbordamiento (s originalmente 4 resulta en un carácter más), podemos usar esto para lograr el escape de la cadena
Inserte la descripción de la imagen aquí

Primero mira el efecto
Inserte la descripción de la imagen aquí

Pasamos name=hggxxxxxxxxxxxxxxxxxxxx";i:1;s:6:"woaini";}
";i:1;s:6:"woaini";}un total de 20 caracteres en esta parte.
Como una x será reemplazada por dos, ingresamos un total de 20 x, y ahora es 40. Las 20 x adicionales en realidad reemplazaron nuestros 20 caracteres ";i:1;s:6:"woaini";}. Como resultado ";i:1;s:6:"woaini";}, se produce el desbordamiento y "la cadena anterior se cierra, por lo que nuestra cadena escapa con éxito y se puede deserializar. Salida de woaini
adición: El proceso de deserialización cerrado
final ;}hace que ";i:1;s:7:"I am 11";}"se descarte el original y no afecta el proceso de deserialización.

Menos caracteres después del filtrado

<?php

function change($str){
    
    
    return str_replace("xx","3",$str);
}

$arr['name'] = $_GET['name'];
$arr['age'] = $_GET['age'];
echo "反序列化字符串:";
var_dump(serialize($arr));
echo "<br/>";
echo "过滤后:";
$old = change(serialize($arr));
var_dump($old);
echo "<br/>";
$new = unserialize($old);
var_dump($new);
echo "<br/>此时,age=";
echo $new['age'];

Esto es normal,
Inserte la descripción de la imagen aquí

Después de sumar dos x
Inserte la descripción de la imagen aquí

Las reglas antiguas miran el efecto final. En
Inserte la descripción de la imagen aquí
pocas palabras, el anverso se reduce a la mitad, lo que provoca que se coman los siguientes caracteres, ejecutando así el código detrás de
nosotros ; veamos, esta parte es el resultado de la serialización de edades
Inserte la descripción de la imagen aquí
porque el anverso es 40 Debido a la x, faltan 20 caracteres, por lo que debemos agregarlos más tarde.Esta parte es exactamente 20. Dado que "el frente está cerrado, podemos personalizar los siguientes parámetros.
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/solitudi/article/details/109043560
Recomendado
Clasificación