SQL Injection
SQL Injection
INTRODUCCINASQL
QUEES?
PARAQUESIRVE?
COMOFUNCIONA?
CMOEVITARUNAINYECCINSQL?
INTRODUCCIN
SQL
ENLOSDIFERENTESGESTORES(MYSQL,POSTGRES,ORACLE,MSSQL)
EXISTENUNASERIEDEBASESDEDATOSQUECONTIENEN
INFORMACINACERCADELASTABLAS,COLUMNAS.
EJEMPLO:
ELGESTORMYSQLCONTIENELABASEDEDATOS:
INFORMATION_SCHEMA:
INFORMATION_SCHEMA.TABLES(INFORMACINSOBRETABLAS)
INFORMATION_SCHEMA.COLUMNS(INFORMACINSOBRECOLUMNAS)
QU ES?
ESUNMTODODEINFILTRACINDECDIGOINTRUSOQUESE
VALEDEUNAVULNERABILIDADINFORMTICAPRESENTEENUNA
APLICACINENELNIVELDEVALIDACINDELASENTRADASPARA
REALIZARCONSULTASAUNABASEDEDATOS.
PARA QUE SIRVE?
DESCUBRIMIENTODEINFORMACIN
ELEVACINDEPRIVILEGIOS
DENEGACINDESERVICIO
SUPLANTACINDEUSUARIO
DESCUBRIMIENTO DE
INFORMACIN
LAS TCNICAS DE INYECCIN SQL PUEDEN PERMITIR A UN ATACANTE
MODIFICARCONSULTASPARAACCEDERAREGISTROSY/OOBJETOSDE
LABASEDEDATOSALOSQUEINICIALMENTENOTENAACCESO.
BUSCARVULNERABILIDAD
EXTRAER:
INFORMACIN
TABLAS
COLUMNAS
REGISTRODELASTABLAS
BUSCAR
VULNERARIBILIDAD
INTRODUCIRENLOSPARMETROSELCARCTER,PARAROMPERLA
CONSULTA.(SEMOSTRARAUNERRORENLAPGINA)
E.J:WWW.PRUEBA.ES/INDEX.PHP?ID=1
COMPROBARQUEREALMENTEESTAMOSMODIFICANDOLACONSULTA.
(NOSEMOSTRARANINGNERRORENLAPGINA)
E.J:WWW.PRUEBA.ES/INDEX.PHP?ID=1+AND+1=1
E.J:WWW.PRUEBA.ES/INDEX.PHP?ID=-1+OR+1=1
EXTRAER
INFORMACIN
ELOBJETIVOESOBTENERINFORMACINDELOSUSUARIOS,BASE
DEDATOS,
DEJAMOSLACONSULTADELAAPLICACINVACA
BUSCAMOSELNUMERODECOLUMNASQUETIENELACONSULTAPARA
PODERREALIZARNUESTRAPROPIACONSULTAMEDIANTEUNION
SACAMOSINFORMACINMEDIANTE:
USER(),DATABASE(),@@
VERSION,@@
DATADIR
EXTRAER TABLAS
Y COLUMNAS
TABLAS
UTILIZAMOSLATABLA:INFORMATION_SCHEMA.TABLES
DEAHSACAMOSQUETABLASHAYENLABASEDEDATOS
UTILIZACINDELIMITN,1PARASACARLASDISTINTASTABLAS
COLUMNAS
INFORMATION_SCHEMA.COLUMNS
EXTRAER REGISTRO
DE LAS TABLAS
CONLAINFORMACINOBTENIDACONSTRUIMOSLACONSULTAQUE
QUERAMOSCOMO:
UNIONSELECTUSUARIO,PASSWORDFROMUSUARIOSLIMIT0,1
PUDIENDOASIRSACANDOTODOSLOSREGISTROSDELATABLA
ELEVACIN DE
PRIVILEGIOS
TODOSLOSSISTEMASDEAUTENTICACINQUEUTILICENCREDENCIALESALMACENADOSENMOTORESDE
BASESDEDATOSHACENQUEUNAVULNERABILIDADDEINYECCINSQLPUEDAPERMITIRAUNATACANTE
ACCEDERALOSIDENTIFICADORESDEUSUARIOSMSPRIVILEGIADOSYCAMBIARSELASCREDENCIALES.
ELPRIVILEGIOALLOTORGATODOSLOSPRIVILEGIOSEXCEPTUANDOELPRIVILEGIOGRANTOPTION.YEL
PRIVILEGIOUSAGENOOTORGANINGUNO,LOCUALESTILCUANDOSEDESEA,POREJEMPLO,
SIMPLEMENTECAMBIARLACONTRASEA:
DENEGACIN DE
SERVICIO
EJEMPLOS:
1. PARAINICIARLAINSTANCIA
PREDETERMINADADEMOTORDE
BASEDEDATOS
NET START "SQL SERVER (MSSQLSERVER)
2. PARADETENERMOTORDEBASEDE
DATOSMEDIANTETRANSACT-SQL
SHUTDOWN;
3. PARAINICIARYDETENEREL
SERVICIOSELECCIONADO
VISUALIZAR EL ESTADO DEL SERVICIO
$DFLTINSTANCE
INICIAR EL SERVICIO
$DFLTINSTANCE.START();
ESPERAR HASTA QUE EL TIEMPO DE
SERVICIO INICIE Y LUEGO LO ACTUALIZA.
$DFLTINSTANCE.REFRESH();
PARAR EL SERVICIO
$DFLTINSTANCE.STOP();
SUPLANTACIN DE
SERVICIO
ALMOMENTODEPODERACCEDERALSISTEMADECREDENCIALES
ESPOSIBLEQUEUNATACANTEOBTENGALASCREDENCIALESDE
OTROUSUARIOYREALICEACCIONESCONLAIDENTIDADROBADAO
SPOOFEADAAOTROUSUARIO
COMO FUNCIONA?
PRESENTAREMOSLOSSIGUIENTESMTODOSYHERRAMIENTASPARA
DETALLARCOMOFUNCIONA.
BYPASS(LOGIN).
BLINDSQLINJECTION
BYPASS
ESQUIVARAUTENTICACIN(SALTARVALIDACIN)
CONSULTASDELTIPO:
SELECTUSUARIOFROMUSUARIOSWHEREUSUARIO=ADMINANDPASSWORD=CANALSEGURO666
DONDE ADMIN Y CANALSEGURO666 SON VARIABLES INTRODUCIDAS POR EL
USUARIODELAAPLICACIN.
SI LA CONSULTA ES VACA NO PERMITIR EL ACCESO, PERO EN CASO
CONTRARIOS,DANDOIGUALQUEHAYAUNOOMASREGISTROS
BYPASS
IDENTIFICANDOVULNERABILIDAD:
SELECTUSUARIO,PASSWORD
FROMUSUARIOS
WHEREUSUARIO=ADMIN
ANDPASSWORD=6851
SALTNDOSELAAUTENTIFICACIN:
SELECTUSUARIO,PASSWORD
FROMUSUARIOS
WHEREUSUARIO=OR1=1
ANDPASSWORD=OR1=1
BLIND -
SQL INJECTION
UNADELASMANERASDEREALIZARESTOSATAQUESSEBASAENATAQUESACIEGAS,ESDECIR,ENCONSEGUIRQUE
LOSCOMANDOSSEEJECUTENSINLAPOSIBILIDADDEVERNINGUNODELOSRESULTADOS.
PARMETROVULNERABLE
COMOSEATACA
METODOSAUTOMATIZACIN
HERRAMIENTAS
PROTEGERNOSDEBLINDSQLINJECTION
BLIND SQL INJECTION
Parmetro Vulnerable
ELATACANTEDEBEENCONTRARENPRIMERLUGARUNAPARTEDELCDIGODELAAPLICACIN
QUENOESTREALIZANDOUNACOMPROBACINCORRECTADELOSPARMETROSDEENTRADAA
LA APLICACIN QUE SE ESTN UTILIZANDO PARA COMPONER LAS CONSULTAS A LA BASE DE
DATOS.
BASEDEDATOS
MSSQL
MYSQL
ACCESS
ORACLEPL/SQL
DB2
POSTGRESPL/PGSQL
C#
ENLENGUAJEC#,DELAPLATAFORMA.NET(OSUALTERNATIVA
LIBREMONO),SETIENEADO.NETSQLCOMMAND
(PARAMICROSOFTSQLSERVER)OORACLECOMMAND(PARA
SERVIDORESDEBASESDEDATOSORACLE).
ELEJEMPLOSIGUIENTEMUESTRACMOPREVENIRLOSATAQUES
DEINYECCINDECDIGOUSANDOELOBJETOSQLCOMMAND.EL
CDIGOPARAADO.NETSEPROGRAMADEFORMASIMILAR,AUNQUE
PUEDEVARIARLEVEMENTESEGNLAIMPLEMENTACINESPECFICA
DECADAPROVEEDOR.
C#
ENVEZ
SEPODRAUSARLOSIGUIENTE.
PHP
ENELLENGUAJEPHP,HAYDIFERENTESFUNCIONESQUEPUEDENSERVIRDEAYUDA
PARAUSARCONDISTINTOSSISTEMASDEGESTINDEBASESDEDATOS.
RUBY ON RAILS
ENELFRAMEWORKRUBYONRAILS(ROR),LASCONSULTASSON
VERIFICADASAUTOMTICAMENTEPORCUALQUIERADELOS
MTODOSDEBSQUEDAINCLUIDOS.POREJEMPLO:
JAVA
SEPUEDEUSARLACLASEPREPAREDSTATEMENT:
SISTEMA GESTORES
DE BASE DE DATOS
LAS SIGUIENTES TABLAS MUESTRAN ALGUNAS DISTINCIONES QUE SIRVEN
PARADETERMINARELTIPODEBASEDEDATOSOBJETIVO:
SISTEMA GESTORES
DE BASE DE DATOS
IDS EVASION
LA IMPLEMENTACIN DE UN SISTEMA QUE DETECTE LOS PARMETROS Y LOS
EVITE (IDS, IPS) ES RELATIVAMENTE SENCILLA. ESTOS SISTEMAS NORMALMENTE
ESTN BASADOS EN FIRMAS QUE EN CUANTO ENCUENTRAN PARTES
SOSPECHOSAS EN LAS PETICIONES DE URL, COMO LAS RESULTANTES DE
UTILIZARSENTENCIASSQLENLOSVALORESDELOSPARMETROS,DETIENENLA
CONEXIN
POREJEMPLO,SUPONGAMOSQUEUNIDSCORTECUALQUIERCONEXINQUECONTENGA
ELLITERALUNIN,DEMODOQUELASIGUIENTEINYECCINNOSERAEFECTIVA:
IDLIBRO=1'UNION@@VERSION