Bom pessoal, Nickguitar.dll aqui e agora eu vou tentar explicar da maneira mais detalhada possivel o que é e como funciona o SQL Injection..
Primeiro, o que é SQL ?
SQL é a sigla para Structured Query Language, ou seja, linguagem de consulta estruturada..
É a linguagem, digamos "oficial" dos bancos de dados.. (MySQL, MsSQL, SQL Server, PostGreeSQL entre outros)
Bom, então sabemos que SQL é uma linguagem de consulta..
Tá, tá nick, isso eu ja sabia, vamos logo para a invasão
- Bom, vamos lá..
Eu vou mostrar um exemplo em PHP por que não sei muito sobre asp.. Enfim,
Quando voce entra em uma página administrativa, normalmente tem 2 campos, um de login e um de senha, Isso são inputs (Se voce tem o minimo conhecimento em HTML sabe disso)..
Que ficam dentro de um formulario, e são enviados para outra página, onde eles são comparados com os dados na base de dados.
Mas como isso acontece ? Bom, veja o código PHP que faz isso :
Que bosta é essa nick ?
- Essa bosta que nos dará acesso a administração do site..
Voce que é iniciante em PHP, tente descobrir o erro do código.. Não é bem um erro, o codigo vai funcionar, porem está faltando uma coisa..
Bom, voce que nao entende PHP ou MySQL deve estar se perguntando o que é isso..
O código acima faz o seguinte :
Ele seleciona todas as colunas da tabela usuarios, aonde o login é igual a $_POST['login']
EPA, pera ai nick, como assim $_POST['login'] ?
Bom, lembra quando eu disse que tem inputs no formulario ? Essas inputs tem nomes, vamos supor
O nome da input é login.. Tá, mas o que é $_POST[''] ?
$_POST[''] é uma array do PHP, nela voce coloca o nome do campo do formulario que foi submetido, nesse caso o metodo do formulario é POST, então a variavel é $_POST, caso contrário seria $_GET..
Tá, mas voltando ao assunto principal, a query faz isso :
Ele seleciona todas as colunas da tabela usuarios, aonde o login é igual a $_POST['login'] e a senha é igual a $_POST['senha']
Hum legal, então ele vai pegar todos os dados da tabela usuarios e vai comparar com o que voce digitou ? SIM !!
É isso que ele faz, mas tem um problema.. Se digitarmos
no campo de login e senha ? Como ficaria nossa query ?
Assim :
Mas o que isso quer dizer ?
Quer dizer isso :
Selecione tudo da tabela usuarios onde o login é igual a nada OU 1 for igual a 1
O QUE ? 1 FOR IGUAL A 1 ? VOCE TA BRINCANDO COMIGO ?
Não ! Veja, ele vai comparar os dados da tabela com o que voce digitou, então ele diz que é pra selecionar tudo onde o login é nada ou 1 é igual a 1, que é uma condição verdadeira, então ele nos daria acesso ao painel de controle !!
Básicamente é isso, é uma falha simples, mas que pode dar uma dor de cabeça enorme...
Voce pode fazer mais coisas, pode digitar
, assim a query seria :
Os caracteres "--" no MySQL significam comentário, ou seja, o que vem depois daquilo naquela linha é ignorada pelo interpretador..
Voce é desenvolvedor PHP ? Tem um sistema que tem o mesmo tipo de query ?! Ta com medo de invadirem e nao sabe o que fazer ??
Ligue a tv nessa mesma hora, nesse mesmo canal amanhã !
No proximo post eu ensinarei a corrigir essa falha, que é relativamente simples...
Bom, é isso... Espero que tenham entendido tudo.. Qualquer dúvida é só deixar aí que respondo quando puder.
Terminei de escrever isso tudo, e provavelmente algum vadio vai copiar e tirar os créditos..
Peço que voces cliquem em obrigado, é só clicar ali em baixo ! Nao vai atualizar a pagina, nao vai acontecer nada, é só clicar ali e pronto..
Just This (=
Primeiro, o que é SQL ?
SQL é a sigla para Structured Query Language, ou seja, linguagem de consulta estruturada..
É a linguagem, digamos "oficial" dos bancos de dados.. (MySQL, MsSQL, SQL Server, PostGreeSQL entre outros)
Bom, então sabemos que SQL é uma linguagem de consulta..
Tá, tá nick, isso eu ja sabia, vamos logo para a invasão
- Bom, vamos lá..
Eu vou mostrar um exemplo em PHP por que não sei muito sobre asp.. Enfim,
Quando voce entra em uma página administrativa, normalmente tem 2 campos, um de login e um de senha, Isso são inputs (Se voce tem o minimo conhecimento em HTML sabe disso)..
Que ficam dentro de um formulario, e são enviados para outra página, onde eles são comparados com os dados na base de dados.
Mas como isso acontece ? Bom, veja o código PHP que faz isso :
Código PHP:
$query = "SELECT * FROM usuarios WHERE login = $_POST['login'] AND senha = $_POST['senha']";
Que bosta é essa nick ?
- Essa bosta que nos dará acesso a administração do site..
Voce que é iniciante em PHP, tente descobrir o erro do código.. Não é bem um erro, o codigo vai funcionar, porem está faltando uma coisa..
Bom, voce que nao entende PHP ou MySQL deve estar se perguntando o que é isso..
O código acima faz o seguinte :
Ele seleciona todas as colunas da tabela usuarios, aonde o login é igual a $_POST['login']
EPA, pera ai nick, como assim $_POST['login'] ?
Bom, lembra quando eu disse que tem inputs no formulario ? Essas inputs tem nomes, vamos supor
Código PHP:
<input type="text" name="login" />
$_POST[''] é uma array do PHP, nela voce coloca o nome do campo do formulario que foi submetido, nesse caso o metodo do formulario é POST, então a variavel é $_POST, caso contrário seria $_GET..
Tá, mas voltando ao assunto principal, a query faz isso :
Ele seleciona todas as colunas da tabela usuarios, aonde o login é igual a $_POST['login'] e a senha é igual a $_POST['senha']
Hum legal, então ele vai pegar todos os dados da tabela usuarios e vai comparar com o que voce digitou ? SIM !!
É isso que ele faz, mas tem um problema.. Se digitarmos
' or 1=1
Assim :
Código PHP:
$query = "SELECT * FROM usuarios WHERE login = '' or 1=1 AND senha = '' or 1=1";
Quer dizer isso :
Selecione tudo da tabela usuarios onde o login é igual a nada OU 1 for igual a 1
O QUE ? 1 FOR IGUAL A 1 ? VOCE TA BRINCANDO COMIGO ?
Não ! Veja, ele vai comparar os dados da tabela com o que voce digitou, então ele diz que é pra selecionar tudo onde o login é nada ou 1 é igual a 1, que é uma condição verdadeira, então ele nos daria acesso ao painel de controle !!
Básicamente é isso, é uma falha simples, mas que pode dar uma dor de cabeça enorme...
Voce pode fazer mais coisas, pode digitar
Código PHP:
' DROP TABLE usuarios --
Código PHP:
$query = "SELECT * FROM usuarios WHERE login = '' DROP TABLE usuarios -- AND senha = '' or 1=1";
Voce é desenvolvedor PHP ? Tem um sistema que tem o mesmo tipo de query ?! Ta com medo de invadirem e nao sabe o que fazer ??
Ligue a tv nessa mesma hora, nesse mesmo canal amanhã !
No proximo post eu ensinarei a corrigir essa falha, que é relativamente simples...
Bom, é isso... Espero que tenham entendido tudo.. Qualquer dúvida é só deixar aí que respondo quando puder.
Terminei de escrever isso tudo, e provavelmente algum vadio vai copiar e tirar os créditos..
Peço que voces cliquem em obrigado, é só clicar ali em baixo ! Nao vai atualizar a pagina, nao vai acontecer nada, é só clicar ali e pronto..
Just This (=
Comment