Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: exelovin en 8 Abril 2013, 16:36 pm



Título: Cómo evitar inyección SQL?
Publicado por: exelovin en 8 Abril 2013, 16:36 pm
Hola gente del foro, quiero contarles mi problema. resulta que tengo un script en el cual me hackean con la cuenta admin, osea si yo no creo un usuario con privilegios de admin no me pueden hackear, creo que es inyección SQL. mí pregunta es cómo soluciono eso? gracias.


Título: Re: Cómo evitar inyección SQL?
Publicado por: #!drvy en 8 Abril 2013, 18:11 pm
Lo que has puesto literalmente es:

Hola amigos, resulta que un ladrón entra a casa y me roba con el pin del sistema de alarma. Creo que es un ladron mi pregunta es como soluciono eso ?

Si no das detalles (como creas la cuenta, como la validas, como entras con ella etc..) poco se te puede ayudar y solo se puede especular..

Saludos


Título: Re: Cómo evitar inyección SQL?
Publicado por: BlackM4ster en 8 Abril 2013, 19:33 pm
Activa magic quotes, eso, a los lammer, les echa para atrás xD


Título: Re: Cómo evitar inyección SQL?
Publicado por: exelovin en 9 Abril 2013, 00:07 am
$query = mysql_query("SELECT id, activacion, ban, nick FROM usuarios WHERE nick = '".no_injection(trim($_POST['nick']))."' and password = '".no_injection(md5($_POST['pass']))."'") or die(mysql_error());


hay algo inseguro ahí? creo que por ahí me hackean...


Título: Re: Cómo evitar inyección SQL?
Publicado por: el-brujo en 10 Abril 2013, 16:35 pm
¿Ya has leído algo sobre SQLi?

¿limpias o validas la variable $nick o $pass?

¿cómo evitar inyección sql en php?
http://foro.elhacker.net/php/iquestcomo_evitar_inyeccion_sql_en_php-t307274.0.html


Título: Re: Cómo evitar inyección SQL?
Publicado por: l337* en 10 Abril 2013, 23:49 pm
Hola gente del foro, quiero contarles mi problema. resulta que tengo un script en el cual me hackean con la cuenta admin, osea si yo no creo un usuario con privilegios de admin no me pueden hackear, creo que es inyección SQL. mí pregunta es cómo soluciono eso? gracias.

siempre pon tus queries dentro de las comas simples o las atravesadas

$sql = "SELECT `id` FROM `tabla` WHERE id='".$_GET['id']."'"  ;

la otra seria, si esperas un id numerico:

if(isset($_GET['id']) && is_numeric($_GET['id'])) {
//ejecutar query
} else {
//return error y die();
}

si es en un script de inserts, update, delete, etc. limpia las variables con mysql_real_escape_string();

http://php.net/manual/en/function.mysql-real-escape-string.php


Título: Re: Cómo evitar inyección SQL?
Publicado por: exelovin en 13 Abril 2013, 12:33 pm
Así está bien?

Código:
$query = mysql_query("SELECT `id`, `activacion`, `ban`, `nick` FROM `usuarios` WHERE `nick` = '".mysql_real_escape_string(trim($_POST['nick']))."' and password = '".mysql_real_escape_string(md5($_POST['pass']))."'") or die(mysql_error());


Acá dejo el código entro...

Citar
<?php
require_once("header.php");

$user = mysql_real_escape_string($_POST["nick"]);
$pass = mysql_real_escape_string($_POST["pass"]);

if(empty($user) or empty($pass)){
   die('0: Faltan Datos');
}
$pass = md5($pass);
// Comprobamos los datos
$query = mysql_query("SELECT `id`, `activacion`, `ban`, `nick` FROM `usuarios` WHERE `nick` = '".mysql_real_escape_string(trim($_POST['nick']))."' and password = '".mysql_real_escape_string(md5($_POST['pass']))."'") or die(mysql_error());

if (!$data = mysql_fetch_array($query)){
   die('0: Datos no validos');
}

if($data["activacion"] != '1'){
   die('0: Activa Tu Usuario');
}

$baneo   =   "SELECT *
         FROM suspendidos
         WHERE nick='$user'";
$bane   =   mysql_query($baneo, $con);
$bane2   =   mysql_fetch_array($bane);

function ToUnix($string){
   $string = str_replace("/","-",$string);
    return strtotime($string);
}

  $baneo = $bane2['fecha2'];
 $dia = 60*60*24;
  $baneo2 = $baneo*$dia;
 $fechaone = ToUnix($bane2['fecha1']);
  $fechaone2 = $fechaone;
  
  if(date("d/m/Y",$baneo2+$fechaone2) == date("d/m/Y") and is_numeric($bane2['fecha2'])){
    mysql_query("UPDATE usuarios SET ban = 0 WHERE nick = '$user'");
   mysql_query("DELETE FROM suspendidos WHERE nick = '$user'");
}
  

if($data["ban"]=='1' and date("d/m/Y",$baneo2+$fechaone2) !== date("d/m/Y")){

    /*
   * Desarrollado por timbalentimba...
   *  Puto el que lee
   */





   echo'2:

<font color="red"><b>Tu cuenta se encuentra suspendida</b></font>
<p align=left>
<b>Causa:</b> '.$bane2['causa'].'
<br/><b>Fecha:</b> '.$bane2['fecha1'].'
<br/><b>Duraci&oacute;n:</b> '.(!is_numeric($bane2['fecha2']) ? 'Indefinido' : $bane2['fecha2'].' Dia/s');
 echo '<br> <b>Rehabilitacion el :</b> '.date("d/m/Y",$baneo2+$fechaone2);

die();
}

$ip = no_i($_SERVER['REMOTE_ADDR']);

$id_A = md5(uniqid(rand(), true));
$_SESSION['user'] = mysql_real_escape_string($data['nick']);
$_SESSION['id'] = $data['id'];
$_SESSION['id2'] = $id_A;

$id_B = $data["id"]."%".$id_A."%".$ip;
setcookie('id_extreme', $id_B, time()+7776000,'/');
$query = mysql_query("UPDATE `usuarios` SET `id_extreme` = '".$id_A."' WHERE `nick` = '".mysql_real_escape_string($_POST['nick'])."'");

echo'1:';
?>

Hay otra vulnerabilidad?