Curso Injecao
Curso Injecao
Curso Injecao
INJEÇÃO DE SQL
by: rider019,Fogoxfr0
Safe Tech
Discord: https://discord.com/invite/y4sjBaVv9Q
Telegram: t.me/SafeTech123
t.me/ksksksk1234
Assis
2013
Assis
2013
FICHA CATALOGRÁFICA
Assis
2013
AGRADECIMENTOS
Primeiramente à Deus,
Por nunca me desamparar, e ajudar a superar cada obstáculo em minha vida.
1. INTRODUÇÃO...................................................................... 12
1.1 OBJETIVOS................................................................................ 12
1.2 JUSTIFICATIVA.......................................................................... 13
1.3 ESTRUTURA DO TRABALHO.................................................... 13
2. LINGUAGEM SQL................................................................ 15
3. O QUE É SQL INJECTION.................................................. 17
4. SEGURANÇA NA WEB....................................................... 18
4.1 WEB SERVICES......................................................................... 18
4.2 ATACANTES............................................................................... 19
5. VULNERABILIDADES......................................................... 21
5.1 TIPOS DE VULNERABILIDADES NA WEB................................ 21
5.2 SOFTWARES PARA PENTEST.................................................. 23
6. SEGURANÇA....................................................................... 25
7. DEMONSTRAÇÃO DE SQL INJECTION............................ 26
7.1 EVITANDO ATAQUE SQL INJECTION..................................... 29
7.2 RASTREANDO VULNERABILIDADES..................................... 30
8. MATERIAIS E MÉTODOS.................................................... 40
9. RESULTADO........................................................................ 41
10. CONSIDERAÇÕES FINAIS................................................. 42
REFERÊNCIAS.................................................................... 43
12
1. INTRODUÇÃO
O presente trabalho trata de uma pesquisa bibliográfica sobre injeção de SQL. Com
o acesso massivo às estruturas organizadas de dados, principalmente pela Internet,
o fator segurança torna-se primordial, visto que sem ela, os sistemas apresentam-se
vulneráveis e a mercê de pessoas maldosas. Uma das modalidades de exploração
destas vulnerabilidades é o ataque por injeção de SQL, ou SQLInjection, tema deste
trabalho.
A linguagem SQL (Structured Query Language) define-se como uma linguagem
declarativa em oposição as outras linguagens procedurais, uma vez que apresenta
maior rapidez e usabilidade em relação às outras.
Segundo Ferreira et al. (2005):
1.1 OBJETIVO
O presente trabalho tem como objetivo, reconhecer as vulnerabilidades, analisar
como impedir os ataques, demonstrar, de forma didática e objetiva, um ataque por
meio de um site vulnerável e por fim aplicar as formas de segurança para inibir os
mesmos resultando na melhorada segurança de todos os sites na rede.Comprovar
para todos os usuários as falhas que podem ser exploradas quando certos cuidados,
como má codificação da linguagem SQL, são ignorados. A pretensão desse trabalho
é comprovar que há necessidade de obter mais estudos sobre segurança na web.
13
1.2 JUSTIFICATIVA
2. LINGUAGEM SQL
A linguagem SQL foi criada nos anos 70 nos laboratórios da IBM, a linguagem é um
grande padrão de banco de dados, por ser simples de fácil uso. A forma que o SQL
utiliza a consulta é específica ao resultado, ao contrário das outras linguagem que
aponta o caminho para chegar até o mesmo.
Para se entender como funciona um ataque por SQL Injection, é indispensável ter a
ciência de pelo menos um pouco dos comandos básicos da linguagem SQL padrão
(RACCIATTI, 2002, p.7).
Comando Definição
ALTER Utilizado para alterar tabelas agregando campos e trocar a definição
de campos.
CREATE Utilizado para criar novas tabelas, campos e índices.
DELETE Utilizado para apagar registros de uma tabela da base de dados.
DROP Empregado para eliminar tabelas e índices.
INSERT Utilizado para inserir dados em uma tabela.
SELECT Utilizado para consultar registros de uma base de dados que
satisfaçam um determinado critério.
UPDATE Utilizado para modificar os valores dos campos e registros
especificados.
Comando Definição
FROM Utilizado para especificar a tabela a qual serão selecionados os
objetos.
WHERE Utilizado para especificar as condições que devem reunir os
registros que serão selecionados.
GROUP BY Utilizado para separar os registros escolhidos em grupos específicos.
HAVING Utilizado para especificar a condição que deve satisfazer cada grupo.
ORDER BY Utilizado para selecionar os registros selecionados de acordo com
uma ordem específica.
UNION Utilizado para unir o resultado de duas consultas em um só
resultado, este comando gera a união de conjuntos.
Comando Definição
> Maior que
< Menor que
<> Diferente de
>= Maior ou igual a
<= Menor ou igual a
= Igual a
AND Operador booleano para testar se mais de uma condição é
verdadeira ou falsa
OR Operador booleano para testar se pelo menos uma das condições é
verdadeira ou falsa.
BETWEEN Utilizado para especificar um intervalo de valores.
LIKE Utilizado para especificar um intervalo de valores.
IN Utilizado para especificar registros de uma base de dados.
4. SEGURANÇA NA WEB
Hoje em dia a segurança das informações são primordiais para qualquer tipo de
sistemas web, seja ela em qualquer linguagem programáveis.
Pois muitas informações hoje em dia são extremamente secretas, exemplo: dados
bancários, cartão de créditos e etc. E com isso muitos sistemas tentam cada veiz
mais deixar o ambiente totalmente seguro, mas ainda assim os Hackers ainda
acham vulnerabilidades para realizar os ataques.
4.2 ATACANTES
Trojan ou Cavalo de Tróia: executa funções sem que o usuário invadido tenha
conhecimento, admitindo que o computador seja explorado pelos invasores;
Vírus: a forma de ataque mais conhecida, é software que faz cópia de si próprio,
ocasionando vários problemas, tais como o mau funcionamento de softwares;
Worm: software que não necessita ser executado para ser usado. Fornece dados
que são transmitidas a hackers de modo secreto, sendo na maioria dos casos de
modo imperceptível ao usuário;
Ataque físico: caracterizam-se pelo roubo de aparelhamentos discos, fitas
magnéticas, CD-ROM, disquetes ou outros elementos de armazenamento de dados
que são retirados da empresa para posterior análise ou destruição;
Denial of Service: ataque de negação de serviço, culpado por sobrecarregar
servidores com amplo volume de dados, originando a parada do sistema
operacional, gerando o preenchimento da memória do computador e a sobrecarga
de operações do processador;
Packet Sniffing: software que realiza a captura de pacotes IP que podem dominar
informações importantes de softwares de bate-papo ou mesmo softwares de e-mail
como o Outlook Express;
Scan: também conhecido como Port Scanning, avalia portas IP que têm serviços
associados, como por exemplo, telnet. Entre os softwares mais usados para esta
tarefa estão o Nmap.
21
5. VULNERABILIDADES
.
23
Existe vários software para ajudar nos recursos de scanner, achar vulnerabilidades e
até exploraras. Porém existem que usam para ajudar a melhorar a segurança dos
sites, e por outro lado pessoas mal intencionadas para obter benefícios com esses
recursos.
Blind Cat
Blind SQL Injection é um tipo de ataque que destrói as vulnerabilidades mais
conhecidas na investigação dos programadores desavisados e após vai aumentando
o grau de complexidade (WEBCHEATS,2013).
Sqlmap
É uma instrumento open source que automatiza o processo de detecção e exploiting
de vulnerabilidades a Sql Injection. Apoio para Banco de Dados - Mysql, Oracle,
PostgreSQL, Msql, Microsoft Acess, DB2 , Informix, Sybase e InterbasE
(WEBCHEATS,2013).
Havij v1.12(Windows)
Esse programa tem a vista limpa, bem eficiente e rápida, pois e só pegar o endereço
web (URL) o qual quer identificar as vulnerabilidades e avaliar os erros no banco de
dados que poderia ser aproveitado por pessoas maliciosas. Detecta
automaticamente qual database. Entende automaticamente qual termo equivale a
um resultado positivo e negativo. Tenta distintos tipos de sintaxe na injeção. Suporta
injeção manual. Tenta adivinhar tabelas e colunas em mysql<5 e no MsAccess
também. Recurso de entender a página de admin. Recurso para quebrar senhas
md5(faz a busca em vários sites pelo hash) (WEBCHEATS,2013).
Sql Ninja
É uma instrumento free que serve para fazer SQL Injections em aplicações web que
utilizam banco de dados Microsoft SQL Server. Programa bem conhecido e forte que
por sinal faz parte da suíte de aplicativos da distribuição linux Backtrack. Bruteforce
da conta do SA(com dois tipos de ataque: dicionário e incremental). Upload do
netcat (ou algum outro praticável) usando normal HTTP requests após um ataque
bem contínuo. TCP/UDP portscan para o SQL Server, para tentar achar uma porta
que está aberta pelo firewall e usar essa porta para uma reverse
Shell(WEBCHEATS,2013).
Acunetix
24
6. SEGURANÇA
Hoje em dia basta ligar algum dispositivo que tenha acesso a Internet, para se tornar
vulnerável a ataques.
Assim que o dispositivo é iniciado, enfrenta perigos vindos da internet, incluindo
ataques de spyware, vírus, cavalos de tróia, SQL injection , e hackers tentando criar
uma conexão direta com o seu computador.
Mas existem recursos e softwares para melhorar e até inibir esses perigos, como:
Firewall: é um tipo de software que pode ser dividido em diversas categorias, mas
que tem sempre o mesmo objetivo, que é o de não permitir a entrada de pacotes IP
e, deste modo, contendo ameaças.
Filtro de Pacote: usa regras estáticas para filtrar pacotes que têm origem em
servidores externos. É muito comum e considerado simples de ser configurado.
Proxy: este tipo de firewall tem por intenção filtrar os pacotes que são causados na
rede interna da empresa (LAN) e muitas vezes ele evita a conexão com servidores
externos que podem ser prejudiciais ao sistema de informação.
Firewall pessoal: software que intercepta as conexões de entrada e saída em um
computador. Baseia-se em regras padrão ou definidas pelo usuário e define quais
conexões podem ser recebes e quais devem ser rejeitadas.
Firewall reativo: há funções que admitem adotar ataques e emitir alarmes quando
encontrar sequências de pacotes IP chamadas de assinaturas e impede o acesso
impróprio automaticamente (SOUZA, 2007).
26
Á seguir será apresentado com prints screen, uma demonstração de SQL Injection
com um formulário de login:
Agora será inserido o código ‘OR 1=1 OR’ ‘=’ no campo de Usuário do formulário de
login e uma senha qualquer.
Nesse tipo de SQL Injection aplicado nessa pagina PHP, para evitar esse ataque o
jeito é usar a função nativa PHP “addslashes($str)” para substituir o caractere ‘ por \’
vindos de campos de texto do formulário. Isso deixara o código do formulario de
login assim:
29
Caso o atacante fosse inserir o código SQL ‘ OR 1=1 OR ”=’ resultaria em:
Scan information
Starttime 29/08/2013 22:09:02
Scan time 6 hours, 21 minutes
Profile Default
Server information
Responsive True
Server banner Apache/2.2.14 (Ubuntu)
Server OS Unix
Server technologies PHP
Nesse tipo de escaneamento, são três níveis de segurança, para medir se o site
está seguro, os níveis são High, Medium e Low, o site o qual está feito esse estudo,
conforme mostra a figura acima o web site está no nível High, ou seja, uma ou mais
alta severidade de vulnerabilidades foram descobertas pelo scanner, um usuário
mal-intencionado pode explorar essas vulnerabilidades e comprometer o banco de
dados ou reconfigurar o site causando danos imensuráveis, abaixo mostra as
quantidades de níveis encontrados:
32
Alto 2
Médio 259
Baixo 22
Informação 37
Total de Alertas encontrados = 320
Gráfico de Alertas
Abaixo será apresentada as vulnerabilidades encontradas, e o modo de inibir os
mesmos, iniciando pelo nível mais alto ao mais baixo:
Nível - Alto
Configuração do Código-fonte PHP
Um backup ou arquivo de configuração temporária foi encontrado neste diretório, foi
confirmado que este arquivo contém código de fonte PHP, se acontece falhas de
edição de texto ou a conexão SSH cai durante a edição, então os arquivos de
backup temporários não podem ser limpos corretamente. Além disso, o
desenvolvedor do site cria este tipo de arquivos de backup, de seu trabalho ou por
administradores ao fazer backups do servidor web.
Itens afetados:
/configuration.php-dist
* -------------------------------------------------------------------------
* THIS SHOULD ONLY BE USED AS A LAST RESORT WHEN THE WEB
INSTALLER FAILS
*
* If you are installing Joomla! manually i.e. not using the web browser installer
* then rename this file to configuration.php e.g.
*
* UNIX -> mv configuration.php-dist configuration.php
* Windows -> rename configuration.php-dist configuration.php
*
* Now edit this file and configure the parameters for your site and
* database.
*/
class JConfig {
/**
* -------------------------------------------------------------------------
* Site configuration section
* -------------------------------------------------------------------------
*/
/* Site Settings */
var $offline = '0';
var $offline_message = 'This site is down for maintenance.<br /> Please check
back again soon.';
var $sitename = 'Joomla!'; // Name of Joomla site
var $editor = 'tinymce';
var $list_limit = '20';
var $legacy = '0';
/**
* -------------------------------------------------------------------------
* Database configuration section
* -------------------------------------------------------------------------
*/
/* Database Settings */
var $dbtype = 'mysql'; // Normally mysql
34
Para corrigir esta vulnerabilidade, basta remover este arquivo do servidor web e
programar uma política de segurança dentro da organização para proibir criação de
arquivos temporários nos diretórios acessíveis a partir da web.
Nível - Médio
Apache HTTPD Negação de Serviço
A vulnerabilidade de negação de serviço foi encontrado na forma como os vários
intervalos de sobreposição são manipulados pelo servidor HTTPD Apache, existe
uma ferramenta de ataque para explorar essa vulnerabilidade “killapache.pl” , com
essa ferramenta citada pode ser feito remotamente e com um numero modesto de
pedidos pode causar memória muito significativo e uso da CPU no servidor.
A versão atual do Apache do Servidor é a 2.2.14, e a vulnerabilidade descoberta foi
usando o Script de Sql Injection “(Version_Check.script)”.
O impacto desta vulnerabilidade é a divulgação de informações, e para corrigir essa
vulnerabilidade é a negação de serviço remoto.
Nível - Médio
Mensagens de Erro de Aplicativo
A pagina contém erro e mensagens de aviso que pode divulgar informações
sensíveis.
Itens Afetados
/administrator/index.php
/index.php/
/index.php/ap.html
/index.php/apresentacao-pibic.html
/index.php/bolsadeestudo.html
/index.php/calendario-aula-pos-menu/518-pibic-edital.html
/index.php/calendario-aula-pos-menu/862-quimambiental.html
O impacto desta vulnerabilidade é a divulgação de informações confidenciais, e esta
informação pode ser utilizada para lançar novos ataques, para corrigir esse erro é
necessário revisar o código fonte para este script.
Nível - Médio
Listagem de Diretório
O servidor web está configurado para exibir a lista de arquivos contidos no diretório,
isso não é recomendado, pois o diretório pode conter arquivos que normalmente
não são expostos por meio de links da web site.
37
Itens Afetados
/administrator/templates/khepri/images/h_cherry
/administrator/templates/khepri/images/h_green
/administrator/templates/khepri/images/h_teal
/images/bannersCentro
/images/biblioteca/imagens
O impacto desta vulnerabilidade é que um usuário pode ver a lista de todos os
arquivos desse diretório, possivelmente expondo informações confidenciais, para
corrigir essa vulnerabilidade deve-se certificar-se de que os diretórios não contem
arquivos sensíveis ou restringir listagens de diretórios de configuração do servidor
web.
Nível – Médio
Formulário HTML sem proteção CSRF
Foi encontrado os formulários sem proteção, com isso poderia ser explorada usando
“Cross-site request forgery” , que é um tipo de exploit malicioso de um site em que
comandos não autorizados são transmitidos a partir de um usuário que o site confia.
Itens Afetados:
/vestibular/administrator
/vestibular/index.php/contato.html
/vestibular/index.php/contato.html~
/vestibular/index.php/perguntas.html
/administrator
/administrator/index2.php
Itens Afetados
/administrator
/administrator/index2.php
/phpmyadmin
/phpmyadmin/index.php
/phpmyadmin/index.php (403313c4ca2624f295387f1d654ae7e7)
/phpmyadmin/index.php (6923e40e76221e1ff445c088b114e633)
/phpmyadmin/index.php (f7b7b2447a40fedeb00d2dcbcafc74af)
/vestibular/administrator
O impacto desta vulnerabilidade, é que uma terceira pessoa pode ser capaz de ler
as credenciais do usuário, interceptando uma conexão não criptografada HTTP.
Para corrigir essa vulnerabilidade encontrada, as informações confidenciais devera
sempre ser transferida para o servidor através de uma conexão criptografa (HTTPS).
Nível – Baixo
Pagina de Login
Esta pagina de login não tem nenhum tipo de proteção contra um ataque muito
comum de adivinhação de senhas, conhecido como um ataque de força bruta, um
ataque de força bruta é uma tentativa de descobrir uma senha, ao tentar
sistematicamente todas as combinações possíveis de letras, números e símbolos
até descobrir a combinação correta de um login.
Itens Afetados:
/administrator/index.php
Acima não foram citados todas as vulnerabilidades encontradas no site, foi citado as
mais importantes para ajudar a melhorar a segurança, caso um usuário mal
intencionado tivesse da posse dessas vulnerabilidades conseguiria se aproveitar
dessas falhas e comprometer o site.
40
8. MATERIAIS E MÉTODOS
Este trabalho foi desenvolvido a partir do método de pesquisa bibliográfica por meio
do método indutivo, usando levantamento de dado feito em testes práticos sendo
que um foi realizado em um site anônimo. O teste teve como objetivo detectar
vulnerabilidades a sql injection, por fim foram proposta soluções de proteção para o
mesmo.
41
9. RESULTADOS
REFERÊNCIAS