sql injection - charruacharrua.org/presentaciones/leandropintos_charruacon_sqli.pdf~# distintos...

27
SQL Injection 1º Edición - 11 y 12 de Mayo Montevideo, Uruguay

Upload: others

Post on 19-Apr-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

SQLInjection

1ºEdición-11y12deMayoMontevideo,Uruguay

Page 2: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

• LeandroPintosa.k.al34r00t• Pentester@MkitArgentina• Colaboradoren:

~#Sobremí

SQLiynomorirenelintentoSQLInjection

@[email protected]

http://www.andsec.org/

Page 3: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

•Elcontenidoexpuestoenlasiguientepresentaciónes exclusivamente de carácter educativo para quelospresentesconozcanlagravedaddeunataquedeSQLInjectionycómoprotegersedelmismo.

•Loaprendidoenestacharlaesparaquelopuedanreplicar en sus laboratorios privados, y asíaprendercómoprotegersusaplicacionesweb.

SQLiynomorirenelintento

~#Disclaimer

SQLInjection

Page 4: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

• Presentación• ¿QuéesOWASP?• ¿QuéesSQLi?• Funcionamientodeunaaplicaciónweb• ¿Porquéocurrelainyección?• DistintostiposdeinyeccionesSQL• IntroducciónaconsultasSQL• Demotime;)• HerramientasparaataquesautomatizadosdeSQLi• Recomendaciones• SQLienelmundoreal• Conclusión

SQLiynomorirenelintento

~#Agenda

SQLInjection

Page 5: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

~#¿QuéesOWASP?• ProyectoabiertodeSeguridadenAplicacionesWeb

(OpenWebApplicationSecurityProject)• Sinfinesdelucro.• Proporcionamaterialcolaborativoalacomunidad.• Soportadaatravésdedonaciones.• Promueveeldesarrollosegurodesoftware.• Crea conciencia acerca de la seguridad enaplicacionesweb.

• OWASPTop10

https://www.owasp.org/index.php/Main_Page

SQLiynomorirenelintentoSQLInjection

Page 6: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

~#OWASPTop10

SQLiynomorirenelintentoSQLInjection

Page 7: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

~#¿QuéesSQLi?

Es una vulnerabilidad que permite a unusuario malintencionado realizar consultasSQLdeformaarbitrariaalabasededatospormediodelaaplicaciónweb.

SQLiynomorirenelintentoSQLInjection

Page 8: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

~#Funcionamientodeunaaplicaciónweb

SQLiynomorirenelintento

Funcionamientonormal

Servidor de Aplicaciones

Servidor de Base de Datos

El usuario realiza una petición (GET/ POST) a una pagina web.

La aplicación recibe la solicitud y realiza la consulta SQL a la Base de Datos

para obtener el resultado.

El usuario recibe el resultado mostrado por la aplicación web.

La Base de datos ejecuta la consulta SQL y devuelve el resultado a la aplicación web.

1 2

34

http://mipoc.com.ar/buscar.php?id=1

ID Articulo Precio

1 Mesa ARS500

SQLInjection

Page 9: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

~#Funcionamientodeunaaplicaciónweb

SQLiynomorirenelintento

Funcionamientomodificado

Servidor de Aplicaciones

Servidor de Base de Datos

La aplicación recibe la solicitud y realiza la consulta SQL a la Base de Datos.

El usuario malicioso logra obtener información arbitraria de la base de datos.

La Base de datos ejecuta la consulta SQL y devuelve el resultado requerido.

1 2

34

El usuario malicioso modifica el envío GET/POST, colocando en la URL sentencias SQL.

http://mipoc.com.ar/buscar.php?id=1+sentencia_SQL

ID Articulo Precio

1 Mesa ARS500

SQLInjection

Page 10: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

~#¿PorquéocurrelainyecciónSQL?

SQLiynomorirenelintento

Sedebeaquenoserealizauncorrectofiltradodevariables permitiendo el envío de consultas a labasededatosmediantelaaplicaciónweb.

SQLInjection

Page 11: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

~#DistintostiposdeinyeccionesSQL

SQLiynomorirenelintento

•InyecciónSQLaformulariodeLoginSe evidencia cuando se logra realizar una sentencia sql de talmanera que enviando una expresión lógica su resultado sea unresultadoseasiempreverdadera(TRUE).Deestamaneraobtenemosunusuariovalidodelabasededatos.

SQLInjection

Page 12: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

~#DistintostiposdeinyeccionesSQL

SQLiynomorirenelintento

•InyecciónSQLbasadaenerrores(ErrorBased)Se evidencia cuando el motor de la base de datos recibe unasentenciaquenolograprocesar,devolviendounmensajedeerror.

SQLInjection

Page 13: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

~#DistintostiposdeinyeccionesSQL

SQLiynomorirenelintento

•InyecciónSQLCiega(BlindSQLInjection)Seevidenciacuandounawebappmuestrauncomportamientodistintoalonormaldependiendodeltipodeconsultarealizadaalabasededatos.

• Boolean-BasedSQLiApartirdelcomportamientodelarespuestadelawebappselograextraerlainformaciónenbaseavaloresTrueoFalse.

• Time-BasedSQLiSe utiliza la lógica para extraer la información de la base dedatosdependiendodeltiempoderespuestadelaconsultarealizada.

SQLInjection

Page 14: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

IntroducciónaconsultasSQL

SQLiynomorirenelintentoSQLInjection

Page 15: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

~#ComandosbásicosautilizarenunservidorSQL

SQLiynomorirenelintento

SELECT Seleccionalosregistrosdentrodeunatabla.

FROM Establecelatabladelacualsevanaseleccionarlosregistros.

WHERE Establecelascondicionesquedebenreunirlosregistrosquesevanaseleccionar.

UNION Uneconsultasylasconcatenaenunúnicoresultado.

ORDERBY Ordenalosregistrosseleccionadosdeacuerdoconunordenespecifico.

LIMIT UtilizadaparalimitarlosregistrosqueseretornanenunaconsultaSELECT.

SQLInjection

Page 16: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

~#ParámetrosbásicosautilizarenunservidorSQL

SQLiynomorirenelintento

' SirveparaestablecercadenasdeltipoSTRING

; Sirveparaindicarlafinalizacióndeunasentencia.

-- Sirveparacomentarelrestodetextoenlasentencia.

+ Esutilizadoparagenerarespaciosenlaurl.

<,>,= Operadorescomparativosdedatos.

or,and Operadoreslogicos.

SQLInjection

Page 17: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

SQLiynomorirenelintentoSQLInjection

Page 18: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

~#AlgunasherramientasparaataquesautomatizadosdeSQLi

SQLiynomorirenelintento

http://sqlninja.sourceforge.net

http://www.sqlpowerinjector.com

http://sqlmap.org

https://github.com/BCable/sqlier

SQLInjection

Page 19: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

SQLiynomorirenelintento

~#Recomendaciones• Verificarcorrectamenteelinputdelusuario• Aplicar filtros que eviten los caracteresespeciales

https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet

SQLInjection

Page 20: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

SQLiynomorirenelintento~#Recomendaciones

Ejemplo:

• addslashesFunción en PHP la cual devuelve un string con barrasinvertidas, escapando comillas simples, comillas dobles,barrainvertida,yelNUL(elbyteNULL).

SQLInjection

Page 21: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

SQLiynomorirenelintento~#Recomendaciones

Ejemplo:

• mysql_real_escape_stringEscapa caracteres especiales en una cadena para su uso enunasentenciaSQL.

• htmlentitiesConviertetodosloscaracteresaplicablesaentidadesHTML.

• preg_replaceRealizaunabúsquedaysustitucióndeunaexpresiónregular.

SQLInjection

Page 22: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

SQLiynomorirenelintento~#Recomendaciones

Ejemplo:

SQLInjection

Page 23: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

SQLiynomorirenelintento

~#SQLienelmundoreal

SQLInjection

Page 24: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

SQLiynomorirenelintento

~#SQLienelmundoreal

https://www.akamai.com/StateOfTheInternet/

SQLInjection

Page 25: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

SQLiynomorirenelintento

~#Conclusión

• Buenasprácticasdedesarrolloseguro.• Analizarlaswebappsantesdesaliraproducción.• Análisisperiódicosalaswebappsestandoenproducción.

• Charlasalasgerenciasdedesarrollosobrelagravedaddeesteataque.

• Tomarconciencia.

SQLInjection

Page 26: SQL Injection - Charruacharrua.org/presentaciones/LeandroPintos_CharruaCon_SQLi.pdf~# Distintos tipos de inyecciones SQL SQLi y no morir en el intento • Inyección SQL Ciega (Blind

SQLiynomorirenelintentoSQLInjection