Injeccion SQL?

23/08/2007 - 18:38 por Antonio Ortiz | Informe spam
Que me han hackeado un sitio, y no se exactamente como, les cuento un poco

Tengo un portal para empresas, donde se registran y colocan sus datos que se
muestran en un directorio, el unico lugar donde meten datos es al iniciar
sesion con su nombre de usuario y contraseña y donde capturan sus datos.

Un dia cualquiera los datos de una empresa estan cambiados con un mensaje de
un sitio hacker, los datos de esa empresa son precisamente los mios,
capturados como ejemplo.

Me podrian decir como evitar esto?, que medidas puedo tomar?,

pueden injectar codigo sql por el nombre del usuario (o password) para ? ,
el codigo que valida esto es un simple 'select usuario, pass from usuarios
where nombre=varnombre and pass=varpass' (similar)


gracias


Antonio Ortiz
asesor en sistemas
ant(a)aortiz.net
www.aortiz.net
www.progvisual.com

Preguntas similare

Leer las respuestas

#16 Carlos Sacristan
24/08/2007 - 10:57 | Informe spam
En el blog de Chema Alonso (el "maligno") puedes leer unas cuantas
entradas sobre SQL Injection. Se hace muy ameno porque este personaje es...
cuanto menos inclasificable :-). Ya verás cuando lo leas:
http://elladodelmal.blogspot.com/se...0Injection

"Alejandro Mesa" escribió en el
mensaje news:
Antonio Ortiz,

Como comentaron Isaias y Salvador, puedes evitar esto si usas
procedimientos
almacenados que hagan uso de parametros. Si usas sps pero vuelves a hacer
la
concatenacion, entonces te expones al mismo problema, lo que esta vez en
la
parte del servidor.

1 - Usar procedimientos almacenados con parametros que se usen
directamente
en la sentencia.

create procedure dbo.chequear_usuario (
@nombre varchar(25),
@pass varchar(25),
@validado int output
)
as
set nocount on

if exists (select * from dbo.usuarios where nombre = @nombre and pass =
@pass)
set @validado = 1
else
set validado = 0
go

2 - Si insistes en armar la sentencia en el lado de la aplicacion cliente,
debes parametrizarla y usar el objeto SQLCommand y llenar la coleccion de
parametros. Puedes parametrizar la sentencia o usar sp_executesql
directamente en tu codigo.

Te paso un link donde se toca todo este tema al detalle.

Las virtudes y maldades del SQL dinámico
http://www.hayes.ch/sql/sql_dinamico.html

SqlCommand.Parameters Property
http://msdn2.microsoft.com/en-us/li...parameters(VS.71).aspx

Using Stored Procedures with a Command
http://msdn2.microsoft.com/en-us/library/yy6y35y8(VS.71).aspx

Tomen esto como algo serio y que le puede pasar a cualquiera. Hace uno o
dos
meses, la sucursal de Microsoft en UK fue atacada usando este metodo. Aqui
les paso la noticia.

http://www.pcworld.com/article/id,1...ticle.html


AMB

"Antonio Ortiz" wrote:


ya veo porque mi colaborador, inmediatamente sugirio validar:

Rs.Open "select usuario, pass from usuarios where (nombre = ' " &
varnombre
& " ') And (pass = ' " & varpass " ') ", Conexion
'La separacion de los apostrofes y las comillas es por legibilidad
If ( Not Recorset.EOF ) Then
If( (Recordset!CampoNombre=VarNombre) and
(Recordset!CampoNombre=VarPass) ) Then '*** nueva validacion***
'Usuario valido
Else
'Usuario invalido
End If
End If

que opinas?

Antonio Ortiz
asesor en sistemas
ant(a)aortiz.net
www.aortiz.net
www.progvisual.com




"Victor Koch" <v i c t o r
(arroba)correo(punto)waldbott(punto)com(punto)ar>
escribió en el mensaje news:%
> Suponete que el operador te ingresa en la password esto
>
> 1 OR 1=1
>
> ¿ Como quedaria armada tu SQL ?
>
> 'select usuario, pass from usuarios where nombre=varnombre and pass=1
> OR
> 1=1'
>
>
> Un saludo, Víctor Koch.
>
>
> "Antonio Ortiz" escribió en el mensaje
> news:
>>
>> Que me han hackeado un sitio, y no se exactamente como, les cuento un
>> poco
>>
>> Tengo un portal para empresas, donde se registran y colocan sus datos
>> que
> se
>> muestran en un directorio, el unico lugar donde meten datos es al
>> iniciar
>> sesion con su nombre de usuario y contraseña y donde capturan sus
>> datos.
>>
>> Un dia cualquiera los datos de una empresa estan cambiados con un
>> mensaje
> de
>> un sitio hacker, los datos de esa empresa son precisamente los mios,
>> capturados como ejemplo.
>>
>> Me podrian decir como evitar esto?, que medidas puedo tomar?,
>>
>> pueden injectar codigo sql por el nombre del usuario (o password) para
>> ?
>> ,
>> el codigo que valida esto es un simple 'select usuario, pass from
>> usuarios
>> where nombre=varnombre and pass=varpass' (similar)
>>
>>
>> gracias
>>
>>
>> Antonio Ortiz
>> asesor en sistemas
>> ant(a)aortiz.net
>> www.aortiz.net
>> www.progvisual.com
>>
>>
>
>



Respuesta Responder a este mensaje
#17 Alejandro Mesa
24/08/2007 - 15:48 | Informe spam
Carlos,

Gracias por el link, esta muy interesante.

AMB

"Carlos Sacristan" wrote:

En el blog de Chema Alonso (el "maligno") puedes leer unas cuantas
entradas sobre SQL Injection. Se hace muy ameno porque este personaje es...
cuanto menos inclasificable :-). Ya verás cuando lo leas:
http://elladodelmal.blogspot.com/se...0Injection

"Alejandro Mesa" escribió en el
mensaje news:
> Antonio Ortiz,
>
> Como comentaron Isaias y Salvador, puedes evitar esto si usas
> procedimientos
> almacenados que hagan uso de parametros. Si usas sps pero vuelves a hacer
> la
> concatenacion, entonces te expones al mismo problema, lo que esta vez en
> la
> parte del servidor.
>
> 1 - Usar procedimientos almacenados con parametros que se usen
> directamente
> en la sentencia.
>
> create procedure dbo.chequear_usuario (
> @nombre varchar(25),
> @pass varchar(25),
> @validado int output
> )
> as
> set nocount on
>
> if exists (select * from dbo.usuarios where nombre = @nombre and pass =
> @pass)
> set @validado = 1
> else
> set validado = 0
> go
>
> 2 - Si insistes en armar la sentencia en el lado de la aplicacion cliente,
> debes parametrizarla y usar el objeto SQLCommand y llenar la coleccion de
> parametros. Puedes parametrizar la sentencia o usar sp_executesql
> directamente en tu codigo.
>
> Te paso un link donde se toca todo este tema al detalle.
>
> Las virtudes y maldades del SQL dinámico
> http://www.hayes.ch/sql/sql_dinamico.html
>
> SqlCommand.Parameters Property
> http://msdn2.microsoft.com/en-us/li...parameters(VS.71).aspx
>
> Using Stored Procedures with a Command
> http://msdn2.microsoft.com/en-us/library/yy6y35y8(VS.71).aspx
>
> Tomen esto como algo serio y que le puede pasar a cualquiera. Hace uno o
> dos
> meses, la sucursal de Microsoft en UK fue atacada usando este metodo. Aqui
> les paso la noticia.
>
> http://www.pcworld.com/article/id,1...ticle.html
>
>
> AMB
>
> "Antonio Ortiz" wrote:
>
>>
>> ya veo porque mi colaborador, inmediatamente sugirio validar:
>>
>> Rs.Open "select usuario, pass from usuarios where (nombre = ' " &
>> varnombre
>> & " ') And (pass = ' " & varpass " ') ", Conexion
>> 'La separacion de los apostrofes y las comillas es por legibilidad
>> If ( Not Recorset.EOF ) Then
>> If( (Recordset!CampoNombre=VarNombre) and
>> (Recordset!CampoNombre=VarPass) ) Then '*** nueva validacion***
>> 'Usuario valido
>> Else
>> 'Usuario invalido
>> End If
>> End If
>>
>> que opinas?
>>
>> Antonio Ortiz
>> asesor en sistemas
>> ant(a)aortiz.net
>> www.aortiz.net
>> www.progvisual.com
>>
>>
>>
>>
>> "Victor Koch" <v i c t o r
>> (arroba)correo(punto)waldbott(punto)com(punto)ar>
>> escribió en el mensaje news:%
>> > Suponete que el operador te ingresa en la password esto
>> >
>> > 1 OR 1=1
>> >
>> > ¿ Como quedaria armada tu SQL ?
>> >
>> > 'select usuario, pass from usuarios where nombre=varnombre and pass=1
>> > OR
>> > 1=1'
>> >
>> >
>> > Un saludo, Víctor Koch.
>> >
>> >
>> > "Antonio Ortiz" escribió en el mensaje
>> > news:
>> >>
>> >> Que me han hackeado un sitio, y no se exactamente como, les cuento un
>> >> poco
>> >>
>> >> Tengo un portal para empresas, donde se registran y colocan sus datos
>> >> que
>> > se
>> >> muestran en un directorio, el unico lugar donde meten datos es al
>> >> iniciar
>> >> sesion con su nombre de usuario y contraseña y donde capturan sus
>> >> datos.
>> >>
>> >> Un dia cualquiera los datos de una empresa estan cambiados con un
>> >> mensaje
>> > de
>> >> un sitio hacker, los datos de esa empresa son precisamente los mios,
>> >> capturados como ejemplo.
>> >>
>> >> Me podrian decir como evitar esto?, que medidas puedo tomar?,
>> >>
>> >> pueden injectar codigo sql por el nombre del usuario (o password) para
>> >> ?
>> >> ,
>> >> el codigo que valida esto es un simple 'select usuario, pass from
>> >> usuarios
>> >> where nombre=varnombre and pass=varpass' (similar)
>> >>
>> >>
>> >> gracias
>> >>
>> >>
>> >> Antonio Ortiz
>> >> asesor en sistemas
>> >> ant(a)aortiz.net
>> >> www.aortiz.net
>> >> www.progvisual.com
>> >>
>> >>
>> >
>> >
>>
>>
>>



Respuesta Responder a este mensaje
#18 Gustavo Larriera \(MVP\)
24/08/2007 - 17:46 | Informe spam
No conocia esyte blog de Chema, muy bueno y divertido. Hacer que temas de
seguridad suenen divertidos, poca gente es capaz de eso.

Gracias, saludos.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.

"Carlos Sacristan" <nomail> wrote in message
news:
En el blog de Chema Alonso (el "maligno") puedes leer unas cuantas
entradas sobre SQL Injection. Se hace muy ameno porque este personaje
es... cuanto menos inclasificable :-). Ya verás cuando lo leas:
http://elladodelmal.blogspot.com/se...0Injection

"Alejandro Mesa" escribió en el
mensaje news:
Antonio Ortiz,

Como comentaron Isaias y Salvador, puedes evitar esto si usas
procedimientos
almacenados que hagan uso de parametros. Si usas sps pero vuelves a hacer
la
concatenacion, entonces te expones al mismo problema, lo que esta vez en
la
parte del servidor.

1 - Usar procedimientos almacenados con parametros que se usen
directamente
en la sentencia.

create procedure dbo.chequear_usuario (
@nombre varchar(25),
@pass varchar(25),
@validado int output
)
as
set nocount on

if exists (select * from dbo.usuarios where nombre = @nombre and pass =
@pass)
set @validado = 1
else
set validado = 0
go

2 - Si insistes en armar la sentencia en el lado de la aplicacion
cliente,
debes parametrizarla y usar el objeto SQLCommand y llenar la coleccion de
parametros. Puedes parametrizar la sentencia o usar sp_executesql
directamente en tu codigo.

Te paso un link donde se toca todo este tema al detalle.

Las virtudes y maldades del SQL dinámico
http://www.hayes.ch/sql/sql_dinamico.html

SqlCommand.Parameters Property
http://msdn2.microsoft.com/en-us/li...parameters(VS.71).aspx

Using Stored Procedures with a Command
http://msdn2.microsoft.com/en-us/library/yy6y35y8(VS.71).aspx

Tomen esto como algo serio y que le puede pasar a cualquiera. Hace uno o
dos
meses, la sucursal de Microsoft en UK fue atacada usando este metodo.
Aqui
les paso la noticia.

http://www.pcworld.com/article/id,1...ticle.html


AMB

"Antonio Ortiz" wrote:


ya veo porque mi colaborador, inmediatamente sugirio validar:

Rs.Open "select usuario, pass from usuarios where (nombre = ' " &
varnombre
& " ') And (pass = ' " & varpass " ') ", Conexion
'La separacion de los apostrofes y las comillas es por legibilidad
If ( Not Recorset.EOF ) Then
If( (Recordset!CampoNombre=VarNombre) and
(Recordset!CampoNombre=VarPass) ) Then '*** nueva validacion***
'Usuario valido
Else
'Usuario invalido
End If
End If

que opinas?

Antonio Ortiz
asesor en sistemas
ant(a)aortiz.net
www.aortiz.net
www.progvisual.com




"Victor Koch" <v i c t o r
(arroba)correo(punto)waldbott(punto)com(punto)ar>
escribió en el mensaje news:%
> Suponete que el operador te ingresa en la password esto
>
> 1 OR 1=1
>
> ¿ Como quedaria armada tu SQL ?
>
> 'select usuario, pass from usuarios where nombre=varnombre and pass=1
> OR
> 1=1'
>
>
> Un saludo, Víctor Koch.
>
>
> "Antonio Ortiz" escribió en el mensaje
> news:
>>
>> Que me han hackeado un sitio, y no se exactamente como, les cuento un
>> poco
>>
>> Tengo un portal para empresas, donde se registran y colocan sus datos
>> que
> se
>> muestran en un directorio, el unico lugar donde meten datos es al
>> iniciar
>> sesion con su nombre de usuario y contraseña y donde capturan sus
>> datos.
>>
>> Un dia cualquiera los datos de una empresa estan cambiados con un
>> mensaje
> de
>> un sitio hacker, los datos de esa empresa son precisamente los mios,
>> capturados como ejemplo.
>>
>> Me podrian decir como evitar esto?, que medidas puedo tomar?,
>>
>> pueden injectar codigo sql por el nombre del usuario (o password)
>> para ?
>> ,
>> el codigo que valida esto es un simple 'select usuario, pass from
>> usuarios
>> where nombre=varnombre and pass=varpass' (similar)
>>
>>
>> gracias
>>
>>
>> Antonio Ortiz
>> asesor en sistemas
>> ant(a)aortiz.net
>> www.aortiz.net
>> www.progvisual.com
>>
>>
>
>









email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida