Información Importante Sobre el Contenido
Estas accediendo al contenido antiguo del blog. Este artículo "dirHack" es de dominio público y no será mantenido a futuro. Cualquier error o problema acerca del contenido por favor contactate conmigo desde la sección contacto.
El siguiente script sirve para hacer auditorias de seguridad en cuanto a los permisos en la estructura de directorios de nuestros servidores.
#!/bin/sh # Written by Zerial & Pons # McDonald‘s Day … # 21.34, Jun 13 2006 – Updated: 01.41, Jun 15 2006 # # # # # # # # # # # # # # # # # # # # # # # # # # # ____ _ _ _ _ # | _ (_)_ __| | | | __ _ ___| | __ # | | | | | ‘__| |_| |/ _` |/ __| |/ / # | |_| | | | | _ | (_| | (__| < # |____/|_|_| |_| |_|__,_|___|_|_ # # # # # # # # # # # # # # # # # # # # # # # # # # # version="1.0.2" if [ $# -lt 2 ] then echo echo "DirHack eXploit $version" echo "This thing will list all sub-home directories" echo "that are accesable by the user running the" echo "script." echo -e "tusage: $0 id output-file bz2|gz|text (default is text)" echo -e "texample: $0 999 out bz2" echo break else echo > $2 if [ ! –w $2 ] then echo "File $2 doesn’t have write permissions" break fi freedirs="public_html public_ftp etc tmp mail" echo "Starting DirHack $version" echo "DirHack eXploit $version" >> $2 for dir in $freedirs do for user in `awk -F‘:’ ‘ {printf $1 "n"} ‘ /etc/passwd` do userhome=`cat /etc/passwd |grep $user: |grep :$(id -u $user): |awk -F‘:’ ‘ {printf $6 "n"}’` fulldir=$userhome/$dir if [ `id -u $user` -gt $1 ] then if [ -d $fulldir ] then echo "" >> $2 echo "————————————————————-" >> $2 echo "User: $user" >> $2 echo "Directory: $fulldir" >> $2 echo "Size: `du -sh $fulldir`" >> $2 echo "" >> $2 ls -Rla $fulldir >> $2 fi fi done done case $3 in bz2) bzip2=`which bzip2` if [ -x $bzip ] then $bzip2 -f $2 echo "File ready and compressed in $2.bz2" else echo "No exec permissions for bzip2 or bzip2 not found." echo "File left uncompressed in $2" fi;; gz) gzip=`which gzip` if [ -x $gzip ] then $gzip -f $2 echo "File ready and compressed in $2.gz" else echo "No exec permissions for gzip or gzip not found." echo "File left uncompressed in $2" fi;; *) echo "File ready in $2";; esac
Funcionamiento: Lee todos los usuarios desde /etc/passwd y luego, por cada usuario obtenido, ingresa al directorio public_html y lista, recursivamente, todos los directorios y subdirectorios. Generalmente, el usuario en el que corre apache se llama apache y obviamente, debe tener acceso de lectura a todos los directorios y ficheros que se desean mostrar, por ejemplo /home/user/public_html/index.php.
Si no tiene permisos de lectura para apache dificilmente se podria ingresar via web. Muchas veces, estos ficheros tienen permisos de escritura y de lectura y es cuando hay que actuar. Si no encontramos ficheros con permisos de escritura no importa, al menos tenemos acceso para leerlos. Por ejemplo, en los CMS mas populares como WordPress, Joomla, etc. suelen tener un fichero de configuracion con el usuario y clave, en texto plato, de la base de datos con lo que podemos generar un script que nos permita ingresar y/o apoderarnos de esa base de datos.
Este script nos creara un listado, en txt (opcionalmente comprimido en gz o bz), con todos los ficheros y sus permisos, para que podamos indagar en la estructura de directorios.
Una forma de solucionar este problema es con chroot.
Información Importante Sobre el Contenido
Estas accediendo al contenido antiguo del blog. Este artículo "dirHack" es de dominio público y no será mantenido a futuro. Cualquier error o problema acerca del contenido por favor contactate conmigo desde la sección contacto.
octubre 5, 2008 a las 12:12 am
hola, muy bueno el blog, si lo deseas, ingresa a mi pagina, a publicar un comentario. saludos
octubre 8, 2008 a las 5:40 pm
No está mal el script, aunque no entiendo por que simplemente no notifica los archivos con el problema de permisos, en lugar de comprimirlos 🙂
octubre 8, 2008 a las 10:08 pm
@jcarlosn: No es que comprima los archivos, lo que hace es generar un listado con todos los ficheros y sus respectivos permisos, guardarlos en un fichero de texto plano y comprimir ese fichero. Si es un servidor grande, ese fichero podria pesar 10, 100, 200Mb y mas, pero comprimido por ejemplo con bzip, pesaria casi un 70% menos.
octubre 9, 2008 a las 9:56 am
Entiendo, gracias por la aclaración, es que no tuve tiempo de probar el script y leí por encima lo del bzip, y no entendía bien el motivo.
Muchas gracias!