Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Hackeo de la web

Estas en el tema de Hackeo de la web en el foro de PHP en Foros del Web. Bueno, tengo una simple red social que me hackearon porque no me dí cuenta y puse un strip_tags() en un sitio donde se ponen mensajes... ...
  #1 (permalink)  
Antiguo 19/06/2013, 04:00
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Hackeo de la web

Bueno, tengo una simple red social que me hackearon porque no me dí cuenta y puse un strip_tags() en un sitio donde se ponen mensajes... y ya no se pueden poner codigos solo alguna escepción por lo que lo puse así:

Código PHP:
Ver original
  1. strip_tags($_POST['mensaje'], "<br><i><b><u>");

Que son más o menos los que quiero. Pero de repente hoy me he encontrado con que la misma persona me ha vuelto a hackear la página web y no se como, ha borrado todos los mensajes de la base de datos. No sé como lo ha hecho ni como evitarlo pero me gustaría que me explicaran lo que ha pasado y que solución tengo que hacer. No tengo ningún tipo de seguridad en respecto, tan solo tengo eso...

Muchas gracias por su ayuda, espero que puedan responderme y que no vuelva a pasar porque tengo miedo de que me borre las cuentas, porque más o menos eso me da igual pero las cuentas si las borra creo que ya me daría un dolor.

Muchas gracias de verdad...
  #2 (permalink)  
Antiguo 19/06/2013, 04:18
Avatar de Lobito14  
Fecha de Ingreso: abril-2010
Mensajes: 222
Antigüedad: 14 años
Puntos: 17
Respuesta: Hackeo de la web

Hombre... sin ver todo el código es difícil saber donde estás fallando, pero hay bastantes probabilidades de que te esté calzando una inyección de SQL por algún lado.

Revisa que todos los datos que te llegan desde formularios, por GET y/o POST estén debidamente saneados antes de realizar consultas en la base de datos.

Saludos
  #3 (permalink)  
Antiguo 19/06/2013, 06:36
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Hackeo de la web

Si es el mismo usuario bloqueale mediante la ip algo te solucionara , ademas puedes crear algun filtro para sanear los datos de entrada POST Y GET debes de sanear todos los datos de entrada por parte del usuario , ademas deberias de usar PDO para evitar una posible inyeccion sql si es que estas usando mysql.

tu sabes que campos de la base de datos han sido alterados por lo cual debes de saber por donde se introdujeron esos datos que consultas son las que introducen esos datos asi averiguaras la entrada del problema si es mas postea aqui un script donde realizes un insert para poder ver un poco de donde puede venir, pero de todos modos dices que no tienes ningun tipo de seguridad por lo que 100%100 es inyeccion sql
  #4 (permalink)  
Antiguo 19/06/2013, 08:27
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Hackeo de la web

:O Muchas gracias por ayudarme, bueno lo primero es que una vez se el problema me ayudéis a solucionarlo... Bueno como me habéis pedido os dejo el código que corresponde al sitio donde alojo los mensajes en la base de datos. Tanto el código HTML para contener los datos como el PHP que los envía:

Este primero es el formulario que contiene los datos que quiere enviar el usuario, está en PHP por lo que está en un "echo" pero se comprende bien:
Código PHP:
Ver original
  1. echo "<div class=\"posted\" style=\"width: 375px; margin-bottom:20px;\">
  2.            <form action=\"post.php\" enctype=\"multipart/form-data\" method=\"post\">
  3.                <textarea style=\"width:343px;height:100px;resize: vertical;\" name=\"post\" placeholder=\"Publicar post...\"></textarea><br/>
  4.                 <input type=\"file\" name=\"imagen\" style=\"width:343px;\"/>
  5.                 <img src=\"barra.png\" style=\"margin-left:-15px;\"></img>
  6.                <input type=\"submit\" class=\"green_post\" style=\"width:343px;\"/>
  7.            </form>
  8.            </div>";

Este es el que lo envía también PHP:
Código PHP:
Ver original
  1. /* Aunque parezca dificil no es nada dificil de comprender */
  2.     include('conexion.php');
  3.     session_start();
  4.     if($_SESSION['usuario'] == NULL){ //Veo si existe el usuario
  5.         $desde = $_SERVER['HTTP_REFERER'];
  6.         header ("Location: ".$desde);
  7.     }else{}
  8.     $usuario = $_SESSION['usuario']; //Cojo el usuario
  9.     $post = strip_tags($_REQUEST['post'], "<br><b><i><u>"); //Cojo el mensaje
  10.     if(!isset($post)){ //Veo si existe el mensaje
  11.         $desde = $_SERVER['HTTP_REFERER'];
  12.         header ("Location: ".$desde);
  13.     }else{}
  14.     include('conexion.php'); //Cojo conexión
  15.     $variableConexion = mysql_connect($mysql_host, $mysql_user, $mysql_password);
  16.     mysql_select_db($mysql_database, $variableConexion); //Me conecto
  17.     $sql = "SELECT nombre FROM registros WHERE user='$_SESSION[usuario]'" or die("No se encuentra"); //Cojo todos los datos del usuario
  18.     $consulta = mysql_query($sql,$variableConexion) or die (mysql_error());
  19.     while($rs=mysql_fetch_array($consulta)){
  20.         $nombre = $rs['nombre']; //Cojo el nomre del usuario
  21.     }
  22.    
  23.     $con=mysql_connect($mysql_host, $mysql_user, $mysql_password);
  24.     mysql_select_db($mysql_database, $con); //Me conecto
  25.    
  26.     if($_FILES['imagen']['tmp_name'] == NULL){ //Veo si ha subido una imagen, sino, solo envía el mensaje.
  27.         mysql_query("INSERT INTO posts(usuario, post, nombre) VALUES('".$usuario."','".$post."','".$nombre."')");
  28.         header('Location: index.php');
  29.     }else{ //Si hay...
  30.     include('conexion.php');
  31.     $ruta = "imagen";
  32.     $archivotemporal = $_FILES['imagen']['tmp_name'];
  33.     $archivo = $_FILES['imagen']['name'];
  34.     echo $_FILES['imagen']['type'];
  35.         if($_FILES['imagen']['type'] == "image/png" || $_FILES['imagen']['type'] == "image/jpg" || $_FILES['imagen']['type'] == "image/gif" || $_FILES['imagen']['type'] == "image/bmp" || $_FILES['imagen']['type'] == "image/jpeg"){ //Compruebo que es una imagen.
  36.     move_uploaded_file($archivotemporal, $ruta."/".$archivo);
  37.     $ruta = $ruta."/".$archivo;
  38.     echo $ruta;
  39.    
  40.     $con=mysql_connect($mysql_host, $mysql_user, $mysql_password);
  41.     mysql_select_db($mysql_database, $con);
  42.     mysql_query("INSERT INTO posts(usuario, post, nombre, imagen) VALUES('".$usuario."','".$post."','".$nombre."','".$ruta."')");
  43.     header('Location: index.php'); //Y lo subo todo
  44.         }else{ //Este else es por si el archivo que ha subido no es una imagen...
  45.             mysql_query("INSERT INTO posts(usuario, post, nombre) VALUES('".$usuario."','".$post."','".$nombre."')");
  46.             header('Location: index.php');
  47.         }
  48.     }

Si no se entiende algo me lo decís y os lo explico, muchas gracias por ayudarme. Espero que sepan resolverlo, pedidme todo lo que queráis.
  #5 (permalink)  
Antiguo 19/06/2013, 09:00
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Hackeo de la web

Este formulario es el unico punto de entrada de datos del usuario?? tienes un formulario de login? etc... hay muchos puntos que observar . te recomiendo usar PDO o mysqli , olvidate de mysql , ademas no es necesario incluir tantas veces el archivo de conexion ni realizar tantas conexiones, con una solo te deberia de valer
  #6 (permalink)  
Antiguo 19/06/2013, 09:20
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Hackeo de la web

Cita:
Iniciado por webankenovi Ver Mensaje
Este formulario es el unico punto de entrada de datos del usuario?? tienes un formulario de login? etc... hay muchos puntos que observar . te recomiendo usar PDO o mysqli , olvidate de mysql , ademas no es necesario incluir tantas veces el archivo de conexion ni realizar tantas conexiones, con una solo te deberia de valer
No, muchas gracias por ayudar. No, tengo muchos lugares más donde se hay entradas de datos por lo que no te las iba a poner todas xdd y además me pediste solo la que enviaba los datos a la tabla de los mensajes que es la que me han borrado, pero da igual si quieres más me las pides.

Si pudieras usar mi código para introducir los códigos Mysqli y PDO para que vea como se hace... O por lo menos darme alguna página para informarme del código y eso. Muchísimas gracias por ayudarme.
  #7 (permalink)  
Antiguo 19/06/2013, 09:41
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Hackeo de la web

puntos importantes

- migrar mysql a PDO
- validar todos los datos de entrada (todos los formularios,etc...)
- validar correctamente la subida de imagenes y de que sea una imagen y no cualquier otra cosa

- antes de hacer las consutas guarda el dato que proviene del usuario en una base de datos o archivo de texto codificado para que no puedas sufrir daño y en caso de algun ataque, hecha mano a esa lista de datos para ver que han introducido y cual puede ser la causa del ataque , es importante guardar todos los datos, tanto de login intentos , posts, imagenes , etc....

te voy a poner un ejemplo basico de PDO

conexion.php
Código PHP:
Ver original
  1. <?php
  2.  
  3.     $dsn = 'mysql:dbname=nombre_database;host=127.0.0.1';
  4.     $usuario = 'usuario';
  5.     $contraseña = 'contraseña';
  6.      
  7.     try {
  8.      
  9.         $gbd = new PDO($dsn, $usuario, $contraseña);
  10.      
  11.     } catch (PDOException $e) {
  12.      
  13.         exit('Se ha producido un error imposible continuar x0215484.');
  14.     }
  15.  
  16. ?>

ahora en cualquier archivo

Código PHP:
Ver original
  1. <?php
  2.  
  3. include "conexion.php";
  4.  
  5. // hacemos una insercion
  6. // $gbd es la instancia de la conexion
  7.  
  8.     $sentencia = $gbd->prepare("INSERT INTO registros (nombre, valor) VALUES (:nombre, :valor)");
  9.      
  10.     $sentencia->bindParam(':nombre', $nombre);  // imaginemos que $nombre es $_REQUEST['nombre']
  11.     $sentencia->bindParam(':valor', $valor); // imaginemos que $valor es $_REQUEST['valor']
  12.      
  13.     $nombre = 'un nombre';
  14.     $valor = 1465464;  
  15.  
  16.     $sentencia->execute(); // ejecutamos consulta
  17.  
  18.  
  19.     // ahora seleccionamos los datos
  20.  
  21.    $sentencia = $gbd->prepare("SELECT * FROM registros WHERE nombre= ?");
  22.      
  23.     $sentencia->execute(array($_SESSION['usuario']));
  24.  
  25.     $result = $sentencia->fetch(PDO::FETCH_ASSOC);
  26.        
  27.     echo $result['valor'];
  28.  
  29. ?>

Última edición por webankenovi; 19/06/2013 a las 09:50
  #8 (permalink)  
Antiguo 19/06/2013, 10:31
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Hackeo de la web

Muchííísimas gracias! Qué se información, aja... Y con eso ya no hay peligro, ¿no? De acuerdo, lo he entendido todo menos esta parte, puedes detallarla con comentarios? Muchas gracias:

Código PHP:
Ver original
  1. // ahora seleccionamos los datos
  2. $sentencia = $gbd->prepare("SELECT * FROM registros WHERE nombre= ?");
  3. $sentencia->execute(array($_SESSION['usuario']));
  4. $result = $sentencia->fetch(PDO::FETCH_ASSOC);
  5. echo $result['valor'];

Respecto a MySqli no tienes nada que decirme? MySqli son las primeras líneas de advertencias que me has dado?
  #9 (permalink)  
Antiguo 19/06/2013, 10:58
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Hackeo de la web

mysqli y PDO son cosas diferentes

PDO - http://es1.php.net/manual/es/book.pdo.php
Mysqli - http://es1.php.net/manual/es/book.mysqli.php

Mysqli no te digo nada por que ya te dije como hacerlo con PDO que es preferible antes de mysqli pero mysqli antes de mysql , me sigues ->>>>

esto es tan solo una consulta para seleccionar datos

Código PHP:
Ver original
  1. $sentencia = $gbd->prepare("SELECT * FROM registros WHERE nombre= ?"); // preparamos la consulta , recuerda $gbd es la instancia de la conexion creada en el archivo conexion.php la interrogaccion ? es un parametro de sustitucion
  2.  
  3. $sentencia->execute(array($_SESSION['usuario'])); //ejecutamos la consulta y $_SESSION['usuario'] pasa a ser el parametro de sustitucion ?
  4. $result = $sentencia->fetch(PDO::FETCH_ASSOC); //obtenemos los resutados de la fila y lo metemos en un array $result
  5. echo $result['valor']; // mostramos el valor

No hay nada 100%100 seguro pero corres menos riesgo de sufrir ataques eso seguro, mientras que lo hagas bien , ademas puedes usar filtros , te dejo aqui un post para que heches un vistazo

http://www.forosdelweb.com/f18/segur...ml#post4451398


Una ultima cosa introduce en tu login tu nombre de usuario y de contraseña exactamente esto ' OR "=' tal y como lo he puesto y dime que sucedio

Última edición por webankenovi; 19/06/2013 a las 11:11
  #10 (permalink)  
Antiguo 19/06/2013, 11:37
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Busqueda Respuesta: Hackeo de la web

Cita:
Iniciado por webankenovi Ver Mensaje
mysqli y PDO son cosas diferentes

PDO - http://es1.php.net/manual/es/book.pdo.php
Mysqli - http://es1.php.net/manual/es/book.mysqli.php

Mysqli no te digo nada por que ya te dije como hacerlo con PDO que es preferible antes de mysqli pero mysqli antes de mysql , me sigues ->>>>

esto es tan solo una consulta para seleccionar datos

Código PHP:
Ver original
  1. $sentencia = $gbd->prepare("SELECT * FROM registros WHERE nombre= ?"); // preparamos la consulta , recuerda $gbd es la instancia de la conexion creada en el archivo conexion.php la interrogaccion ? es un parametro de sustitucion
  2.  
  3. $sentencia->execute(array($_SESSION['usuario'])); //ejecutamos la consulta y $_SESSION['usuario'] pasa a ser el parametro de sustitucion ?
  4. $result = $sentencia->fetch(PDO::FETCH_ASSOC); //obtenemos los resutados de la fila y lo metemos en un array $result
  5. echo $result['valor']; // mostramos el valor

No hay nada 100%100 seguro pero corres menos riesgo de sufrir ataques eso seguro, mientras que lo hagas bien , ademas puedes usar filtros , te dejo aqui un post para que heches un vistazo

http://www.forosdelweb.com/f18/segur...ml#post4451398


Una ultima cosa introduce en tu login tu nombre de usuario y de contraseña exactamente esto ' OR "=' tal y como lo he puesto y dime que sucedio
Muchas gracias he guardado la página en marcadores por si en un futuro o simplemente ahora mismo, tengo que volver a consultarlo.

No sé donde voy a poner lo de OR = ... ??? ¿Dónde lo colocaría?
  #11 (permalink)  
Antiguo 19/06/2013, 11:44
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Hackeo de la web

digo en tu login donde tienes un formulario donde pondras el usuario y un password pues lo que tienes que haces es de usuario pones el que tu uses y de password ' OR "=' tienes que ponerlo exactamente como te lo he puesto con las comillas y todo , es comilla simple espacio OR espacio comilla doble = y comilla simple y me dices que sucedio , mas o menos es un testing para ver si puede haber un fallo hay y han accedido de esa manera a la bd

una vez puesto envias los datos e intenta loguearte
  #12 (permalink)  
Antiguo 19/06/2013, 13:47
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Hackeo de la web

Cita:
Iniciado por webankenovi Ver Mensaje
digo en tu login donde tienes un formulario donde pondras el usuario y un password pues lo que tienes que haces es de usuario pones el que tu uses y de password ' OR "=' tienes que ponerlo exactamente como te lo he puesto con las comillas y todo , es comilla simple espacio OR espacio comilla doble = y comilla simple y me dices que sucedio , mas o menos es un testing para ver si puede haber un fallo hay y han accedido de esa manera a la bd

una vez puesto envias los datos e intenta loguearte
Este es el envío de datos de login:
Código PHP:
Ver original
  1. <?php
  2.     include_once("analyticstracking.php"); //Una cosa de Google Analytics para la recogida de datos...
  3.     include('conexion.php'); //Traigo la conexión
  4.     session_start(); //Inicio la sesisión
  5.     $con=mysql_connect($mysql_host, $mysql_user, $mysql_password); //Abro la conexión
  6.     mysql_select_db($mysql_database, $con); //Abro la base de datos
  7.     if($_REQUEST['user'] == NULL){ //Averiguo si el usuario lo ha escrito
  8.         header('Location: loginerror2.php');
  9.     }else if($_REQUEST['pw'] == NULL){ //Igualmente pero con la contraseña
  10.         header('Location: loginerror2.php');
  11.     }else{ //Si no, que empice a ver si hay usuarios así:
  12.     if(isset($_REQUEST['login'])){ //Si ha pulsado el botón de submit...
  13.         $usuario_post = $_REQUEST['user']; //Meto en una variable el usuario
  14.         $contrasena_post = md5($_REQUEST['pw']); //Meto la contraseña en una variable con MD5
  15.        
  16.         $sql = "SELECT * FROM registros WHERE user='$usuario_post' AND pw='$contrasena_post'"; //Veo a ver si existe...
  17.         $query = mysql_query($sql) or die (mysql_error()); //Lo ejecuto
  18.         $qtda = mysql_num_rows($query); //Mira cuantas filas hay...
  19.        
  20.         if($qtda == 0){ //Si es igual a 0...
  21.             header('Location: loginerror1.php');
  22.         }else{ //Si no...
  23.             $_SESSION['usuario'] = $usuario_post; //Lo meto en el SESSION
  24.             $fila = mysql_query("SELECT user FROM registros WHERE user='".$_SESSION['usuario']."'"); //Selecciono la fila
  25.             $dep = mysql_fetch_array($fila); //Lo ejecuto
  26.             if($_POST['record'] == true){ //Si el recuerdame es true entonces que lo guarde en una coockie
  27.                 setcookie("username", $dep['user'], time() + (86400 *  365));
  28.             }else{} //Sino, nada.
  29.             header ("Location: index.php");
  30.         }
  31.     }
  32.     }
  33. ?>

Última edición por iEnrique; 19/06/2013 a las 13:53
  #13 (permalink)  
Antiguo 19/06/2013, 14:04
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Hackeo de la web

Varios apuntes, lo que te habla @webankenovi es de sql inyection, una técnica para vulnerar las base de datos, de la manera como tienes actualmente todo estructurado es fácil para alguien con conocimientos en esta técnica sacar toda la información, eliminar datos y hacer lo que quiera.

Ahora bien, se te recomienda que en vez de usar las funciones de mysql_* que ya están obsoletas y actualmente las considero muy inseguras, se use algo como PDO o mysqli que te ofrecen las herramientas para luchar con algunas de estas técnicas y volver más segura la aplicación.

Entonces, yo recomendaría que primero migres tu aplicación a PDO o mysqli (ya que por lo que veo está siendo atacada actualmente) y después te empieces a informar de los distintos métodos para hackear (aquí en foros del web este tema te será de interés), de esta manera creo que seria la mas efectiva para solucionar tus problemas.

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #14 (permalink)  
Antiguo 19/06/2013, 14:51
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Hackeo de la web

Cita:
Iniciado por jonni09lo Ver Mensaje
Varios apuntes, lo que te habla @webankenovi es de sql inyection, una técnica para vulnerar las base de datos, de la manera como tienes actualmente todo estructurado es fácil para alguien con conocimientos en esta técnica sacar toda la información, eliminar datos y hacer lo que quiera.

Ahora bien, se te recomienda que en vez de usar las funciones de mysql_* que ya están obsoletas y actualmente las considero muy inseguras, se use algo como PDO o mysqli que te ofrecen las herramientas para luchar con algunas de estas técnicas y volver más segura la aplicación.

Entonces, yo recomendaría que primero migres tu aplicación a PDO o mysqli (ya que por lo que veo está siendo atacada actualmente) y después te empieces a informar de los distintos métodos para hackear (aquí en foros del web este tema te será de interés), de esta manera creo que seria la mas efectiva para solucionar tus problemas.

Saludos
Muchas gracias me informaré de todas formas primero quiero solucionarlo, como has dicho y después ya aprender como hacerlo para verlo desde otra perspectiva.

¿Podríais ponerme el código de inyección que tendría que poner para lo que pide @webankenovi de ' OR "='? O por lo menos más info del nombre para poder investigar sobre él.

Me gustaría dormir ahora y ya mañana por la mañana cambio el login a PDO para empezar a cambiarlo todo y ya os cuento que ha pasado, ¿de acuerdo? Muchas gracias.
  #15 (permalink)  
Antiguo 20/06/2013, 09:10
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Hackeo de la web

Siento el doble post, estoy haciendo el login y cuando iba a darlo por concluido me acordé de que me dijeron que pusiera algo de ' OR "=', necesito que me digáis que código debo poner exactamente y deciros lo que pasa.

Muchas gracias, un saludo.
  #16 (permalink)  
Antiguo 20/06/2013, 10:26
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Hackeo de la web

Hola amigo haber lo que te he puesto no debes de introducirlo en ningun archivo , tan solo era un testing para ver si pudo haber accedido desde el login de alguna forma a la bd y borrarte los mensajes , lo que te he puesto debes de introducirlo en el navegador vas a tu web y hay en el login donde tu introduces tu usuario y contraseña .

Te recomiendo tener un registro de los accesos al sistema.

Última edición por webankenovi; 20/06/2013 a las 10:34
  #17 (permalink)  
Antiguo 20/06/2013, 12:17
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Hackeo de la web

Cita:
Iniciado por webankenovi Ver Mensaje
Hola amigo haber lo que te he puesto no debes de introducirlo en ningun archivo , tan solo era un testing para ver si pudo haber accedido desde el login de alguna forma a la bd y borrarte los mensajes , lo que te he puesto debes de introducirlo en el navegador vas a tu web y hay en el login donde tu introduces tu usuario y contraseña .

Te recomiendo tener un registro de los accesos al sistema.
He probado a ponerlo solo en el hueco de "usuario" y quedar vacío el de contraseña, al revés y con los dos puestos y no me va. ¿Eso es bueno o lo estoy haciendo mal?
  #18 (permalink)  
Antiguo 20/06/2013, 12:30
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Hackeo de la web

Como no estás escapando los datos es, relativamente fácil obtener acceso a tu sitio, ejemplo:

Tu consulta actual es:
SELECT * FROM registros WHERE user='$usuario_post' AND pw='$contrasena_post'

Supongamos que en el formulario de acceso pones esto en nombre de usuario:
cualquiera' OR 1=1;#

La consulta quedaría:
Código SQL:
Ver original
  1. SELECT * FROM registros WHERE USER='cualquiera' OR 1=1;#' AND pw='$contrasena_post'

Con la comilla simple cierra el contenido a buscar en nombre de usuario.

Con OR 1=1 tu consulta buscará todos los usuarios y obtendrá acceso con el primer registro de tu tabla, ya que uno siempre será igual a uno y no importará el nombre tecleado.

Con ; se finaliza la sentencia para la consulta y todo lo que viene después de # es un simple comentario.

Como podrás ver, es fácil obtener acceso, pero también se puede finalizar una consulta y ejecutar otra como DROP TABLE nombre_de_tabla.

Para solucionar ese problema debes revisar todas las consultas en tu sitio y corregirlas. Te sugiero leer esto: http://www.forosdelweb.com/f18/aport...8/#post4265377
__________________
- León, Guanajuato
- GV-Foto
  #19 (permalink)  
Antiguo 20/06/2013, 12:32
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Hackeo de la web

Haber en principio es bueno de todas maneras yo te dije esto para que lo probaras segun lo tenias antes hecho y antes de que nos dieras el script de login , por lo que ya es irrelevante , pero bueno es testearlo con los cambios hechos , por cierto dices que no te va segun lo has probado pero salta algun error en la pantalla se muestra algo?

ya hiciste los cambios a PDO supongo?

Última edición por webankenovi; 20/06/2013 a las 12:46
  #20 (permalink)  
Antiguo 20/06/2013, 12:46
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Hackeo de la web

Muchas gracias por toda la info, me lo voy leyendo todo lo que me dais, comprendo eso, aunque también podría ser un filtro que quitara las comillas, ¿no? Por cierto, me sigue sin poder entrar poniendo lo que me habéis dicho cuando se supondría que se tendría que romper toda la seguridad. Me gustaría que lo comprobárais vosotros mismos a ver si os entra.

Mi usuario es iEnrique por favor, no hackeis nada, si entráis haceis pantallazo para que vea como se os ve y tal, muchas gracias de veras :S

La web: www.lemite.uni.me

Cita:
Iniciado por webankenovi Ver Mensaje
Haber en principio es bueno de todas maneras yo te dije esto para que lo probaras segun lo tenias antes hecho y antes de que nos dieras el script de login , por lo que ya es irrelevante , pero bueno es testearlo con los cambios hechos , por cierto dices que no te va segun lo has probado pero salta algun error en la pantalla se muestra algo?

ya hiciste los cambios a PDO supongo?
He empezado con el login pero al entrar me dice que no se encuentra mi usuario; si me quieres ayudar puedes hacerlo en este tema :S Te estaría muy agradecido... http://www.forosdelweb.com/f18/probl...n-pdo-1059107/
  #21 (permalink)  
Antiguo 20/06/2013, 12:50
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Hackeo de la web

si no te entra eso es bueno lo malo es que entrara comprendes? . tampoco debe de devolver ninguna informacion warning etc...

- si podrias usar un filtro para quitar las comillas mientras usas mysql , pero con PDO entrecomilla automaticamente los datos de los usuarios para evitar precisamente la inyeccion.

- se supone que se tendria que romper con mysql con PDO es otra cosa , en tu script anterior de login donde usas (mysql)si se rompe la seguridad (que no existe)si no pruebalo ya que en ningun momento saneas la variable $usuario_post

lo siento pero yo no voy a probar tu web ademas no es legal esas practicas aunque me des tu autorizacion no gracias! supongo que lo comprendes, para eso ya existen auditorias que hacen precisamente eso, tan solo intentamos ayudarte para que tu lo soluciones por ti mismo a ser posible.

Última edición por webankenovi; 20/06/2013 a las 12:58
  #22 (permalink)  
Antiguo 20/06/2013, 13:00
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Hackeo de la web

Cita:
Iniciado por webankenovi Ver Mensaje
si no te entra eso es bueno lo malo es que entrara comprendes? . tampoco debe de devolver ninguna informacion warning etc...

- si podrias usar un filtro para quitar las comillas mientras usas mysql , pero con PDO entrecomilla automaticamente los datos de los usuarios para evitar precisamente la inyeccion.

- se supone que se tendria que romper con mysql con PDO es otra cosa , en tu script anterior de login donde usas (mysql)si se rompe la seguridad (que no existe)si no pruebalo.

lo siento pero yo no voy a probar tu web ademas no es legal esas practicas aunque me des tu autorizacion no gracias! supongo que lo comprendes, para eso ya existen auditorias que hacen precisamente eso, tan solo intentamos ayudarte para que tu lo soluciones por ti mismo a ser posible.
Vale, no te preocupes eres libre jajaja Pues problema solucionado chicos, muchas gracias por ayudarme, simplemente me queda el error del tema que os dí y creo que me pondré a usar PDO por todas partes porque me habéis convencido, además de que no me paran de atacar xddd Bueno, espero que me solucionen el problema en el otro tema y estaré fuera de preocupaciones ante amenazas de este tipo. Muchas, muchas gracias.

Seguramente tenga un simple fallo aquí pero no soy capaz a logearme... http://www.forosdelweb.com/f18/probl...n-pdo-1059107/
  #23 (permalink)  
Antiguo 20/06/2013, 13:06
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Hackeo de la web

de nada amigo , cuando implementes pdo en todas tus consultas estaria bien decirnos cuando pase un tiempo si solucionaste el problema o siguen atacandote , espero que no te vuelva a pasar .

haber hechemos un vistazo al otro tema .....

xao saludos
  #24 (permalink)  
Antiguo 24/06/2013, 07:08
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Respuesta: Hackeo de la web

Ahora definitivamente tienes que sanear tus variables de entrada ya que has hecho publico el código de validacion a menos que lo cambies por completo.
  #25 (permalink)  
Antiguo 24/06/2013, 07:20
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Hackeo de la web

Cita:
Iniciado por Sergestux Ver Mensaje
Ahora definitivamente tienes que sanear tus variables de entrada ya que has hecho publico el código de validacion a menos que lo cambies por completo.
exactamente a qué te refieres con sanear? he oído esta expresión antes pero no sé qué significa.

gracias! :)
  #26 (permalink)  
Antiguo 24/06/2013, 11:36
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Respuesta: Hackeo de la web

Con eso me refiero a que debes limpiar tus variables de usuario y password antes de tratarlo. Si en usuario esperas solamente letras y numero eso es lo que debe contener variables por lo cual debes eliminar todo lo demas, es decir comillas simples, dobles, * y demas carcateres raros.

Hay muchos ejemplos de eso en la red y este es solo uno que econtre

Código PHP:
function limpiarCadena($valor)
{
    
$valor str_ireplace("SELECT","",$valor);
    
$valor str_ireplace("COPY","",$valor);
    
$valor str_ireplace("DELETE","",$valor);
    
$valor str_ireplace("DROP","",$valor);
    
$valor str_ireplace("DUMP","",$valor);
    
$valor str_ireplace(" OR ","",$valor);
    
$valor str_ireplace("%","",$valor);
    
$valor str_ireplace("LIKE","",$valor);
    
$valor str_ireplace("--","",$valor);
    
$valor str_ireplace("^","",$valor);
    
$valor str_ireplace("[","",$valor);
    
$valor str_ireplace("]","",$valor);
    
$valor str_ireplace("\\","",$valor);
    
$valor str_ireplace("!","",$valor);
    
$valor str_ireplace("¡","",$valor);
    
$valor str_ireplace("?","",$valor);
    
$valor str_ireplace("=","",$valor);
    
$valor str_ireplace("&","",$valor);
    return 
$valor;

  #27 (permalink)  
Antiguo 24/06/2013, 11:45
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Hackeo de la web

Cita:
Iniciado por Sergestux Ver Mensaje
Ahora definitivamente tienes que sanear tus variables de entrada ya que has hecho publico el código de validacion a menos que lo cambies por completo.
Muy buen punto, el error no fue hacerlo publico si no dar la url de su dominio , ahora se sabe como ese dominio loguea el sitio pero supongo yo que no lo dejara tal cual lo modificara lo mejorara y saneara todos los datos

sanear se refiere a eliminar todos los caracteres no deseados

1 - se debera de validar , ejemplo nos llega un email procedente de un formulario en primer lugar habra que validar que los datos cumplen los requisitos, pòr ejemplo para validar un email podemos usar FILTER_VALIDATE_EMAIL() y verificamos si es una direccion email valida , y no se realizara ningun cambio en el dato.

2 - saneamiento, limpiaremos los datos de modo que eliminaremos caracteres no deseados, por ejemplo para sanear un email usaremos FILTER_SANITIZE_EMAIL() de este modo eliminaremos todos los caracteres que no son apropiados para una direccion de correo .

ejemplos php.net

validacion http://www.php.net/manual/es/filter....validation.php
saneamiento http://www.php.net/manual/es/filter....nitization.php

por cierto si un usuario solo espera letras con validar if(ctype_alpha($var)) es mas que suficiente asi te ahorras tantos reemplazos

http://es1.php.net/manual/es/book.ctype.php

http://es1.php.net/manual/es/book.filter.php

¿por que en vez de buscar ejemplos en la red, no recomendamos usar el manual de php?

Última edición por webankenovi; 24/06/2013 a las 12:01
  #28 (permalink)  
Antiguo 24/06/2013, 14:48
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Hackeo de la web

muchas gracias a sergestux y a webankenovi por sus dos aportes, me han servido mucho para mejorar mi validador exponencialmente. gracias!!!
  #29 (permalink)  
Antiguo 24/06/2013, 14:58
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: Hackeo de la web

Muchas gracias! Oye, que de cosas estoy aprendiendo, si al final va a estar a resistencia de balas mi web jaaja Pero siempre me pasa lo mismo, me acaban hackeando espero que con el PDO y con estas validaciones y saneamientos no me ocurra lo mismo. Buen aporte...

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:11.