[Upload-labs] pass-04 .htaccess bypass
1. Proceso de prueba
Jugar uno
Primero intente cargar un archivo php:
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.
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:
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:
Vuelva a acceder al archivo con el navegador después de reiniciar Apache:
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:
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 |
---|---|
Como se muestra en la figura, se ha cargado correctamente.
Visite qianxun.jpg con un navegador:
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.