Directorio de artículos
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
¿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
Primero mira el efecto
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,
Después de sumar dos x
Las reglas antiguas miran el efecto final. En
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
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.