martes, 18 de octubre de 2011

Algunos trucos con el httpd.conf y php.init

Php en su archivo de configuración tiene una serie de atributos interesantes. Muchos de los cuales en mi vida he visto y otros que no les presto mucha importancia. Curiosamente hace un par de semanas atrás, mi jefe directo me asigno una misión bastante peculiar. Tenia que hacer funcionar local un aplicación. No voy a rondar en detalles. Si los quieren leer pueden verlos aquí.

En mi búsqueda de hacer funcionar dicha aplicación me tope con algunas variables en los archivos de configuración en el php y en el apache que quiero compartir por aca:
 
Primer truco

Uno muy interesante es poder anular los warning en php.
Usando la variable siguente en el php.init:

error_reporting = E_ALL & ~E_NOTICE

Esto le dice al Php que muestre los errores, pero no los warning o Notice como se les conoce. Entonces imaginemos que en el php creamos un array o tratamos de acceder alguna variable global y después simplemente tratamos de acceder sus datos con un índice que no existe.

Ejemplo:

echo $_REQUEST["email"]; 

Si esta variable no se encuentra configurada en el php.init, el warning es mostrado.

Sin embargo puede presentar problemas intensos de hackeo. Yo no recomendara utilizarlos.

Segundo Truco

Otro truco que si me parece mas util de usar es el: auto_prepend_fileauto_append_file. Estos son archivos que se cargan al inicio de cualquier script y despues de cualquier otros script en su orden respectivamente.

Un ejemplo seria algo asi como:
auto_prepend_file = /home/sites/koza/phpdefines.php

Esta variable auto carga o auto ejecuta este script antes de cualquier ejecusion. Es equivalente a:

inlcude('/home/sites/koza/phpdefines.php');

En el incio de cualquier script.

Tercer Truco

Ejecutar los script en php en archivos con extensión html. Al inicio pensé que esto seria de lo mas trivial del mundo. Honestamente confieso que me tomo más tiempo del que pensé. Realmente es trivial, pero encontrar el lugar para poner la configuración fue lo que me tomo mucho tiempo. Nota: Se puede hacer esto un archivo .httpaccess. Sin embargo no logre hacerlo funcionar por eso prefiero dejarlo como un nota (De que en teoría es posible).


En el archivo de configuración de apache (httpd.conf)

Buscamos la línea:

AddType application/x-httpd-php

Y le agregamos al final .htm y .html

Quedando algo asi como:

AddType application/x-httpd-php .htm .html

Esto es muy útil por razones de seguridad. Escondiendo en que esta programado la aplicación porque en el browser se vera simplemente .html en los scripts que en realidad son php. Pienso que es una excelente practica de configuración del los servidores.

Cuarto Truco.

Los virtual host, las configuración https y el /etc/hosts. Estos chicos pueden hacer una verdadera epifanía si no se sabe configurar bien. Hagamos algo básico y general. Los archivos hosts son archivos especializados dentro de los sistemas operativos (/etc/hosts para linux, unix y derivados) -> notese el s al final. Este archivo "simula" la llamada de un dominio remplazando por un ip previamente configurado.

Ejemplo:
127.0.0.1 koza.com

Si en el browser abro la dirección www.koza.com en realidad el archivo hosts se encarga de cargar mi servidor local.

Quinto Truco.

Los virtual Host son una noble invención, junto con el archivo host pueden hacer grandes hazanas.
Daremos por un hecho que existe en el archivo host la configuración anteriormente dada.

Entonces podemos construir de koza.com un mundo de reglas virtuales de nuestro sitio como:


        ServerName cruiser.koza.com
        UseCanonicalName Off
        DocumentRoot /home/sites/koza/htdocs/

    SetEnv SITE_LINK_URL http://www.google.com


En la configuracón arriba establecida le estamos diciendo al apache (Con ayuda del host file) que la proxima vez que alguien acceda a cruiser.koza.com su configuración personalizada va a usar Document Root en la carpeta /home/sites/koza/htdocs y que va a tener una variable de entorno personalizada llamada SITE_LINK_URL. Podemos hacer uso de esta en Php asi:

define("SITE_LINK_URL", $_SERVER["SITE_LINK_URL"]);

domingo, 9 de octubre de 2011

A que te Hackeo!!!

Esa fue mi reacción, cuando con mirada frenética y sin menor contemplación una base de datos requería para realizar un encargo inusual de mi jefe inmediato. Este me había solicito echar ha andar local un proyecto web, de la forma que fuera sin importar lo medios. Solo contaba con un FTP.  

Notas: Para evitar cualquier problema evitare nombres, definiciones o cualquier cosa que me pueda llevar a la orca.

En este mundo hay personas que uno simplemente no les puede decir No o darse el lujo de quedarles mal. Para mi una de esas personas es mi Jefe. Lo curioso no es porque sea mi jefe, no es porque sea mi mejor amigo o alguien al que le deba mucho. Es porque simplemente es alguien que me supo ganar como aliado, es alguien que antepone la persona antes que un puesto, un titulo o nombramiento. Alguien que yo respeto, que sabe me apoya en mi ideas locas, que toma en cuenta mi opinión no importa lo ocupado que este. Alguien de admirar.

Y hay empieza mi viaje oscuro, llevándome por el sendero de la devastación informática, a invocar las poderosas magias negras y arcanas del Hackeo Ético. Mi enigmática hazaña empieza con lo mas básico. Un Ftp "abierto de patas", como la puta piedrerita de la linea del tren. Casi desnuda y sin menor seguridad. Completamente irresistible (Sarcasmo negro). La misión que Vega me encomendó es que de una carpeta en un FTP X, lograra descargar un sitio Web (HTML, JS, CSS, PHP) y tratara de correr dicho proyecto en local.

Resulta que dicho proyecto tenia, SSL, Base de datos y unas configuraciones en Php que solo Dios sabe. Ya me conocen, cuando algo es realmente "pichudo", es donde mas me motivo. El reto, las cosas difíciles es algo que me apasiona.
Me di a la tarea de descargar los script y analizarlos en mi computadora local. Después de luchar un rato y simplemente convencido de que la única manera que lograría cumplir con mi misión era entrando por SSH al FTP. Buscar la base de datos, los Certificados SSL en Apache, ademas de la configuraciones de los directorios virtuales.


Tenía la primera regla de oro del hackeo a mi favor. Muchas veces el hackeo es algo que funciona por pura y real oportunidad. No es como en las películas, que tienen equipos de codificación o cosas asi. Aveces hackear es algo tan sencillo como robar el password o asumirlo (abs123, cumpleaños, cédula). También son cosas mas avanzadas como debilidades en el software. Por lo general cuando se descubre una debilidad en un software son un par de días (al menos en software libre) para encontrar el parche de seguridad. Pero el hacker que logra encontrar dicho fallo, se vuelve muy famoso o simplemente tiene un par de días para hacker todo lo que pueda. 

NOTA:
No se crean lo de las películas. No todos los software se pueden hackear. Hay algunos que son super seguros y al menos que encuentren un fallo de seguridad o logren robar un password no lo alcanzaran. Se imagina que existiera un hacker que pudiera romper cualquier seguridad. Podría acceder al banco que quisiera, comprar con tarjetas de crédito robadas. Digamos que seria la persona mas poderosa en el mundo.

Resulta que este FTP que les hablo, estaba tan mal configurado que me permitía llegar a Raíz de un directorio UNIX. YAHOOO, tenia la oportunidad que cualquiera hacker desearía. Una mala configuración en un software. Solo necesitaba ver como lograr entrar a servidor por SSH. No dure mucho en pensar que la solucion estaba en:

ssh-keygen -t rsa

El RSA generado lo subí al directorio del home del FTP. Después cuando ejecute el SSH, BINGO. Estaba dentro del servidor para hacer lo que me viniera en gana. Lo primero, la base de datos. Necesitaba buscarla. Con tan mala suerte que la base no estaba instalada en el Mysql del server. Después de hacer algo de magia con un par de comando, encontre un respaldo en SQL (Otra caseria oportunista exitosa). Simplemente lo importe en mi computadora con el siguiente comando:


mysql -u koza basededatosx << backup.sql

Y descargue todos los archivos que necesitaba buscando los comandos por ssh y despues pasarlos a mi servidor local.

Las próxima entrada será; Lo que aprendí en php.init y el httpd.conf en mis días de hacker... No se las pierdan.

AEM hablemos del arquetipo 11

Cuando creamos un proyecto con AEM. Siempre es importante saber que arquetipo estamos usando. Pues esto me determinara que source, herramien...