martes, 5 de junio de 2012

Seguridad en una WEB (Evitando Ataques de XSS,Sqli,Rfi,Lfi,dos,)




[-]- - - - - - - - - - - - - - - - - - [-]


[1] Introduccion

[2] ¿Como nos atacan?

[3] Htaccess & Php.ini

[3.1] ¿Para que sirven?

[3.2] Htaccess

[3.2.1] Introduccion Htaccess

[3.2.2] Codigos utiles de Htaccess

[3.3] Php.ini

[4] Evitar ataques

[4.1] XSS

[4.2] Sql injection

[4.3] Rfi

[4.4] Lfi

[4.5] dos

[5] Despedida

[-] - - - - - - - - - - - - - - - - - - [-]

[1] Introduccion:

Buenas creo esto manual porque veo demasiados servidores webs sin la seguridad necesaria.

Pues este manual se para mejorar o intentar mejorar la seguridad web en la red.

Tratare de explicar lo mejor posible los pasos que daremos.

[-] - - - - - - - - - - - - - - - - - - [-]

[2] ¿Como nos atacan?:

Como nos atacan un apartado muy importante bueno hay varios,muchas formas de ataque

Algunas podremos evitar otras no.

Daremos aqui algunos ejemplos de conque cosas suelen atacar nuestro website:

-XSS (Cross site scripting)
-Sql injection
-Blind Sql injection (Injeccion a ciegas)
-dos (Ataques SYN respuestas)
-Reverse ip

y muchas mas que hay pero esto es lo que en este manual intentaremos evitar que se produzca.

Pero recuerda algo para poder evitar la mayoria de esto deberas aprender a programar o a leer

el manual detenidamente y aprenderlo.


[-] - - - - - - - - - - - - - - - - - - [-]

[3.1] Para que sirven (Htaccess y Php.ini):

Estos 2 archivos muy apreciados por los webmaster vienen a configurar el servidor web con multitud

de funciones.Estos 2 archivos son muy utiles para la seguridad de nuestro website

[3.2] Htaccess:

Es un archivo de configuracion de el servidor web se le da ordenes para realizarse como restricciones

y demas. ahora nos adentraremos un poquito mas en htaccess.

[3.2.1] Intruduccion a Htaccess:

htaccess como eh dicho anteriormente es un archivo de texto que apache usa para dar ordenes

al servidor y trabajarlas. para crear el archivo .htaccess has lo siguiente:

[1]: Habre el Bloc de notas
[2]: Pincha en > Archivo > Guardar como
[3]: Pon de nombre " .htaccess "
[4]: Selecciona en tipo "Todos los archivos"
[5]: Aceptar o Guardar

Perfecto tendras creado el archivo .htaccess pero todavia no esta subido asi que simplemente subelo

a tu hosting ponlo en la carpeta que desees que trabaje (Por ahora no hay nada no hay codigos)

y perfecto tendras ya subido el archivo .Htaccess para que trabaje cuando le metas codigos.



[3.2.2] Codigos utiles de Htaccess:

Buenas aqui te enseñare algunos codigos muy utiles para evitar tonterias de los lammers o algunos

que quieren joder tu web o simplemente para mejorar tu website.

Permitir acceso desde una IP unica

Buenas pues al lugar donde se hubica el sitio donde subiste el .htaccess con el siguiente codigo

Solo se le permitira la entrada si accede desde una ip (la que desees) para eso en nuestro archivo

.htaccess lo colocamos:

Código:


deny from all
allow from (Direccion IP)


Personalizar extensiones .html,.php y demas!

Alguna vez has querido por ejemplo crear un archivo index.shit y que se lo tome como si fuese

un archivo php pero que la extension sea .shit bueno pues hay un codigo en htacess para modificar

las extensiones lo explicamos este es el codigo:

Código:


AddType application/x-httpd-php .extension

lo que haria ese codigo seria tratar los archivos con la extension ".extension" como si fuesen .php !

Ahora probemos haber si podemos tratar un archivo de extension ".painboy" como si fuese .html:

Código:


AddType application/x-httpd-html .painboy

y seria tratado como archivo html pero con la extension .painboy!

Personalizar pagina error:

Te suena verdad el tipico error 404 este error se muestra cuando no se encuentra el archivo en el

Servidor y no lo puede localizar pues si te molesta este error simplemente debes añadirle unas

2 lineas a tu .htaccess:

Código:


RewriteEngine On
ErrorDocument 404: Paginaadondellevasisecometeerror


Ok de este codigo puedes modificar varias cosas.

1: Puedes cambiar el error a otro error ya que hay varios como el 505 y demas..

Si quieres evitar el error 505 simplemente has lo siguiente coloca lo siguiente en tu archivo

.htaccess

Código:


RewriteEngine On
ErrorDocument 505: archivoaredireccionarsisedaelerror505

Desabilitar el Acceso a una carpeta

Para desabilitar a la gente el acceso a una carpeta pues nada mas debes introducir el siguiente

Codigo en tu archivo .htaccess y luego subir el .htaccess dentro de la carpeta que deseas no permitir

acceder. el codigo es el siguiente:

Código:


#deny all access
deny from all


y con eso nadie podria acceder al contenido de archivos de esa carpeta.

Personalizar pagina error:

Te suena verdad el tipico error 404 este error se muestra cuando no se encuentra el archivo en el

Servidor y no lo puede localizar pues si te molesta este error simplemente debes añadirle unas

2 lineas a tu .htaccess:

Código:

RewriteEngine On
ErrorDocument 404: Paginaadondellevasisecometeerror


Ok de este codigo puedes modificar varias cosas.

1: Puedes cambiar el error a otro error ya que hay varios como el 505 y demas..

Si quieres evitar el error 505 simplemente has lo siguiente coloca lo siguiente en tu archivo

.htaccess

Código:

RewriteEngine On
ErrorDocument NºDELARCHIVOERROR: PGINAAREDIRECCIONSIOCURREESEERROR

Bueno pues ya saben evitar errores de este tipo.por ejemplo hagan lo siguiente:

Vallan a la siguiente url: www.mundonet.us/loquequierasyquenoexista.html

y veran que mostrara algo que dice error.html eso es porque ahi tendria que dar error 404 pero

Que ocurrio pues que tenia que redireccionar al archivo error.html pero el archivo error.html no lo

eh creado asi que no se redirecciona.

Evitar Hot link

Hot link es cuando por ejemplo publicamos una img , video en algun servidorweb que no es el nuestro

Pero ese archivo esta subido en nuestro hosting pues ahi gastaria nuestra banda de ancha seria como

Un robo de banda ancha! pues con el siguiente codigo evitaremos que nos roben la Banda Ancha:

Código:


1. RewriteCond %{HTTP_REFERER} !^$
2. RewriteCond %{HTTP_REFERER} !^http://websitetuya.com$ [NC]
3. RewriteCond %{HTTP_REFERER} !^http://websitetuya/.*$ [NC]
4. RewriteCond %{HTTP_REFERER} !^http://websitetuya$ [NC]
5. RewriteCond %{HTTP_REFERER} !^http://websitetuya/.*$ [NC]
6. RewriteRule .*\.(fla|gif|jpg|jpeg|png|bmp)$ - [F,NC,L]


Aqui lo que debes hacer es modificar websitetuya por tu website y ya.

Asi con esto lograremos evitar que consuman nuestra banda ancha con este codigo evitamos

Que los archivos (Fla,gif,jpg,jpeg,png,bmp) sean mostrados en otros sitios que no sean nuestro

servidor web claro.

Evitar mostrar modulos de apache y version

Este codigo sirve para no mostrar ese error



Ya que ese error puede dar informacion importante si nos quieren atacar asi que lo evitaremos

Colocando el siguiente codigo en nuestro archivo .htaccess:

Código:


ServerSignature Off

Query_string

Es muy importante configurar bien esto asi evitaremos varias cosas como

Sql injections,XSS y demas.

Para configurar bien colocaremos el siguiente codigo en nuestro archivo .htaccess:

Código:

RewriteCond %{QUERY_STRING} ^.*(;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|).*(/\*|union|select|insert|cast|set|declare|drop|update|md5|benchmark).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(localhost|loopback|127\.0\.0\.1).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*\.[A-Za-z0-9].* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(<|>|'|%0A|%0D|%27|%3C|%3E|).* [NC]


Evitar el Robo(Hurto) de cookies

Pues recuerdan que se podia robar cookies con una tecnica llamada xss pues eso se acabo

Con el siguiente codigo colocalo en tu .htaccess si quieres evitar que por culpa de una variable

mal programada te roben cookies a tu usuarios:

Código:

RewriteCond %{HTTP_COOKIE} PHPSESSID=([^;]+) [NC]
RewriteRule ^(.*)$ - [env=sessid:%1]
Header set Set-Cookie "PHPSESSID=%{sessid}e; path=/; HttpOnly" env=sessid


Evitando Rfi / Lfi

Buenas pues con el siguiente codigo evitaremos que por ejemplo con el siguiente codigo en php

voy poner una variable vulnerable a rfi:

Código:

<?php
echo $var;
?>


Ok lo explotariamos eso haci http://www.tuweb.com/comosellamaelar...r=loquequieras

y si muestra loquequieras significa que register_globals esta en on. pues para evitar esto pondremos

lo siguiente en nuestro archivo .htaccess

Código:

php_flag register_globals off

y con eso estariamos evitando incluir archivos,palabras y demas en cualquier variable de archivos php.

Protegiendo carpetas con contraseña

Bien para mi esto es muy importante si quieres privacidad en tus carpetas que te muestre un login

para meter el usuario y contraseña.

Bien pues añadiremos las siguientes lineas al archivo .htaccess:

Código:

AuthUserFile /rutacompleta/hacia/.htpasswd
AuthName AquiPuedesPonerLoQueQuieras
AuthType Basic


require user NOMBREUSUARIO

lo que hace eso seria buscar la ruta de el archivo .htpasswd luego mostrar "Entas entrando en

Aquipuedesponerloquequieras" luego definir que es un login basico el normal y luego

decir el unico usuario que puede acceder (Para añadir mas usuario require user nombre1 nombre2)

En el archivo .htpasswd la sintaxis es la siguiente:

NOMBREUSUARIO:CONTRASEÑA

Ejemplo:

painboy:4sxbu06GwVhd2

Bueno la contraseña que se da como puedes ver debe estar encriptada en una variacion del algoritmo

MD5 Realizada por el apache.

Bueno pues para crear el archivo htpasswd y que te de la contraseña ya encriptada y todo listo

para subir abre la consola MS-DOS y escribe lo siguiente:

Código:

htpasswd -cb .htpasswd USUARIO CONTRASEÑA

y te lo guardara en un archivo .htpasswd listo para subir al hosting y usarlo.

y con eso ya tendras tu login de proteccion de carpetas y siempre cuando intentes acceder a la

Carpeta donde se encuentra ese htaccess te pedire usuario y password y si los pones bien te da

Accesso.

[-] - - - - - - - - - - - - - - - - - - - - - - - - -[-]

[3.3] Php.ini:

Ultimamente el php se ah visto muy usado en servidores web es tan comun ver archivos php que

es necesario un archivo para configurar sus funciones y demas

a este archivo se le llama "php ini" a diferencia de el .htaccess el .htaccess engloba todo sobre

Configuracion del servidor web encambio el php ini solo trabaja sobre los archivos php

[3.3.2] Introduccion a Php.ini:

Php.ini es un archivo de configuracion de archivos php al cual se le puede desactivar,activar funciones

y demas asi que aprenderemos un poco a usarlas por ahora quiero que hagas los siguientes pasos

para crear el archivo Php.ini:

[1] Abres bloc de notas
[2] Pulsas >Archivo > Guardar como
[3] Pones de nombre "Php.ini"
[4] En tipo pones: "Todos los archivos" (vendra por defecto .txt !cambialo!)

y haci abras creado el archivo Php.ini bueno ahora subelo a tu hosting y ya tendras el archivo Php.ini

en tu servidor.

Ahora empezemos a ver instrucciones utiles de Php.ini.

[3.3.2] Codigos Utiles de Php ini

Ahora aprenderemos unos cuantos codigos utiles para nuestra configuracion de Php.ini

Espero que les sirva empezemos:

allow_url_fopen

Esta funcion lo que hace es permitir tratar incluir ficheros en la url osea tratar una url como un acceso

a un fichero esta funcion viene activada! y claramente no nos combiene ser victimas de un ataque

Asi que haremos lo siguiente ya que actualmente el php en nuestro servidor figura como lo siguiente:

allow_url_fopen = on lo que haremos sera en nuestro archivo Php.ini colocaremos el siguiente codigo

Código:


allow_url_fopen = off

y haci ya no se incluirian los archivos.

Evitar mostrar errores de Php

Para evitar mostrar errores de php y asi evitar que sea mas sencillo que venga uno y nos quiera hacer

pasar un mal rato es recomendable desactivar el mostrar errores de php asi que añadiremos

este siguiente codigo en el archivo Php.ini

Código:

display_errors = Off
display_startup_errors = Off


y ya esta eso es con eso ya no se mostrarian los errores de php.

Activando el Safe Mode

Como sabran es muy importante activar el modo seguro en nuestro servidor

Asi limitaremos y mucho a los malechores de la red que intentan modificar nuestros archivos

Asi que colocaremos el siguiente codigo en nuestro archivo Php.ini:

Código:


safe_mode = On


Register_globals

Como habia explicado mas arriba en la parte de "Codigos Utiles de htaccess" usaremos esta funcion

Para asi evitar inclusiones como de Rfi asi que por defecto esta desactivado asi que hay que

Mantenerlo asi pero por si no lo tienes coloca lo siguiente en el archivo Php.ini:

Código:

register_globals = off

[-] - - - - - - - - - - - - - - - - - - [-]

[4] Evitar Ataques:

Bien en este apartado nos centraremos un poquillo en la programacion sobre todo php y algunas

cosillas mas espero que les sea de ayuda y empezamos:

[4.1] Evitar XSS:

Bueno la verdad el tema de evitar ataques XSS Es un tema muy urgente en la red asi que lo

Trataremos asi que espero que no intentes leer esto si no eres programador o miniprogramador en

Php ya que sino no entenderas empezamos:

Bueno haber imaginemonos un libro de visitas no?

Ok que es lo que hace un libro de visitas sin filtros ni nada, Pues es un libro que muestra exactamente

lo que se escribio en el mensaje y los codigos <h1> y demas se injectan! y se ejecutan ok.

Bueno pues lo que queremos es que no se ejecuten verdad?

Pues perfecto explicare algunas funciones muy utiles para evitar esto:

strip_tags:

Bien lo que hace esta funcion es como su nombre indica "ARRANCAR" , "Romper" las tags (<>)

Bueno bien pues esta funcion eso es lo que realiza romper tags por lo tanto si la usamos

imaginate pongo algo asi:



Pues el atacante creera que su el codigo introducido en el comentario se va a ejecutar pero no!

ya que yo para que se muestre tengo que hacer lo siguiente:

Código:


<?php
$Proteccion = strip_tags($_REQUEST['Comentario'];
echo $Proteccion;
?>


Entonces si ponemos ese codigo solo se mostraria el comentario sin el tag de <h1> y haci evitamos

Que se muestre en grande lo que escribio el atacante. encambio si ponemos esto:

Código:

<?php
echo $_REQUEST['Comentario'];
?>


Mostrara en grande el comentario que hizo y nos puede hacer infinidad de cosas mas asi que

ya sabes si no quieres que te hagan eso utiliza la funcion Strip_tags.

Htmlentities

Bien lo que hace esta funcion es cojer una cadena y transformarla en entidades html

Un ejemplo esto: <script> seria transformado en: &lt;script&gt;

Bueno pondremos un ejemplo usando htmlentities y otro sin el miren esto:


Ok lo que el atacante quiere es mostrar su comentario en grande pero como usamos lo siguiente:

Código:

<?php
$Proteccion = htmlentities($_REQUEST['Comentario']);
echo $Proteccion;
?>


Entonces lo que hara sera envez de mostrarse todo en grande la etiqueta (tag) <h1> sera

Transformado a una entidad html y haci no se mostrara el mensaje grande.

Bueno hay muchos mas funciones de php para filtrar las cadenas pero creo que con estas dos

vas bien. hay mas como htmlspecialchars que es exactamente igual a htmlentities solo que trabaja

con UTF8.

[-] - - - - - - - - - - - - - - - - - - - - - - [-]

[4.2] Evitar Sql injection:

Bien pues este es un error muy tonto pero que tiene facil solucion algunos por ejemplo cometen

fallos como el siguiente:

Código:

SELECT * FROM painboy

Bueno pues con ese codigo podemos obtener lo que yo quiera es totalmente vulnerable a sql injection

Por un simple * podemos poner en riesgo nuestro website asi que para arreglarlo haremos lo

Siguiente:

Código:

SELECT nombre FROM painboy

Asi se concreta y solo busca ahi y no nos arriesgamos a nada.

[-] - - - - - - - - - - - - - - - - - - - - - - [-]

[4.3] Evitar Rfi

Rfi (Remote file inclusion) Su nombre lo dice todo asi que vamos con ello esta tecnica es dificil

encontrarla para ejecutar de varias formas que ahora te contare y te contare como evitarlo.

Para que RFI Funcion necesitas lo siguiente:

1- Error en la programacion
2-Tener Register_globals en on
3-allow_url_fopen en on

Bueno pues si esta todo eso como indico entonces si podras hacer un remote file inclusion

Asi que te pondre un codigo vulnerable de RFI

Código:


include($URL)

Ok bien como vemos se incluye lo que sea!

Asi que para explotarlo seria:

www.web.com/archivo.php?URL=SHELL

Bueno y claramente queremos evitar esto asi que vamos a hacer lo siguiente:

1-No cometer errores en la programacion
2-Register_globals en OFF
3-allow_url_fopen en OFF

Empezamos:

[4.3.1] No cometer errores en programacion:

Como hemos visto lineas antes se veia un codigo vulnerable a rfi ok bien pero cual es el problema

de ese codigo pues que se incluye lo que sea y lo que haremos sera usar file_exists

Pondre un codigo 100% seguro contra rfi (Remote file inclusion):

Código:

$url = intval($_GET['url']); //la variable URL solo tendra un valor entero
$archivo = “./documentos/cont”.$url.”.php”; //localizacion del archivo
if (file_exists($archivo)) include($archivo); // lo busca y si existe lo muestra


lo que hemos echo es simplemente verificar si lo que hemos introducido esta dentro de nuestro

hosting y que tenga una extension .php y si ese archivo existe pues se muestra.

[4.3.2] Register_globals en OFF

Buenas pues mira debes abrir el archivo Php.ini y introducir la siguiente linea:

Código:

Register_globals = off

y guardas y ya tendras Register_globals en OFF

Si tienes mas dudas sobre como ponerlo en off o sobre el archivo Php.ini mira mas arriba y te viene

Una explicacion mas extensa y mas entendible

[4.3.2] allow_url_fopen en OFF

Bueno pues como en register_globals es exactamente igual debes abrir el archivo

Php.ini y introducir la siguiente linea:

Código:


allow_url_fopen = off

y luego guardar el archivo php.ini y subirlo.

[-] - - - - - - - - - - - - - - - - - - - - - - [-]

[4.3] Evitar lfi

Lfi (Local file inclusion) inclusion de archivos internos (locales) bueno eso significa que sirve para mucho

No les parece para los atacantes esto es una joya ya que pueden obtener datos muy sensibles

Empezamos como para que vean como evitar este ataque:

Pondremos un codigo vulnerable a lfi para que entiendan mas o menos:

Código:

<?php
if(!$_GET['objeto']){
include('painboy.php');
}else{
$_GET['objeto'] = str_replace('http://','', $_GET['objeto']);
if(file_exists($_GET['objeto'].'.php')){
include($_GET['objeto'].'.php');
}
}
?>


Ok parece un codigo totalmente normal sin problema algun verdad pues si te das cuenta no filtra

el escalar directorios! si escalamos directorios y empezamos a ver cosas que no se podrian de ver

Nuestra website correria mucho peligro asi que les enseñare a filtrar el escalamiento de directorios

y el no incluir archivos locales para asi mostrarlos y dar informacion sensible al atacante.

Código:


<?php
$_GET['proteccion'] = str_replace(array('.','/','\\'),'',$_GET['proteccion']);
?>


Ok ahora imaginen que la variable proteccion quiere mostrar un contenido ok?

Ok pues lo que hariamos seria usar la funcion de php str_replace para borrar los codigos utiles

que al atacante le sirve para escalar directorios y mostrar asi archivos locales asi que ya saben

Usen str_replace y luego filtren lo que necesiten para evitar lo que quieran en este caso

con el ejemplo que es 100% seguro filtramos lfi.

[-] - - - - - - - - - - - - - - - - - - - [-]

[5] Recomendaciones:

Bueno aparte de esto te doy unas recomendaciones

1: No subas muchos scripts a tu hosting (muchas veces si subes muchos scripts la gente si ve que
tu website el mostrado no tiene bugs y demas o no puede con ella ira a escanear tu web y vera
que tienes mas scripts en tu hosting y intentara acceder por medio de esos scripts por medio de
algun bug que tenga esos scripts asi que mucho cuidado con lo que subes siempre intenta limitarte
al subir algo.

2: Sigue los consejos que te doy ya que son muy utiles y recuerda tener este archivo siempre en tu
Pc por si acaso lo necesitas en algun momento y no lo encuentras en la red.

3: Con respecto al login que te enseñe a hacer con htpasswd y htaccess te recomiendo esconder
el archivo htpasswd en directorios y cambiarle el nombre al archivo .htpasswd y modificar un poquillo
el login asi le dificultas la entrada al atacante.



[-] - - - - - - - - - - - - - - - - - - - [-]

[5] Despedida:

Bueno este manual se lo dedico a toda aquella gente que desea tener un website seguro y que

bueno se lo dedico a toda mi comunidad y demas bueno pues eso espero que hayan aprendido y

Demas y que apliquen lo que les digo. Si vas a poner este Manual en algun otro sitio respeta el

Copyright saludos amigos.


Ficha de contacto:


Creador: Painboy

1 comentarios :