ASP.net + Injeccion SQL

Iniciado por acid0ikario, 19 Febrero 2011, 23:03 PM

0 Miembros y 1 Visitante están viendo este tema.

acid0ikario

en primer lugar tengan buenas tardes la duda es la siguiente:

tengo el siguiente codigo de un login en asp.net:

Código (vbnet) [Seleccionar]
Imports System.Data
Imports System.Data.SqlClient
Partial Class Login : Inherits System.Web.UI.Page
    Dim Link As New Sql
    Dim Sql As SqlCommand
    Dim Ler As SqlDataReader
    Dim i As Boolean
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.TextBox1.Focus()
    End Sub
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim tipo As String = ""
        Dim Nom As String = ""
        Dim ie As String = ""
        Sql = New SqlCommand("select * from usuario", Link.Con)
        Dim ide As New HH84.HH84
        ' se ocupa el algorito MD5 para cifrar el password
        ' y asi esta guardado en la base de datos algo parecido a esto: e99008846853ff3b725c27315e469fbc

        dim pass = ide.GenerarHash(Me.TextBox2.Text)

        Try
            Link.Con.Open()
        Catch ex As Exception
            Me.Label3.Text = "Error: " & ex.Message
            Me.Label3.Visible = True
        End Try
        Try
            Ler = Sql.ExecuteReader
            While Ler.Read
'texbox1 es el usuario
'texbox2 es la contraseña
                If Ler(1).Equals(Me.TextBox1.Text) And Ler(2).Equals(pass) Then
                    Nom = Ler(3)
                    ie = Ler(0)
                    tipo = Ler(7)
                    i = True
                Else
                    Me.Label1.Visible = True
                    Me.Label1.Text = "Su Usuario o password es Invalida"
                End If
            End While
        Catch ex As Exception
            Me.Label3.Text = "Error: " & ex.Message
            Me.Label3.Visible = True
        End Try

        Try
            Link.Con.Close()
        Catch ex As Exception
            Me.Label3.Text = "Error: " & ex.Message
            Me.Label3.Visible = True
        End Try

        If i = True Then
            Session("ie") = ie
            If tipo = "Administrador" Then
                Session("tipo") = "Administrador"
                Session("Login") = True
                Session("Nom") = Nom
                Session("estado") = "OnLine"
                Response.Redirect("Principal.aspx")
            ElseIf tipo = "Gestor" Then
                Session("tipo") = "Gestor"
                Session("Login") = True
                Session("Nom") = Nom
                Session("estado") = "OnLine"
                Response.Redirect("Gestor.aspx")
            ElseIf tipo = "Comite" Then
                Session("tipo") = "Comite"
                Session("Nom") = Nom
                Session("estado") = "OnLine"
                Session("Login") = True
                Response.Redirect("Comite.aspx")
            ElseIf tipo = "Entrevistador" Then
                Session("tipo") = "Entrevistador"
                Session("Nom") = Nom
                Session("estado") = "OnLine"
                Session("Login") = True
                Response.Redirect("Entrevistas.aspx")
            Else
                Me.Label1.Visible = True
                Me.Label1.Text = "Su Usuario o password es Invalida"
            End If
        End If
    End Sub
End Class


y estos son los campos de la tabla usuario:

id_usuario
usuario
contraseña
nombre
apellido
telefono
correo
tipo
estado

ahora sabiendo como esta estructurado el codigo del login y como esta estructurada la tabla usuario.

¿ se puede atacar este login con Injeccion SQL?

¿ Cual seria la sentencia para realizar el ataque?

¿ si no es posible realizar Injeccion SQL a este codigo que otro metodo podria utlizar?


esperando su ayuda muchas gracias.

.mokk.

Ami parecer no no se puede hacer nada en el ya que lo que hace es solo hacer una consulta que llama a todo lo que haya en la tabla usuarios, pero jamas hace algun tipo de Select * From usuarios WHERE Usuario='text1' and Contraseña='text2' , jamas se hace algo asi ahi si se pudiese hacer talvez una sql injeccion pero con el codigo que muestras al parecer no se puede hacer nada.

Y tambien la forma de loguearse se me hace medio tonta hehe, ya que llama a toda la tabla usuarios lo cual si son bastantes tardara bastante en avanzar a la siguiente fase y solo seria perdida, ahi seria mejor usar una consulta con where, claro colocandole un antisql ahi o am para que no acepte palabras como where,update o esas en los textbox.

acid0ikario

ummm bueno gracias por tu respuesta.

bueno la verdad este es un sistema codificado por mi y un amigo no nos pusimos a pensar lo que tardaria un usuario en iniciar sesion, pero dado el sistema no creo que tenga mas de 20 usuarios en la base de datos, pero lo tomaremos muy encuenta para futuros sistemas.

aparte de eso abria otro metedo para atacar este login??

.mokk.

Ami parecer seria todo ahi, faltaria tambien revisar el de registro.

acid0ikario

pero y el codigo del registro para que??

pero este es el codigo del registro

Código (vbnet) [Seleccionar]
If nom.Equals("") Or ape.Equals("") Or tel.Equals("") Or mail.Equals("") Or user.Equals("") Or pass.Equals("") Or tipo.Equals("Seleccione uno") Then
            Me.Label5.Visible = True
            Me.Label5.Text = " Campos  Obligatorios"
        Else
            Sql = New SqlCommand("SELECT * FROM usuario WHERE usuario = '" & user & "'", Link.Con)
            Link.Con.Open()
            Cad = Sql.ExecuteReader
            While Cad.Read
                Me.Label6.Text = Cad(1)
            End While
            Link.Con.Close()
            If Me.Label6.Text <> "" Then
                Me.Label5.Visible = True
                Me.Label5.Text = " El Usuario ya Existe "
                Me.Label6.Text = ""
            Else
                Try
                    pass = add.GenerarHash(Me.TextBox6.Text)
                Catch ex As Exception
                    Me.Label2.Text = "error al generar pass"
                End Try
                Try
                    Link.Con.Open()
                Catch ex As Exception
                    Me.Label2.Text = "error al abrir la conexion"
                End Try
                Sql = New SqlCommand("insert into usuario values('" & user & "','" & pass & "','" & nom & "','" & ape & "','" & tel & "','" & mail & "','" & tipo & "')", Link.Con)

                Try
                    Sql.ExecuteNonQuery()
                Catch ex As Exception

                End Try

[D4N93R]

Hola! ,

Leete todos los topics que salen acá :) Bien bien leidos.

http://msdn.microsoft.com/es-es/library/ecb3hak0.aspx

Un saludo!

acid0ikario