contextualizando SQL injection ou injeção SQL é um nome meio assustador para um tipo de ataque a sistemas principalmente web que dão acesso ao banco de dados utilizando sentenças SQL essa contextualização foi mais que perfeita mas existem vários tipos de ataques e muitas formas diferentes de fazê-lo nós tivemos que aprender lá atrás como evitá-los pois esse é o tipo de ataque que continua sendo muito constante Pois é temos muitos sistemas legados com vulnerabilidades gigantes e o pior muitos sistemas ainda sendo construídos hoje de forma errada e que abrem brechas para esse tipo de ataque Esse é
o vídeo que vamos te mostrar Quais são as principais formas utilizadas para se atacar um sistema web com injeção SQL mas com o único intuito de demonstrar Como se prevenir deles dessa forma você construirá aplicações mais seguras você está pronto seja muito bem-vindo ao dicionário do programador nesse vídeo vamos destrinchar o WL injection ou também conhecido como ataques sqli se você tem interesse em assuntos como programação e também segurança no desenvolvimento de sistemas te convido a se inscrever aqui no canal e acompanhar Nossos Vídeos semanalmente já são centenas de vídeos dos mais diversos temas para
você se deleitar aproveite e já comente Que tipo de assunto relacionado à segurança cibernética você gostaria que trouxéssemos aqui pro Canal esse tipo de tema é extremamente importante para nós programadores justamente para conhecermos Como podemos fechar as brechas de seguranças das nossas próprias aplicações e contamos com o apoio da Host gator Nossa parceira nesse vídeo ela além de oferecer ótimos serviços de hosting conta com SSL grátis em seus planos isso garante uma comunicação segura entre as aplicações e o cliente recomendamos você conhecer as soluções para VPS da Host Gate que conta com armazenamento em SSD
memória ddr4 e muitos recursos incríveis que garantem performance e segurança use o nosso link que tá aqui na descrição do vídeo e Garanta um super desconto aqui do código fonte TV podemos dizer que esse é um tipo de vulnerabilidade no código de site e aplicativos web que permitem que invasores sequestr processos no backend e acessem alterem extraiam excluam informações confidenciais de bancos de dados conectados aplicação e ao contrário do que se Imagine as vulnerabilidades são fáceis de encontrar e prevenir Se você souber como você Muito provavelmente já sabe o que é a SQL ou structur
Carry language mas se você não souber eu te digo ela é uma linguagem padronizada utilizada em praticamente todos os bancos de dados relacionais quando dizemos que uma aplicação usa banco de dados mas SQL Oracle SQL server postgre SQL sqlite Maria DB estamos dizendo que existe uma aplicação que chamamos de backend responsável por se comunicar com o sistema de banco de dados essa comunicação é a que é responsável por enviar os comandos SQL enviando os dados dos mais diversos tipos como o e-mail de alguém que esteja se inscrevendo em uma newsletter o id de um produto
que precisa ser removido de um carrinho de compras eu acho que só com esses exemplos Você já percebeu que toda vez que temos alguma informação que sai do cliente e que precisa ser direcionada ao banco de dados nós temos aí uma a forma de criar uma brecha de injeção SQL É isso mesmo para deixar com linguajar mais de programador nós dizemos que a partir de um dado enviado como argumento é que são construídas as instruções SQL Só para esquentar nossa conversa vamos te mostrar como é feito um ataque de injeção SQL em uma aplicação essa
é uma instrução SQL montada para fazer uma consulta que será responsável por efetuar o login em um sistema aparentemente não tem nada de errado com ela e realmente não tem essa instrução só retorna o usuário caso os campos login e senha sejam exatamente com os valores que foram enviados Provavelmente por uma instrução vinda do backend da aplicação agora Se prepare o que você acha que vai acontecer se a gente tiver esse tipo de mudança na cláusula a query é igual o que mudou é que foi enviado como argumento pro campo login não mais admin e
sim admin apóstrofo traço traço o que que isso quer dizer em alguns sgbds que são os sistemas gerenciadores de bancos de dados o traço traço representa um comentário o que no nosso caso vai acabar por desativar o restante da nossa cláusula tornando possível o login no sistema nesse caso apenas usando o login ignorando completamente o campo de senha entenderam agora como uma simples Mudança Já torna possível quebrar a segurança de uma query de consulta só para você entender como isso tem relação Direta em como nós desenvolvemos nossas aplicações o Olha só esse exemplo de como
não deve ser feito em PHP nesse exemplo que dói olhar Nós estamos montando a cláusula SQL usando os dados vindos diretamente do método post do http ou seja esse Dev fez a cagada de criar um formulário no HTML com os campos login e senha enviou através de post e concatenou com o comando SQL sem fazer nenhum tipo de tratamento do jeito que está se alguém fizer como mostramos antes e usar o apóstrofo traço traço o sistema vai quebrar lindamente Mas aí você vai me dizer ninguém deveria fazer isso isso é coisa de amador e tal
esse código que acabamos de mostrar foi sugerido pelo github CoPilot ferramenta que foi lançada agora em 2021 e que muitos aí estão aclamando que irá substituir os programadores Olha só inclusive nós já temos vídeo falando sobre as maravilhas e os perigos de se usar esse tipo de ferramenta e não saber exatamente o que ela sugere nesse caso o calito sugere um código horrível mas não se engane a culpa por dar Tab e aceitar as sugestões é somente e tão somente sua o programador agora que já conseguirmos burlar uma query responsável pela autenticação dentro de uma
aplicação Que tal vermos Que tipo de estrago é possível fazer usando skl injection Fica tranquilo que a gente ainda vai mostrar outras formas de se fazer o skl injection se é possível de alguma forma em Sistemas vulneráveis alterar uma consulta usando select desativando as condicionais pode ser possível então alterar a própria consulta em si sim é possível nesse exemplo usando também o exemplo em PHP estamos fazendo uma consulta em uma lista de produtos e não estamos tratando em nada o parâmetro busca se usarmos a string camiseta a query montada fica perfeita e ficará exatamente como
o segundo exemplo essa consulta está certinha e não causa nenhum tipo de problema mas e se ao invés de camiseta for utilizado isso para vazar geral e cagar esse sistema ao invés de camiseta utilizamos como argumento a string camiseta apóstrofo end 0 = 1 que faz com que a consulta na tabela de produtos não volte nenhum registro e o perigo vem depois usando o operador Union do SQL é possível unir consultas incluindo outras tabelas inclusive nesse caso continuamos com o argumento incluindo os campos nome senha e CPF da tabela clientes onde colocamos como critério a
string um apóstrofo like apóstrofo um E deixamos o restante para fechar a query com o percentual apóstrofo dessa forma temos uma query montada que ao invés de listar o resultado de busca de por produtos acaba por listar os dados sensíveis dos clientes de uma loja virtual hipotética pronto sem perceber foi possível trazer os dados de todos os clientes desse sistema Você pode não acreditar mais isso a ainda assim é pouco do que é possível fazer com SQL injection além de Union comentários é possível concatenar comandos SQL ou seja não é só de select que vive
a injeção SQL quer ver um exemplo disso só para não dizer que estamos exagerando Olha aí no primeiro exemplo temos uma query SQL muito comum que costumamos criar nos sistemas nesse caso estamos selecionando todos os campos da tabela produtos para o produto que tem o ID igual a 10 no segundo exemplo temos a injeção esql a string 10 ponto e vírgula drop produtos traço traço dessa forma ao utilizar o ponto e vírgula estamos empilhando mais queries em uma única chamada esse tipo de execução é suportada pelo usl server e também pelo POG por exemplo dependendo
da proteção ou da falta dela é possível criar alterar e até remover tabelas do sistema em casos mais extremos é possível até ganhar acesso remoto aos servidores através do banco de dados no skl server por exemplo existe uma Storage proceder interna chamada XP CMD Shell que permite a execução de comandos Shell através do tsql se o usuário tiver permissão pra execução dessa proceder seria possível abrir completamente as portas do próprio Servidor ou o pior se o usuário que tiver se conectando ao banco de dados tiver permissão de admin é possível habilitar o XP CMD Shell
Caso esteja desativada eu mesmo já desenvolvi muito com SQL server uma época e eu precisei utilizar componentes externos compilados em arquivos dll dentro do próprio skl server para isso foi necessário da permissão de execução de uma procedur chamada spoa Create esse tipo de procedimento permitia dependendo da dll escancarar a segura a segurança da infra por isso precisa ser utilizado com muito cuidado muitos vão pensar que é preciso então ter conhecimento profundo da estrutura do banco de dados para que seja possível fazer esse tipo de ataque Não se engane uma vez que a brecha é descoberta
é possível gerar uma injeção justamente para descobrir qual é a estrutura de tabelas e Campos existentes no banco de dados tá achando que isso tudo é Teoria da Conspiração Então olha isso aí toma aí dois exemplos utilizando o my Kell e o Oracle nesses casos estamos respectivamente listando as tabelas na primeira consulta e depois os campos de uma respectiva tabela uma vez que esse mapeamento é feito já era praticamente qualquer tipo de de injeção pode ser feita será então que isso é uma vulnerabilidade do próprio sistema de banco de dados não é se você não
quer que ninguém entre na sua casa então você não deveria deixar a porta aberta não é verdade é importante nesse caso aprender a fechar a porta corretamente e não é só para injeção SQL mas para outros tipos de ataques como xss ddos code injection e xxz injection por exemplo a culpa é tão somente de quem desenvolve as aplicações por isso é extremamente importante conhecer um pouco da infra permissões e como os sistemas no qual desenvolvemos e usamos funciona é só assim que vamos aprender a fechar essas portas corretamente o que nós mostramos aqui pmen não
é nem 10% de como é possível fazer ataques com injeção SQL é possível estragar tudo literalmente será então que é complicado se proteger contra esse tipo de ataque não muito pelo contrário é mais simples do que se imagina mas nem todos os devis se preocupam com isso por isso vemos ainda em pleno 2021 esse tipo de vulnerabilidade sendo criada dê uma olhada nisso você já deve ter visto algo parecido por aí em alguma página web se nós temos uma url de uma aplicação que passa por parâmetro o id de um produto seja por query string
ou até usando URL com rota amigável para testar rapidamente se existe vulnerabilidade basta tentar alterar o parâmetro testando realizar uma operação nesse caso 5-1 ou também adicionar uma condicional na cláusula SQL artificialmente se ambos forem o retorno do produto ID com número qu então sabemos que a porta está escancarada já no exemplo utilizando uma string pra busca que também é super comum de se ver basta realizar operações com a string usando Pipe Pipe E também o War se a pesquisa for realizada Nós também teremos a certeza que as cláusulas SQL estão sendo formadas através dos
parâmetros regra pra vida tudo absolutamente tudo que vier a partir do usuário qualquer parâmetro por menor que seja precisa ser validado de alguma forma no nosso jargão costumamos falar preparar argumentos ou higienizar argumentos é dessa forma que podemos nos prevenir de termos um código com vulnerabilidade o uso de ORM que acaba gerando o código SQL automaticamente através das próprias funções também evitam esse tipo de transtorno aliás temos um vídeo só sobre ORM aqui no canal Ó depois dá uma espiada por lá agora se você precisar realmente montar as suas instruções SQL você nunca deve concatenar
os dados vindos do cliente diretamente nas queries é necessário utilizar funções próprias que preparam as queries Olha só esse exemplo nele estamos fechando a porta no PHP usando duas formas diferentes de se conectar ao banco de dados a primeira usa pdo que é uma abstração de acesso ao banco de dados usando o mysqli que é o driver específico para o MySQL no PHP em ambas as soluções os parâmetros são preparados a partir de funções próprias tornando mais seguro enviar informações sem que o sqli funcione assim podemos dormir em paz sabendo que qualquer valor inserido ali
será higienizado e preparado é bem simples mas muitos deves ignoram isso O que é um erro gigante mas só isso pode não ser suficiente quando estamos falando de segurança não podemos achar que é só porque um caminho está seguro podemos ficar tranquilos a segurança em Sistemas computacion anda de mãos dadas com a redundância devemos atacar no bom sentido em todas as direções para me gar chantes e das invasões acontecerem por isso é preciso também atuar diretamente nas permissões das contas utilizadas nos próprios bancos de dados olha só essa imagem como é que é possível permitir
e também restringir o privilégio de usuários no MySQL para Praticamente tudo vamos exemplificar vamos supor que você tenha uma loja virtual e que a sua aplicação faça cadastro de clientes login criação de pedidos e por aí vai automaticamente ao criar um usuário no banco de dados é necessário dar permissão de consulta escrita e remoção nas tabelas do sistema Mas agora você criou uma API só para que os clientes possam consultar os pedidos programaticamente o único insert que a api faz é em uma tabela de log por exemplo não faz sentido nenhum utilizar o mesmo usuário
da loja para epi não faz mesmo é preciso controlar Exatamente esse tipo de permissão e que tipo de de uso é feito só assim o problema pode ser mitigado inclusive nesse caso é recomendável que só dê permissão de consulta na tabela de pedidos produtos e inserte lá na tabela de logs outro ponto super importante é testar é necessário preparar testes de ataqu justamente para cobrir não só os ataques de injeção SQL mas também todos os outros tipos então para resumir injeção SQL é um dos ataques aos sistemas mais utilizados ainda em 2 21 mesmo sendo
relativamente fácil de mitigar todas as informações que mostramos aqui é somente para cunho educativo se por acaso você encontrar alguma vulnerabilidade em algum sistema Nada melhor do que entrar em contato com os administradores e explicar a situação nada de atacar o amiguinho combinado se você quer saber mais sobre os outros tipos de ataques que citamos é só pedir aqui nos comentários que a gente elabora um vídeo com muitos exemplos como esse e mostramos tudo para vocês combinado não esqueça daquele likezinho e até o próximo vídeo que iremos te recomendar depois da vinheta então tchau tchau
Espero que você tenha gostado desse vídeo nós falamos aqui rapidamente sobre SQL mas a verdade é que tem muita coisa ainda para ser D eu tenho certeza que o complemento perfeito desse vídeo aqui é esse aqui do lado ó sobre Justamente a SQL corre lá tenho certeza que você vai aprender ainda mais