sábado, julio 21, 2007

Problemas con apache y php

Tal y como conté en mi post anterior tenía previsto publicar un post sobre shells php, que son script php pensados para ser ejecutados en un servidor remoto mediante una vulnerabilidad RFI (Remote File Inclusion). Pero bueno eso os lo explicare todo mas despacio en el futuro post quiero publicar, ahora voy a contaros los problemas que tengo para preparar mi demostración.

Yo desde tiempos inmemoriales tengo instalado en mi servidor apache con soporte para php (desde que puse el server a funcionar) y iba bastante bien, en su día cuando hice algunos experimentos con php salió todo bien, y como servidor web para tener algunas cosillas accesibles desde cualquier pc de mi red también funcionaba bien. Y ahí estuvo el servidor web funcionando mucho tiempo, sin embargo la ley de Murphy actuó, justo el día que yo quería volver a utilizar el soporte para php no funcionaba, lo primero que quise hacer fue ejecutar directamente una de las shells de las que dispongo, así que la envío al server mediante netcat y luego la pongo en el directorio adecuado (/var/www/shells/) y pruebo a ejecutarla, pero no se ejecuto el codigo php en el servidor, lo que hizo fue ofrecerme descargar el archivo. Yo me quedé un poco desconcertado, no sabía que pasaba, porque el php había dejado de funcionar de repente? porque el servidor funcionaba, las páginas html las mostraba perfectamente. Reviso que sigo teniendo perfectamente instalado el apache y el php, a primera vista todo era correcto, los paquetes estaban instalados y yo no había cambiado los ficheros de configuración de apache. Pues nada tocaba agudizar el ingenio e intentar averiguar que pasaba, aunque realmente de ingenio poco, porque la solución era sencillísima y el problema era bastante fácil de descubrir, sin embargo yo me fui por el camino mas complejo... pero bueno no os adelante hechos, sigamos por orden.

Ejecuto ps axu | grep apache para ver si se estaba ejecutando el apache y no, no estaba, así que arranco el servicio: /etc/init.d/apache2 start, acto seguido pruebo a ver una página php que tenía en /var/www, info.php cuyo ćódigo podéis ver aquí: http://neobiusnet.googlepages.com/info.txt

Que lo que hace es simplemente mostrar una pagina con información sobre php, versión instalada, servidor web que corre... en fin información sobre la implementación. Bueno el caso es que puse esa página: http/debian/info.php (nota: debian es el nombre de mi server, y así esta definido en /etc/hosts). Yo ya un poco harto del tema y sin saber muy bien que hacer pruebo la solución clásica de windows, reinstalar, así que nada apt-get install -reinstall apache2, no valió para nada, así que pruebo desinstalando y eliminando los archivos de configuración a mano, tanto de apache como de php, así que apt-get remove --purge apache2 php5. Bueno tras eliminarlo todo pensé que lo mejor era instalar de nuevo siguiendo algún tutorial, google apache php debian etch, si, yo a los buscadores suelo hablarles en indio, total, si luego van a pasar de las preposiciones y demás pues para eso yo me lo ahorro directamente, además de todos es sabido que lo adecuado es poner las palabras claves. Bueno encontré algo y reinstalo todo (apache+php) edito los archivos de configuración para que apache soporte php. Hecho, reinicio apache y... tampoco interpretaba código php, WTF!! Probé borrándolo una vez mas y probando un tutorial diferente, tampoco funcionó.

Entonces recordé un detalle, hace poco, como mes y medio, instale un nuevo servidor web, thttpd, que se trata de un sencillo servidor web, que no necesita archivo de configuración, las opciones se le ponen como parámetros, al que le interesen mas detalles que lea esto. El caso es que el servidor es muy cómodo, os cuento para que lo uso, yo todas las descargas que hago en el server con mldonkey van a /media/hde/mldonkey/incoming y otras descargas las tengo en /media/hde/series... en fin que de /media/hde cuelgan muchas cosas que me interesan y a las que me gustaría tener acceso sencillo, antes usaba netcat (y para casos concretos sigo usándolo), pero es muy cómodo moverte al directorio que te interese y poner thttpd -p 88 -d /media/hde y tener un servidor web en el puerto 88 con los /media/hde como directorio raiz y poder hacer streaming fácilmente, o descargar varios archivos del servidor... en fin menos trabajoso que netcat e infinitamente mas útil y cómodo (ojo me refiero a esta tarea, netcat sigue siendo utilísimo, sin embargo para esta necesidad creo que esta opción es mejor). O a lo mejor me interesan varios archivos del disco duro externo montado en /mnt, pues pongo otro server en el puerto 89 y con ese directorio como raíz, es una solución muy flexible.

Y la historia de thttpd a que viene? pues muy sencillo resulta que este servidor web "suplantó" a apache y se ejecutaba en el puerto 80, y este servidor no tiene soporte para php. Esto lo descubrí de una forma muy sencilla, puse en firefox http://debian y me mostró un listado de los archivos de /var/www (no hay index.*) en una página html con el formato por defecto de thttpd, así que lo reconocí al instante. Para solucionar el problema y comprobar que efectivamente el servicio corría y en ese puerto ejecuté: lsof -i TCP:80, vi el pid del proceso y lo maté, rearranqué apache probé el archivo info.php y se ejecutó! también lo hizo una shell que probé. Así que nada problema solucionado, simplemente pasaba que thttpd corría en lugar de apache.

Bueno realmente la historia no ha acabado, eso han sido los problemas para conseguir ejecutar páginas en php, pero todavía me queda otra cosa, yo había preparado una página vulnerable a RFI para hacer una demostración sobre como usar las shells php. El código que puse para el archivo que llame php.php podéis verlo aquí: http://neobiusnet.googlepages.com/php.txt

Con intención de pasarle luego luego como parámetro la shell (típico ataque rfi). Sin embargo por alguna razón que no entiendo (no sé php) me muestra esto al ejecutarlo:

Warning: include() [function.include]: Failed opening '' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/shells/php.php on line 5

RFI


Y el rfi no me funciona, alguien que sepa de php en la sala?

Nada mas, os seguiré contando mas cosas según vayan pasando.

PD: Vaya mierda blogger, no puedo poner código html, blogger lo interpreta y el código php lo ha transformado como ha querido. Así que lo he tenido que subir en txt a google pages.

Explicaciones

Ya se que llevo muchos días sin contar nada útil en el blog, y para eso os escribo este post, para comentaros que pasa, de todas formas este post ni es un cierre, ni tampoco es un "yo, ya posteare...." y luego tardo un mes en escribir, no. De hecho para hoy mismo espero haber terminado algún post.

Bueno os cuento, como sabéis la última semana he estado en Badajoz y no he podido hacer muchas cosas, por lo que tampoco tenía nada que contar, además de falta de tiempo. Luego cuando llegué aquí (creo que el miércoles) estuve preparando un post sobre shells php, pero se me complico el tema, porque para ilustrar mi post quería poneros screenshots y a lo mejor un vídeo, el plan era poner usar el apache + php que tengo en el servidor, poner una página php con una vulnerabilidad rfi y explotarla con alguna shell php, pero ya os digo, se complicó, el servidor web no iba bien, no ejecutaba páginas php... en fin un lío, y ahora lo que pasa es que como no se mucho de php (en realidad nada), la página que preparé cuando conseguí que el server funcionara bien, tenía (y tiene) un error y no hay manera de que funcione lo que yo tenía pensado.

Luego la fonera... la fonera desde aquel intento fallido que ya os conté en el último post no he podido volver a intentarlo por falta de tiempo (ahora os cuento), así que tampoco he podido hablar de eso, de todas formas tengo que conseguirlo como sea porque tampoco me serviría comprar una fonera nueva, porque las últimas para abrirle el ssh tiene que ser por hardware y estaría en las mismas. Cuando siga con este asunto os contaré, pero ya os digo que al primero que le interesa es a mi, porque si no todo el plan que tenía pensado se va al carajo no sirve para nada.

Además estos días he tenido poco tiempo, porque la semana anterior al viaje no salí prácticamente nada, luego me fui de viaje y cuando volví pues como hacía mucho tiempo que no veía a los amigos pues quedé estos días.

Y bueno eso es todo, ahora voy a escribiros unas cosillas, por ejemplo, los problemas que me han surgido para mi post sobre shells php. En fin que la situación se va a normalizar.