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.
Comentarios recientes