【P4】Construcción de DVWA en Windows y explicación de las vulnerabilidades de inyección de comandos


Incluye seis pasos para construir DVWA en Windows, vulnerabilidades enormemente dañinas: inyección de comandos, solución del problema confuso de DVWA, solución de inyección de comandos de inyección de comandos, vulnerabilidad de defensa baja, defensa de vulnerabilidad de inyección de comandos media, defensa de vulnerabilidad de inyección de comandos alta, inyección de comandos La defensa contra las lagunas es imposible .


1. Construyendo DVWA en Windows

1.1 Construcción del campo de tiro DVWA

DVWA es un sitio web PHP escrito oficialmente por OWASP, que contiene varias vulnerabilidades comunes en los sitios web y puede aprender métodos de ataque y reparación.

1.2, seis pasos para construir rápidamente DVWA

1.2.1 Descargue e instale PHPstudy: http://public.xp.cn/upgrades/PhpStudy2018.zip

(1) Enlace de descarga: http://public.xp.cn/upgrades/PhpStudy2018.zip

直接点击下载链接跳转到网页直接即可下载;也可复制粘贴到网址中直接下载

Enlace de descarga del disco de red Baidu: https://pan.baidu.com/s/1vVVAbyUCT6XoK4NguMDrSA?pwd=jzib

Código de extracción: jzib

建议使用网址下载链接,百度网盘下载慢

(2) Después de descargar, descomprima y obtenga el archivo ejecutable PhpStudy2018.exe

inserte la descripción de la imagen aquí

(3) Haga doble clic en PhpStudy2018.exe, seleccione una ruta y haga clic en Sí para completar la instalación.

inserte la descripción de la imagen aquí

1.2.2 Coloque el código original DVWA descomprimido en la carpeta WWW del directorio de instalación de phpstudy

(1) Descargue el código fuente de DVWA: https://github.com/digininja/DVWA/archive/master.zip

直接点击下载链接跳转到网页直接即可下载;也可复制粘贴到网址中直接下载

Enlace de descarga del disco de red Baidu: https://pan.baidu.com/s/1qV4RMbJRFuGHPXKqPFRU9A?pwd=g2bm

Código de extracción: g2bm

建议使用网址下载链接,百度网盘下载慢

(2) Después de la descarga, coloque el paquete comprimido en la carpeta WWW del directorio de instalación de phpstudy

  • …\phpStudy\PHPTutorial\WWW

inserte la descripción de la imagen aquí

(3) Descomprimir una vez completada la descarga.

inserte la descripción de la imagen aquí

(4) Una vez completada la descompresión, puede cambiar el nombre

inserte la descripción de la imagen aquí

1.2.3 Ingrese al directorio DVWA/config y elimine el último .dist de config.inc.php.dist

  • …\phpStudy\PHPTutorial\WWW\DVWA\config

inserte la descripción de la imagen aquí

1.2.4 Abra el archivo config.inc.php recién renombrado, modifique db_user y db_password root root

(1) abierto

inserte la descripción de la imagen aquí

(2), modifique db_user y db_password root root a root y luego guarde

inserte la descripción de la imagen aquí

1.2.5 Acceso al navegador: http://127.0.0.1/DVWA/setup.php, haga clic en Crear base de datos en la parte inferior

127.0.0.1: Dirección de loopback local, acceda usted mismo

(1) Haga doble clic para iniciar phpStudy.exe en la ruta de instalación de phpStudy

inserte la descripción de la imagen aquí

(2), acceso al navegador local 127.0.0.1

inserte la descripción de la imagen aquí

Como se muestra en la figura, se muestra Hello World, lo que indica que la configuración se realizó correctamente

(3), acceda a DVWA, ingrese el navegador http://127.0.0.1/DVWA/setup.php

inserte la descripción de la imagen aquí

1.2.6 Crear una base de datos e iniciar sesión

(1), haga clic en Crear / Restablecer base de datos para crear una base de datos

inserte la descripción de la imagen aquí

(2), haga clic en Iniciar sesión

inserte la descripción de la imagen aquí

(3), ingrese el nombre de usuario admin, contraseña, haga clic en Iniciar sesión para iniciar sesión en dvwa

inserte la descripción de la imagen aquí

(4), la página después de iniciar sesión correctamente

inserte la descripción de la imagen aquí

2. Vulnerabilidad con gran daño: inyección de comandos

Generalmente, este tipo de vulnerabilidad ocurre porque el sistema de la aplicación necesita proporcionar a los usuarios una interfaz específica para la operación de comando remoto desde el diseño. Por ejemplo, en la interfaz de administración web de nuestros enrutadores comunes, firewalls, dispositivos de detección de intrusos, etc., el al usuario generalmente se le proporcionará un ping La interfaz web de la operación, el usuario ingresa la IP de destino desde la interfaz web y, después del envío, el fondo realizará una prueba de ping en la dirección IP y devolverá el resultado de la prueba. Sin embargo, si el diseñador no implementa controles de seguridad estrictos al completar esta función, los atacantes pueden enviar comandos maliciosos a través de esta interfaz, permitiendo que el fondo los ejecute, obteniendo así permisos de servidor en segundo plano.

inserte la descripción de la imagen aquí

  • cmd1|cmd2: independientemente de si cmd1 se ejecuta correctamente, cmd2 se ejecutará

  • cmd1;cmd2: independientemente de si cmd1 se ejecuta correctamente, cmd2 se ejecutará

  • cmd1 y cmd2: independientemente de si cmd1 se ejecuta correctamente, cmd2 se ejecutará

  • cmd1||cmd2: ejecuta cmd2 solo cuando cmd1 falla

  • cmd1&&cmd2: ejecutar solo después de que cmd1 se ejecute correctamente

注:cmd为command命令的意思

inserte la descripción de la imagen aquí

3. Baja defensa de las lagunas de defensa.

Comandos cmd de uso común:

  • whoami: ver el nombre de usuario actual

  • ipconfig: ver información de la tarjeta de red

  • apagado -s -t 0: apagado

  • usuario neto [nombre de usuario] [contraseña] /add: agrega un nuevo usuario cuyo nombre de usuario es nombre de usuario y contraseña es contraseña

  • escriba [nombre_archivo]: ver el contenido del archivo con el nombre del archivo

(1) Haga clic en Configuración de seguridad de seguridad DVWA, baje el nivel de seguridad a bajo, sin ninguna defensa, haga clic en Enviar

inserte la descripción de la imagen aquí

2. Haga clic en Inyección de comando Inyección de comando, ingrese 127.0.0.1 en Ingrese una dirección IP

inserte la descripción de la imagen aquí

3. Haga clic en el botón Enviar

inserte la descripción de la imagen aquí

Como se muestra en la imagen, hay caracteres confusos, el sitio web se desarrolló en el extranjero y la codificación predeterminada del sitio web es diferente a la del sistema operativo Windows, así que no se preocupe por los caracteres confusos, simplemente ejecútelo.

4. Ingrese 127.0.0.1&whoami en Ingrese una dirección IP y haga clic en Enviar

inserte la descripción de la imagen aquí

Como se muestra en la imagen: la línea inferior tiene más escritorio-v3q1n78\admin y admin es el nombre de usuario. Se puede verificar localmente usando cmd

inserte la descripción de la imagen aquí

5. Ingrese 127.0.0.1&ipconfig en Ingrese una dirección IP, haga clic en Enviar para enviar

inserte la descripción de la imagen aquí

Como se muestra en la figura, muestra el resultado de ingresar ipconfig en el cmd local.

inserte la descripción de la imagen aquí

6. Puede haber defectos en este sitio web, ¿cómo comprobar la causa de los defectos?

(1), haga clic en Ver código fuente en la parte inferior para ver el código fuente

inserte la descripción de la imagen aquí

(2), como se muestra en la figura, se abrirá una nueva ventana para mostrar el código fuente.

inserte la descripción de la imagen aquí


<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    
    
    // Get input
    $target = $_REQUEST[ 'ip' ];  // 将输入的 ip 赋值给变量 $target

    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
    
    
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );  // shell_exec:通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回;( 'ping  ' . $target ):127.0.0.1&whoami
    }
    else {
    
    
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }

    // Feedback for the end user
    echo "<pre>{
      
      $cmd}</pre>";
}

?>

7、输入 127.0.0.1&shutdown

Nota: Después de ingresar este comando, la computadora se apagará automáticamente

4. Resuelva el problema de los caracteres confusos en DVWA

En el directorio ...\phpStudy\PHPTutorial\WWW\DVWA\dvwa\includes, hay un archivo dvwaPage.inc.php, abra el archivo y modifíquelo en la línea 322, cambie UTF-8 a GBK o GB2312

1. Utilice el texto y haga doble clic para abrir.

inserte la descripción de la imagen aquí

2. Como se muestra en la figura, modifique y guarde.

inserte la descripción de la imagen aquí

3. Una vez que la modificación sea exitosa, no es necesario reiniciar, solo úsela directamente


Cinco, solución de inyección de comandos de inyección de comandos

La forma más eficaz de defenderse de la ejecución de comandos es filtrar la concatenación de comandos.

  • cmd1|cmd2: independientemente de si cmd1 se ejecuta correctamente, cmd2 se ejecutará

  • cmd1;cmd2: independientemente de si cmd1 se ejecuta correctamente, cmd2 se ejecutará

  • cmd1 y cmd2: independientemente de si cmd1 se ejecuta correctamente, cmd2 se ejecutará

  • cmd1||cmd2: ejecuta cmd2 solo cuando cmd1 falla

  • cmd1&&cmd2: ejecutar solo después de que cmd1 se ejecute correctamente

l、;、&、ll、&&:将这些符号替换成空,或判断用户输入这些符号就终止执行

6. Medio de defensa de vulnerabilidad de inyección de comandos

1. Haga clic en la configuración de seguridad DVWA Security, ajuste el nivel de seguridad a Moderado Medio y haga clic en Enviar.

inserte la descripción de la imagen aquí

2. Haga clic en Inyección de comando Inyección de comando, tire hacia abajo y haga clic en Ver código fuente

inserte la descripción de la imagen aquí

3. Abra una nueva página web y vea el código fuente.

inserte la descripción de la imagen aquí


<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    
    
    // Get input
    $target = $_REQUEST[ 'ip' ];  // 将输入的 ip 赋值给变量 $target

    // Set blacklist
    $substitutions = array(
        '&&' => '',
        ';'  => '',
    );  // 如果用户输入内容包含有&&或;则将符号变为空

    // Remove any of the characters in the array (blacklist).
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );  // str_replace字符串替换,如果有&&或;则将符号删除

    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
    
    
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );  // shell_exec:通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回;( 'ping  ' . $target ):127.0.0.1&whoami
    }
    else {
    
    
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }

    // Feedback for the end user
    echo "<pre>{
      
      $cmd}</pre>";
}

?>

Filtrar && y ; en la defensa media DVWA no afectará el uso normal de otros símbolos

Siete, defensa de vulnerabilidad de inyección de comando alta

1. Haga clic en Configuración de seguridad de seguridad DVWA, ajuste el nivel de seguridad a alto y haga clic en Enviar

inserte la descripción de la imagen aquí

2. Haga clic en Inyección de comando Inyección de comando, ingrese 127.0.0.1||ipconfig en Ingrese una dirección IP

  • 127.0.0.1||ipconfig

inserte la descripción de la imagen aquí

Como se muestra en la figura, al usar ||, se informa un error, lo que indica que || ha sido procesado

3. Tire hacia abajo y haga clic en Ver código fuente

inserte la descripción de la imagen aquí

4. Abra una nueva página web y vea el código fuente.

inserte la descripción de la imagen aquí

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    
    
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // Get input
    $target = $_REQUEST[ 'ip' ];
    $target = stripslashes( $target );

    // Split the IP into 4 octects
    $octet = explode( ".", $target );

    // Check IF each octet is an integer
    if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
    
    
        // If all 4 octets are int's put the IP back together.
        $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

        // 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>";
    }
    else {
    
    
        // Ops. Let the user name theres a mistake
        echo '<pre>ERROR: You have entered an invalid IP.</pre>';
    }
}

// Generate Anti-CSRF token
generateSessionToken();

?>

Ocho, la defensa contra la vulnerabilidad de la inyección de comandos es imposible

1. Haga clic en Configuración de seguridad de seguridad DVWA, ajuste el nivel de seguridad a alto imposible, haga clic en Enviar

inserte la descripción de la imagen aquí

2. Haga clic en Inyección de comando Inyección de comando, tire hacia abajo y haga clic en Ver código fuente

inserte la descripción de la imagen aquí

3. Abra una nueva página web y vea el código fuente.

inserte la descripción de la imagen aquí


<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    
    
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // Get input
    $target = $_REQUEST[ 'ip' ];  // 将输入的内容赋值给变量 $target
    $target = stripslashes( $target );

    // Split the IP into 4 octects
    $octet = explode( ".", $target );

    // Check IF each octet is an integer
    if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
    
    
        // If all 4 octets are int's put the IP back together.
        $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

        // 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>";
    }
    else {
    
    
        // Ops. Let the user name theres a mistake
        echo '<pre>ERROR: You have entered an invalid IP.</pre>';
    }
}

// Generate Anti-CSRF token
generateSessionToken();

?>
$target = stripslashes( $target );

    // Split the IP into 4 octects
    $octet = explode( ".", $target );

    // Check IF each octet is an integer
    if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
    
    
        // If all 4 octets are int's put the IP back together.
        $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

// 1、stripslashes:去除用户输入的\
// 2、explode:把用户输入的数据根据.分开,比如输入 127.0.0.1 会被分成四个部分,分别是 1270 0 1
// 3、分别判断分成的四个部分是不是数字,127是不是?0是不是?0是不是?1是不是?有不是数字的直接不允许访问;判断是否是4个
// 4、把验证完是数字的四个数字再用.拼接起来,变成正常的 IP 127.0.0.1

Supongo que te gusta

Origin blog.csdn.net/qq_45138120/article/details/131358169
Recomendado
Clasificación