Sei sulla pagina 1di 4

Ataques de SQL Injection

Autor: Denilson Vedoveto Martins


1. Introduo

A segurana de redes um assunto muito presente no ambiente corporativo e exige
ateno especial, principalmente quando se trata de informaes armazenadas em
bancos de dados acessados via web.
Uma das tcnicas de fraude mais conhecida pelos desenvolvedores web o SQL
Injection. Trata-se da manipulao de um comando SQL atravs das variveis que
compem os parmetros recebidos por um script server-side, tal como PHP, ASP,
ColdFusion e outros.
O principal motivo pelo qual deve-se criar medidas de proteo contra o SQL Injection
est no fato de que, atravs de um simples comando SQL em uma pgina web da
empresa, possvel listar todo o banco de dados e at mesmo itens do sistema
operacional, tendo em vista que alguns bancos de dados permitem a execuo de
comandos do shell do prprio sistema operacional.
Para entender o SQL Injection, vamos utilizar um exemplo em PHP para entender o
funcionamento de um comando SQL vlido gerado por uma pgina web. Para isso,
vamos considerar a tela de autenticao encontrada em diversos sistemas web:


Figura 1

O cdigo fonte dessa pgina possui 2 variveis, a primeira com nome "login" que tem
o nome do usurio, neste caso jose, e a segunda com nome "senha" que tem a senha
do usurio, neste caso jose1234:




Figura 2
<form action="login.php" method="post">
Username <input type="text" name="login" />
Password <input type="password" name="senha" />
<input type="submit" />
</form>

Assim que o usurio clicar no boto "Login", o contedo do formulrio ser enviado ao
servidor que tem o seguinte cdigo para ser executado:







Figura 3

Substituindo os valores de "login" por jose e "senha" por jose1234, temos o seguinte
comando SQL:


Figura 4

Esse comando verifica na tabela usuarios se existe uma linha com o login jose e
senha jose1234, se existir, o comando SQL retornar 1 linha de resultado, ento o
usurio jose receber a mensagem "Login OK" e entrar no sistema. Caso contrrio
nenhuma linha ser retornada e receber a mensagem "Login ou senha invlidos" e
no entrar no sistema.


<?php
$sql = "SELECT * FROM usuarios WHERE login = '{$_POST['login']}' AND
senha = '{$_POST['senha']}'";
$res = mysql_query($sql);
if (mysql_num_rows($res) > 0) { <--- LINHA IMPORTANTE
print "Login OK";
}
else {
print "Login ou senha invlidos";
}
?>

SELECT * FROM usuarios WHERE login = 'jose' AND senha = 'jose1234'

2. O ataque SQL Injection

Para ilustrar o conceito de SQL Injection, vamos considerar o mesmo exemplo
anterior, mas dessa vez um atacante tentar acessar o sistema como usurio jose e
sem saber a verdadeira senha deste usurio.

Figura 5

Conforme fizemos no exemplo anterior, substituindo os valores de "login" por jose e
"senha" pela string xxxx' OR TRUE -- , desta forma, temos o seguinte comando SQL:


Figura 6

O servidor vai avaliar o comando SQL da seguinte forma:





Figura 7

Essa consulta vai retornar todas as linhas da tabela usuarios. Assim, como o nmero
de resultados da consulta maior que zero (ver "LINHA IMPORTANTE" na Figura 3),
o atacante conseguir efetuar o login como jose.
Isto foi possvel pois o valor de entrada informado nos campos "login" e "senha" no
receberam o tratamento devido. Diversos outros tipos de ataque via SQL Injection so
possveis, como retornar dados de outros usurios, listar tabelas que um usurio no
tem acesso, apagar informaes de uma tabela, inserir informaes em uma tabela,
dentre vrios outros.

SELECT * FROM usuarios WHERE login = 'jose' AND senha = 'xxxx' OR
TRUE --'

3. Referncias

[1] http://imasters.com.br/artigo/5179/php/sql_injection_no_php_o_que_e_e_como_se_proteger/
[2] http://www.ataraxia.com.br/posts/evitando-sql-injection-em-php
[3] http://st-curriculum.oracle.com/tutorial/SQLInjection/index.htm
[4] http://sabiodainformatica.blogspot.com.br/2012/03/tutorial-sql-injection-avancado.html

Potrebbero piacerti anche