[Upload-labs] pass-04 .htaccess bypass

[Upload-labs] pass-04 .htaccess bypass


1. Proceso de prueba

Jugar uno

Primero intente cargar un archivo php:

imagen-20210318195356950

Como se muestra en la figura, indica que no se permite cargar este archivo.

Intente cambiar el sufijo capturando el paquete:

Vulnerabilidad de análisis de Apache: Apache analizará los sufijos no reconocidos, como suibianxie.php.xxx.ccc, test.php.iii, etc. de derecha a izquierda. Si no lo sabe, muévalo a la izquierda. Cuando finalmente mover a php, Apache lo reconocerá. El archivo se analizará como un archivo php.

imagen-20210318200759462

La carga se realizó correctamente, como se muestra en la figura, y el nombre del archivo no se ha cambiado.

Utilice un navegador para acceder al archivo:

imagen-20210318201033654

Descubrí que se resolvió con éxito.

Esto es demasiado fácil, quiero cambiar una forma de omitir, así que comente esas dos líneas en el archivo de configuración:

imagen-20210318214147496

Vuelva a acceder al archivo con el navegador después de reiniciar Apache:

imagen-20210318214215947

Descubrí que apache no se ha podido resolver, está bien.


Cómo jugar dos

Otra forma de pensar:

¿Qué es el archivo .htaccess ?

El archivo htaccess es un archivo de configuración en el servidor Apache, que es responsable de la configuración de las páginas web en el directorio correspondiente. A través del archivo htaccess, puede ayudarnos a lograr: redirección de la página web 301, página de error 404 personalizada, cambiar la extensión del archivo, permitir / bloquear el acceso a usuarios o directorios específicos, prohibir listas de directorios, configurar documentos predeterminados y otras funciones.

El archivo .htaccess (o "archivo de configuración distribuido") proporciona una forma de cambiar la configuración de cada directorio, es decir, colocar un archivo que contiene instrucciones en un directorio específico, y las instrucciones se aplican a este directorio y todos sus subdirectorios .

Pero es muy importante tener en cuenta que el directorio principal también puede tener archivos .htaccess, y los comandos son efectivos en el orden de búsqueda, por lo que los comandos en el archivo .htaccess en un directorio específico pueden sobrescribir el directorio principal. Las directivas en el. htaccess, es decir, las directivas del subdirectorio anularán las directivas del directorio principal o del archivo de configuración principal. Detallado

Primero cree un nuevo archivo .htaccess con el siguiente contenido:

<FilesMatch "qianxun.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

El contenido de este archivo significa decirle a Apache que lo analice de acuerdo con php cuando encuentre el archivo qianxun.jpg.

Creemos otro archivo de prueba php qianxun.php:

imagen-20210318215450082

Y cambie el sufijo del archivo a jpg.

Cargue el archivo .htaccess y el archivo qianxun.jpg por separado:

Subir qianxun.jpg Cargar archivo .htaccess
imagen-20210318215754921 imagen-20210318215937408

imagen-20210318220050538

Como se muestra en la figura, se ha cargado correctamente.

Visite qianxun.jpg con un navegador:

imagen-20210318220147972

Como se muestra en la figura, ¡qianxun.jpg se analizó correctamente!

Nota: el archivo .htaccess es el nombre de archivo predeterminado de apache, por lo que si existe un mecanismo para forzar el cambio de nombre del archivo cargado en segundo plano, este método no será válido.

2. Análisis del código fuente

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    
    
    if (file_exists($UPLOAD_ADDR)) {
    
    
        $deny_ext = array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf");   //黑名单机制,过滤了好多后缀
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //收尾去空

        if (!in_array($file_ext, $deny_ext)) {
    
    
            if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR . '/' . $_FILES['upload_file']['name'])) {
    
    
                $img_path = $UPLOAD_ADDR . $_FILES['upload_file']['name'];
                $is_upload = true;
            }
        } else {
    
    
            $msg = '此文件不允许上传!';
        }
    } else {
    
    
        $msg = $UPLOAD_ADDR . '文件夹不存在,请手工创建!';
    }
}

Resumen de vulnerabilidad:

1. Puede usar la función de análisis de apache, es decir, moverse a la izquierda después del sufijo desconocido para omitir el intento de analizar el siguiente sufijo. En este momento, podemos construir qianxun.php, nnn para omitir la verificación de back-end y hacer apache analiza correctamente.

2. Cargue un archivo troyano con un sufijo legal y un archivo .htaccess cuidadosamente configurado cuando el backend no fuerce el cambio de nombre del nombre del archivo cargado, lo que omitirá la verificación y permitirá que apache lo analice correctamente.

Supongo que te gusta

Origin blog.csdn.net/qq_43665434/article/details/114992519
Recomendado
Clasificación