Mailinglist Archive: opensuse-es (1511 mails)

< Previous Next >
Re: [suse-linux-s] Fwd: [suse-security] SUSE Security Announcement: cron local privilege escalation (SUSE-SA:2006:027)
  • From: "miguel gmail" <miguel.listas@xxxxxxxxx>
  • Date: Fri, 2 Jun 2006 00:17:46 +0200
  • Message-id: <578ebdde0606011517n6274fc7fnd8e1f1e242ea5cdd@xxxxxxxxxxxxxx>
Si, efectivamente. Los lenguaje en si mismos tiene muy pocos problemas
(pero los tienen) no así las aplicaciones. Por cada "exploid" que se
publica que afecte a PHP (como lenguaje) salen tres o cuatro que afectan
a PHP-BB o a PHP-Nuke y algunos más para el resto de aplicaciones
medianamente populares en PHP..

Aunque este no sea el lugar:

oh si, si lo es.


[OFF TOPIC ON]

Supongamos que validamos usuarios remotos mediante una base de datos SQL
(p.e. MySQL)

Para ello utilizamos la siguiente consulta SQL:

$sql = "SELECT * FROM usuario WHERE id = '" . $id ;
$sql .= "' AND pwd = '" . $pwd . "'" ;

Se entran los valores del formulario y hasta aquí todo normal. :-)

Comprobaremos si la contraseña entrada es correcta:

SELECT * FROM usuario WHERE id = 'primoroot' AND pwd = 'myPaSSword'

Y nos dirá si es verdadera o falsa.

Sin embargo si tu en cuando se te pide el password pones:

"NoLoSe ' OR " a=a '

Entonces se formará una cadena tal como esta:

SELECT * FROM usuario WHERE id = 'primoroot' AND pwd = 'NoLoSe ' OR ''a
=a ' '

... y claro, es evidente que todo el mundo es igual a si mismo (a=a) y
que aunque el password no es el mismo (myPaSSword es diferente que
NoLoSe) la segunda condición se cumple. (El OR significa que o se
cumple la primera o se cumple la segunda condición.

Como la segunda siempre se cumplirá ya no necesitaríamos ningún password
(ni propio ni ajeno) para acceder a cualquier lugar con validación con
PHP+SQL. :-)

[OFF TOPIC OFF]

:O

Esa es la famosa inyección sql, no? Pero... como se inyecta?

Recordando de mis tiempos de programador (en ASP), se pueden pasar
variables de sesión de dos maneras distintas:

- metodo post
- metodo get

Uno de estos, no recuerdo cual, usaba la url para pasar los
parámetros. El otro método, hablando muy de memoria, usaba variables
de sesión. A mi me gustaba más este método, aunque tampoco recuerdo
por qué (supongo que por mantener ocultas las variables en la url).

La pregunta es: cual de estos métodos es sensible a la inyección de
sql? O lo son los dos?


De quien es la culpa de que no se validen correctamente las comillas ?
Del programdor de la aplicación, del desarrollador de PHP o del de SQL ?????

Personalmente creo que son culpas compartidas, aunque en general es más
del programador.

Vale, entonces, que tendría que hacer el programador para evitar esto?

--
Saludos,
miguel

--
Para dar de baja la suscripción, mande un mensaje a:
suse-linux-s-unsubscribe@xxxxxxxx
Para obtener el resto de direcciones-comando, mande
un mensaje a:
suse-linux-s-help@xxxxxxxx


< Previous Next >
List Navigation
Follow Ups