Test Foro de elhacker.net SMF 2.1

Seguridad Informática => Bugs y Exploits => Hacking => Nivel Web => Mensaje iniciado por: DarkItachi en 11 Octubre 2009, 19:07 PM

Título: ¿Es mi código seguro?
Publicado por: DarkItachi en 11 Octubre 2009, 19:07 PM
Buenas estuve haciendo un login en php y más tarde me enteré de bugs en codigos, inyecciones sql y demás, estoy temeroso y no se si mi código es seguro, agradecería que me lo dijeráis.

Gracias

PD: Si podéis aportar también algun consejo os lo agradecería. Gracias.

Ahí va:

Código (php) [Seleccionar]

<?php
include 'config.php';
$usuario=$_REQUEST['user'];
$pass=$_REQUEST['pass'];
$texto=$_REQUEST['texto'];
if (empty(
$usuario) || empty($pass) || empty($texto)) die("<center><font color=red size=17>No has introducido un nombre de usuario, contraseña o texto.</font></center>");
$conexion=mysql_connect($host,$user,$password) or die(mysql_error($conexion));
mysql_select_db($database,$conexion) or die(mysql_error($conexion));
$consulta=mysql_query("SELECT usuario, passphrase FROM jugadores WHERE usuario='$usuario'") or die(mysql_error($conexion));
if (
1>mysql_num_rows($consulta)) die("<center><font color='red' size='17'><b>Usuario inexistente.</b></font></center>");
$datos=mysql_fetch_assoc($consulta);
if (
md5($pass)==$datos['passphrase'])
{
echo 
"<center><font color='green' size='17'>Login correcto.<br><b>Mensaje circular enviado</b></font></center>";
//(OTRO CODE)
}
}
else
{
echo 
"<center><font color=red size='17'>Login incorrecto.</font></center>";
}
mysql_close($conexion);
?>
Título: Re: ¿Es mi código seguro?
Publicado por: Nakp en 11 Octubre 2009, 19:58 PM
no xD, no filtras ni user, ni pass, ni texto...

Código (php) [Seleccionar]
$usuario=mysql_real_escape_string(stripslashes($_REQUEST['user']));
Título: Re: ¿Es mi código seguro?
Publicado por: DarkItachi en 11 Octubre 2009, 20:17 PM
Y que pasa si no los filtro?

Osea mejor dicho, para el código de antes, como le aplicarías una inyección SQL?
Título: Re: ¿Es mi código seguro?
Publicado por: jdc en 11 Octubre 2009, 20:29 PM
En el código anterior se pueden meter símbolos (',-,",+*, etc) por lo que tus campos se pueden usar casi como una consola de sql realizando consultas que tú código vómitara xD osea tú nombre, tú contraseña y todo lo que tengas en tú base de datos
Título: Re: ¿Es mi código seguro?
Publicado por: DarkItachi en 11 Octubre 2009, 22:13 PM
Cita de: janito24 en 11 Octubre 2009, 20:29 PM
En el código anterior se pueden meter símbolos (',-,",+*, etc) por lo que tus campos se pueden usar casi como una consola de sql realizando consultas que tú código vómitara xD osea tú nombre, tú contraseña y todo lo que tengas en tú base de datos

Ya... Me refería en un ejemplo práctico, pregunté si era seguro porqué probe de hacer esto:

Suponiendo que usuario= ' OR 1=1
$consulta=mysql_query("SELECT usuario, passphrase FROM jugadores WHERE usuario=' ' OR 1=1") or die(mysql_error($conexion));

Eso no escribe en la pagina datos personales, entonces, es seguro el código no?

Porque me retorna:

Usuario inexistente. (lo cual es logico xd)

Y nada más.
Título: Re: ¿Es mi código seguro?
Publicado por: WHK en 11 Octubre 2009, 22:21 PM
De usuario pongo esto:

admin' union select 'admin','e10adc3949ba59abbe56e057f20f883e',3,4,'5

Por lo tanto le hará select a los datos del administrador y devolverá user admin y pass el md5 de "123456", asi que de pass le pongo 123456 y ya soy admin ^^

Esto se parece a un reto que existe en el warzone xD

En el caso de:
CitarSuponiendo que usuario= ' OR 1=1
$consulta=mysql_query("SELECT usuario, passphrase FROM jugadores WHERE usuario=' ' OR 1=1") or die(mysql_error($conexion));

no estás haciendo inyección ya que la inyeccion se la haces orientado al password no al usuario, si no hay usuario válido puede darte error como te dió a ti, para inyectar necesitas devolver un dato válido, por ejemplo al final puedes aplicar un where like username = '%' y con eso ya te jodió el sistema o incluso hacer concat sin la necesidad de hacer comillas.

http://foro.elhacker.net/nivel_web/como_evitar_la_inyeccion_sql-t252384.0.html
http://foro.elhacker.net/seguridad/prevenir_sql_injection-t261480.0.html
http://foro.elhacker.net/nivel_web/temas_mas_destacados_fallas_y_explotaciones_a_nivel_web_actualizado_71009-t244090.0.html
Título: Re: ¿Es mi código seguro?
Publicado por: DarkItachi en 11 Octubre 2009, 22:38 PM
Cita de: WHK en 11 Octubre 2009, 22:21 PM
De usuario pongo esto:

admin' union select 'admin','e10adc3949ba59abbe56e057f20f883e',3,4,'5

Por lo tanto le hará select a los datos del administrador y devolverá user admin y pass el md5 de "123456", asi que de pass le pongo 123456 y ya soy admin ^^

Esto se parece a un reto que existe en el warzone xD

En el caso de:
CitarSuponiendo que usuario= ' OR 1=1
$consulta=mysql_query("SELECT usuario, passphrase FROM jugadores WHERE usuario=' ' OR 1=1") or die(mysql_error($conexion));

no estás haciendo inyección ya que la inyeccion se la haces orientado al password no al usuario, si no hay usuario válido puede darte error como te dió a ti, para inyectar necesitas devolver un dato válido, por ejemplo al final puedes aplicar un where like username = '%' y con eso ya te jodió el sistema o incluso hacer concat sin la necesidad de hacer comillas.

http://foro.elhacker.net/nivel_web/como_evitar_la_inyeccion_sql-t252384.0.html
http://foro.elhacker.net/seguridad/prevenir_sql_injection-t261480.0.html
http://foro.elhacker.net/nivel_web/temas_mas_destacados_fallas_y_explotaciones_a_nivel_web_actualizado_71009-t244090.0.html

Ahí me refería yo, muchas gracias :D

Voy a revisarme esos links que me has dado :D

Muchas gracias :P
Título: Re: ¿Es mi código seguro?
Publicado por: Debci en 11 Octubre 2009, 22:51 PM
Cita de: DarkItachi en 11 Octubre 2009, 19:07 PM
Buenas estuve haciendo un login en php y más tarde me enteré de bugs en codigos, inyecciones sql y demás, estoy temeroso y no se si mi código es seguro, agradecería que me lo dijeráis.

Gracias

PD: Si podéis aportar también algun consejo os lo agradecería. Gracias.

Ahí va:

Código (php) [Seleccionar]

<?php
include 'config.php';
$usuario=$_REQUEST['user'];
$pass=$_REQUEST['pass'];
$texto=$_REQUEST['texto'];
if (empty(
$usuario) || empty($pass) || empty($texto)) die("<center><font color=red size=17>No has introducido un nombre de usuario, contraseña o texto.</font></center>");
$conexion=mysql_connect($host,$user,$password) or die(mysql_error($conexion));
mysql_select_db($database,$conexion) or die(mysql_error($conexion));
$consulta=mysql_query("SELECT usuario, passphrase FROM jugadores WHERE usuario='$usuario'") or die(mysql_error($conexion));
if (
1>mysql_num_rows($consulta)) die("<center><font color='red' size='17'><b>Usuario inexistente.</b></font></center>");
$datos=mysql_fetch_assoc($consulta);
if (
md5($pass)==$datos['passphrase'])
{
echo 
"<center><font color='green' size='17'>Login correcto.<br><b>Mensaje circular enviado</b></font></center>";
//(OTRO CODE)
}
}
else
{
echo 
"<center><font color=red size='17'>Login incorrecto.</font></center>";
}
mysql_close($conexion);
?>

en principio me parece ver un posible xss por no filtrar los datos (con temor a equivocarme ¬¬)

Saludos
Título: Re: ¿Es mi código seguro?
Publicado por: DarkItachi en 11 Octubre 2009, 23:25 PM
Acabo de probar una inyeccion y no me afecta.

Pongo de usuario:

-1' UNION UPDATE jugadores SET passphrase='202cb962ac59075b964b07152d234b70' WHERE usuario='admin

Pero no me cambia nada.

jugadores es el nombre de la tabla
passphrase es el campo de la contraseña
La passphrase que le asigno es el md5 de 123

Después de esto la pass sigue siendo la misma de antes, no ha cambiado.

¿Alguien sabe porqué?
Título: Re: ¿Es mi código seguro?
Publicado por: Jubjub en 11 Octubre 2009, 23:29 PM
Tienes activadas las magic quotes.

Pero no debes de fiarte de ellas, ya las han marcado como "deprecated", y posiblemente desaparezcan en algo de tiempo, filtra comillas intensivamente ;)
Título: Re: ¿Es mi código seguro?
Publicado por: WHK en 11 Octubre 2009, 23:29 PM
CitarPongo de usuario:

-1' UNION UPDATE jugadores SET passphrase='202cb962ac59075b964b07152d234b70' WHERE usuario='admin

Porque no puedes hacer un update dentro de un select  :P

http://foro.elhacker.net/nivel_web/inyeccion_sql_mysql_update_dentro_de_un_select-t241813.0.html

todo eso está en el mismo enace que te di mas arriba  :P.

Lo que puedes hacer son dos cosas:

1. Leer todos esos enlaces y documentarte mas sobre seguridad web para entender que debes aplicar el filtro que te dijo nakp.
2. aplicar el filtro que te dijo nakp sin leer nada.
Título: Re: ¿Es mi código seguro?
Publicado por: DarkItachi en 11 Octubre 2009, 23:57 PM
Cita de: WHK en 11 Octubre 2009, 23:29 PM
CitarPongo de usuario:

-1' UNION UPDATE jugadores SET passphrase='202cb962ac59075b964b07152d234b70' WHERE usuario='admin

Porque no puedes hacer un update dentro de un select  :P

http://foro.elhacker.net/nivel_web/inyeccion_sql_mysql_update_dentro_de_un_select-t241813.0.html

todo eso está en el mismo enace que te di mas arriba  :P.

Lo que puedes hacer son dos cosas:

1. Leer todos esos enlaces y documentarte mas sobre seguridad web para entender que debes aplicar el filtro que te dijo nakp.
2. aplicar el filtro que te dijo nakp sin leer nada.

Ok, pero hay una cosilla que no entiendo :S  :-(

A ver tu usas esto, no?


admin' union select 'admin','e10adc3949ba59abbe56e057f20f883e',3,4

Con eso estas asignando la pass al admin? Yo pensaba que select era solo para mostrar datos :S

De donde vienen el ,3,4?
Título: Re: ¿Es mi código seguro?
Publicado por: Hadess_inf en 13 Octubre 2009, 02:57 AM
No uses REQUEST .
Título: Re: ¿Es mi código seguro?
Publicado por: DarkItachi en 13 Octubre 2009, 06:48 AM
Cita de: Hadess_inf en 13 Octubre 2009, 02:57 AM
No uses REQUEST .

Gracias por el consejo, otra cosa, podríais responderme a esto porfavor?

Ok, pero hay una cosilla que no entiendo :S  :-(

Cita de: DarkItachiA ver tu usas esto, no?


admin' union select 'admin','e10adc3949ba59abbe56e057f20f883e',3,4

Con eso estas asignando la pass al admin? Yo pensaba que select era solo para mostrar datos :S

De donde vienen el ,3,4?
Título: Re: ¿Es mi código seguro?
Publicado por: WHK en 13 Octubre 2009, 07:57 AM
para esas preguntas necesitas saber primero programar en mysql, saber que union concatea dos selecciones y cada valor es una columna para igualar a las comumnas del primer select y no estoy actualizando contraseñas, me estoy devolviendo datos falsos para hacer login

http://foro.elhacker.net/nivel_web/temas_mas_destacados_fallas_y_explotaciones_a_nivel_web_actualizado_71009-t244090.0.html

Donde dice
CitarTutoriales y talleres
hazle click a todo lo que diga inyección SQL.

aunque no te va a servir de nada si no sabes mucho de mysql
Título: Re: ¿Es mi código seguro?
Publicado por: дٳŦ٭ en 13 Octubre 2009, 19:00 PM
No uses PHP, no leas a WHK (únicamente quiere hackearte), no visites elhacker.net (tiene malwares), no useís internet, no prendas tu pc, no salgas a la calle, no te muevas de tu lugar ya que puedes resbalar. XDDDDDDD Es broma jaja.

Mira, lo muevo a bugs web ya que allá hay más expertos que por acá, pero pásate por:

Parser htmlspecialchars()
https://foro.elhacker.net/php/parser_htmlspecialchars-t257852.0.html

NST Web Based Anti-DoS v0.1 
https://foro.elhacker.net/php/nst_web_based_antidos_v01-t257187.0.html