Como é feito um ataque SQLi
Ataque básico
O ataque básico ocorre geralmente em formulários de login.
O código acima é a representação básica de um sistema de login desprotegido. Note o perigo que é deixar este código em uma área de administração de um website:
Os dados do formulário são diretamente jogados na instrução SQL. Mas, e se, ao invés de login e senha, colocássemos mais instruções SQL?
Vamos colocar então a seguinte string:
No campo da senha, que é o último. Então, a instrução SQL ficará assim:
SELECT * FROM users WHERE user = '' AND senha = '' or 1='1'
Então verificamos se o usuário e a senha se correspondem ou se 1 é igual a 1. Então, mesmo que o login e a senha estejam incorretos, como 1=1, efetuamos login normalmente.
Claro que há muito mais o que fazer. Com o SQLi é possível entrar em áreas privilegiadas, como a área de administração de um site, mas estudando um pouco mais, ainda apenas inserindo mais instruções SQL, também é possível ver todo o banco de dados, alterar dados e até estar no shell do servidor.
O ataque básico ocorre geralmente em formulários de login.
<?php # Aqui, a variável $user equivale ao dado do campo "user" no formulário. O mesmo ocorre com a senha. <?php # Aqui, a variável $user equivale ao dado do campo "user" no formulário. O mesmo ocorre com a senha. $user = $_POST['user']; $pass = $_POST['pass']; #Agora, da tabela "users", vamos ver se usuario e senha são correspondentes. $query = "SELECT * FROM users WHERE user='{$user}' AND senha='{$senha}'";
Os dados do formulário são diretamente jogados na instrução SQL. Mas, e se, ao invés de login e senha, colocássemos mais instruções SQL?
Vamos colocar então a seguinte string:
' or 1='1
SELECT * FROM users WHERE user = '' AND senha = '' or 1='1'
Então verificamos se o usuário e a senha se correspondem ou se 1 é igual a 1. Então, mesmo que o login e a senha estejam incorretos, como 1=1, efetuamos login normalmente.
Claro que há muito mais o que fazer. Com o SQLi é possível entrar em áreas privilegiadas, como a área de administração de um site, mas estudando um pouco mais, ainda apenas inserindo mais instruções SQL, também é possível ver todo o banco de dados, alterar dados e até estar no shell do servidor.
Novo Comentário: