Olá, neste tópico, darei informações sobre como os sites são invadidos e quais vulnerabilidades são mais usadas
Introdução
à SQL Injection SQL Injection é uma das vulnerabilidades mais sérias em aplicativos da web. Principalmente com a popularização de frameworks e camadas extras de banco de dados como ORM (Object Relational Mapping), eles são um pouco menos comuns hoje em dia, mas tenha certeza que eles ainda estão por toda parte!
Os desenvolvedores de aplicativos da Web cometem alguns erros fatais porque não entendem completamente a injeção de SQL. Portanto, embora os métodos simples de SQL Injection conhecidos hoje não apareçam tanto, você pode ver as vulnerabilidades avançadas de SQL Injection, que explicaremos mais adiante, em muitos lugares, desde empresas muito grandes até sistemas prontos.
Pecado de segurança!
Se eu não posso hackear, ninguém pode hackear.
Um dos maiores pecados da segurança é que as pessoas dizem sobre algumas vulnerabilidades: "é seguro se eu não conseguir hackear". eles pensam. Ao longo da série de artigos, também
incluiremos uma série de lendas urbanas de SQL Injection dessa maneira.
Por fim, uma observação importante sobre o SQL Injection,
o SQL Injection pode ser encontrado em qualquer sistema de relacionamento aplicativo-banco de dados, independentemente do banco de dados e do idioma, e não é uma vulnerabilidade para esses bancos de dados. É trabalho do desenvolvedor da Web estar protegido contra SQL Injection.
O que é SQL?
SQL (Structured Query Language) é uma linguagem simples usada para operações como extração, exclusão e modificação de dados em bancos de dados. Hoje, quase todos os aplicativos da Web possuem suporte a banco de dados em sua infraestrutura e esses aplicativos da Web se comunicam com o banco de dados por meio do SQL.
Quando você deixa uma mensagem em um site, essa mensagem é salva no banco de dados. Quando essa mensagem é confirmada, um campo no banco de dados é atualizado. O administrador exclui o registro no banco de dados e garante que a mensagem seja excluída do site.
Um exemplo de instrução SQL de exclusão de registro pode ser semelhante a este:
DELETE FROM members WHERE id=17
Quando o código acima for executado pelo banco de dados, o registro com o campo id 17 na tabela de membros será excluído.
Este artigo não abordará os detalhes simples da linguagem SQL. Se você é fraco em SQL, será difícil entender o artigo. Antes de continuar com o artigo, recomendo que você aprenda os comandos básicos do SQL e entenda a lógica do seu banco de dados.
O que é SQL Injection?
Para muitas operações em aplicativos da Web, as instruções SQL dinâmicas são criadas com os dados recebidos do usuário. Por exemplo, a instrução SQL de exemplo SELECT * FROM Products simplesmente retornará todos os produtos do banco de dados para o aplicativo da web. Quaisquer metacaracteres compactados enquanto essas instruções SQL estão sendo geradas podem causar injeção de SQL.
O que é Meta-Caractere?
Meta-caractere é o nome dado aos caracteres que possuem um significado especial para um programa. Por exemplo, em linguagens baseadas em C como C#, Javascript, PHP, o caractere de barra invertida (\) é um metacaractere. Quando o compilador (compilador) ou intérprete (intérprete) vê esse caractere, ele processa o próximo caractere de acordo.
O metacaractere crítico (') para SQL' são aspas simples. Porque entre duas aspas simples é percebido como uma string. Outro meta-caractere importante é (é um ponto e vírgula, indica o fim da linha e o início de uma nova linha.
Um possível processo de login em um aplicativo da Web público é o seguinte;
Uma instrução SQL é criada com as informações de nome de usuário e senha provenientes do formulário (como SELECT * FROM members WHERE user='admin' AND password='password').
Se a instrução SQL retornar um registro, significa que esse usuário existe e a sessão é aberta e o usuário relevante está conectado.
Se nenhum registro for retornado do banco de dados, o visitante é enviado de volta ao formulário de login do membro com um erro como "usuário não encontrado" ou "senha incorreta".
Um código de login
de amostra Um código de login de amostra escrito em ASP;
O código é bem simples. Leva os valores das variáveis de formulário "username" e "password" na 1ª e 2ª linhas. Na 4ª linha, ele o coloca dentro da instrução SQL e realiza o controle do usuário.
Após esta operação, verifica se o resultado está vazio na 6ª linha. Se estiver vazio, ou seja, se o usuário não for encontrado no banco de dados, ele envia o usuário para a página de erro conforme visto na 7ª linha.
Se encontrado, ele faz as operações nas linhas 10 e 11. Ou seja, abre uma sessão com o id do usuário. Dessa forma, o usuário faz login no sistema.
Este é um procedimento de login clássico. Claro, pode ser diferente ou misturado.
Vamos tentar uma injeção com o nome de usuário e senha e ver o que acontece. Se inserirmos ' OU =' e ' OU =' em vez de nome de usuário e senha, estamos logados com sucesso como membro, mas como e por quê?
Agora , vamos relembrar novamente o código de exemplo funcionando. As linhas 1 e 2 estavam pegando o valor do formulário. Na linha 4, esses valores foram colocados em SQL e tiveram uma consulta feita no banco de dados.
Vamos colocar os valores do formulário em seus devidos lugares e olhar o SQL que acabou de funcionar;
SELECT * FROM Members WHERE username = OR = AND Password = OR =
Como você percebeu, esta consulta SQL sempre retornará true e retornará todos os membros da tabela Members. Se traduzirmos esta instrução SQL, ela ficará assim: Na tabela de membros
XSS (Cross-site-scripting) é a execução de códigos javascript no navegador aproveitando as vulnerabilidades nos campos de entrada de dados que ocorrem em suas páginas da Web. Pode ser visto nas áreas onde geralmente são usados os métodos POST e GET em páginas da web escritas em linguagem PHP.
A vulnerabilidade XSS geralmente é causada por desenvolvedores que não fazem a filtragem de metacaracteres.
Usuários mal-intencionados que desejam tirar proveito dessa vulnerabilidade podem seqüestrar o navegador da Web da outra parte e integrar trechos de código malicioso em seus computadores.
Tipos de ataque XSS
Ataque refletido: um ataque refletido é o reflexo do script injetado como uma solicitação de um servidor da Web, como um resultado de pesquisa normal, mensagem de erro ou próxima conexão. Os ataques refletidos visam os usuários de maneira diferente, geralmente não detectados em e-mails ou links ocultos. O navegador é implementado porque vem de um servidor 'confiável'.
Ataque Armazenado: Um Ataque Armazenado é um script injetado e armazenado em servidores de destino, como um comentário, banco de dados ou fórum. O script pode então ser executado enquanto um usuário legal estiver usando o site. As informações podem ser recuperadas dessa maneira.
Com o xss, às vezes você pode fazer coisas muito grandes, cometer erros e até transformar a vulnerabilidade do xss em vulnerabilidade do sql. Claro, o sql está disponível em quase todos os lugares que possuem o xss.
A avaliação remota de código (RCE) é um tipo de vulnerabilidade que ocorre quando a entrada do usuário é injetada em uma string ou arquivo e essa entrada é implementada pelo analisador da linguagem de programação usada. Isso geralmente não é o que os desenvolvedores da Web esperam. Uma vulnerabilidade de avaliação remota de código pode representar um risco para todo o aplicativo ou servidor da Web exploráveis. Um ponto importante sobre o RCE é que quase todas as linguagens de programação possuem essas funções de avaliação que formam a base da vulnerabilidade.
EXEMPLO DE RCE:
Você pode querer gerar dinamicamente nomes de variáveis para cada usuário e armazenar as datas de registro dos usuários. Em PHP é possível fazer isso com o seguinte código:
eval("\$$user = '$regdate'); Como
o nome de usuário é uma entrada controlada globalmente pelos usuários, um invasor pode gerar um novo nome como:
x = 'y';phpinfo();//
Como resultado PHP o código se torna:
$x = 'y';phpinfo();// = '2016'; Como você pode ver, a variável foi chamada x e recebeu o valor y. Depois que o invasor conseguiu atribuir esse valor à variável , ele poderia iniciar um novo comando usando o ponto-e-
vírgula (É importante observar que isso pode acontecer não apenas no PHP, mas em qualquer linguagem que tenha funções que avaliam a entrada