18
SQL Injection Tiago Natel de Moura [email protected]

Sql injection

Embed Size (px)

DESCRIPTION

Básico de SQL Injection

Citation preview

Page 1: Sql injection

SQL Injection

Tiago Natel de [email protected]

Page 2: Sql injection

Sobre mim

Pesquisador e co-fundador do grupo BugSec Team. bugsec.googlecode.com

Consultor de Segurança na SEC+. www.secplus.com.br

Co-Fundador e Lider do Capítulo da OWASP de Florianópolis.

Desenvolvedor de algumas ferramentas de segurança: http://github.com/tiago4orion

Page 3: Sql injection

Experiências/Interesses

Linguagens:• C, C++, Assembly, Lisp

Segurança:• Desenvolvimento de Exploits;

• Buffer overflows (Stack/Heap Overrun);

• Network Protocol (TCP/UDP/IP, WEP/WPA, FTP/HTTP, etc)

• Análise de Malwares;

• Web Application Vulnerabilities (SQLI, XSS, CSRF, LFD/RFI, etc)

• Metodologias de segurança;

Page 4: Sql injection

SQL Injection

DEMO

Page 5: Sql injection

SQL Injection

SQL Injection é uma falha que ocorre quando o desenvolvedor permite que a query de consulta ao banco de dados seja manipulada de forma maliciosa por uma entrada do usuário.

Page 6: Sql injection

Programadores não gostam de crashar seus softwares ...

Query na aplicação:

Sql = “SELECT id, username, password FROM admin WHERE username = '“ + req.getParameter(“usuario”) + “' and password = '” + req.getParameter(“senha”) + “'”;

Como ele testa:

[POST] http://localhost/login.do?usuario=admin&senha=123456

Page 7: Sql injection

Programadores não gostam de crashar seus softwares ...

Query na aplicação:

Sql = “SELECT id, username, password FROM admin WHERE username = '“ + req.getParameter(“usuario”) + “' and password = '” + req.getParameter(“senha”) + “'”;

Como o hacker testa:

[POST] http://localhost/login.do?usuario=admin&senha=' or 1=1 LIMIT 1

Page 8: Sql injection

Como ocorre:

Input malicioso:

usuario=admin&senha=' OR 1=1

Query produzida:

SELECT id, username, password FROM admin WHERE username='admin' and password='' OR 1=1;

Page 9: Sql injection

O que o hacker pode fazer?

Roubar todos os dados do seu banco de dados;

Inserir, atualizar ou DELETAR dados do banco; Autenticar com a conta de qualquer usuário; Ler e escrever arquivos dentro do seu servidor; Executar comandos no sistema (exec

xp_cmdshell); Upload de arquivos (Oracle); Requisição em outros servidores (Oracle); E muito mais...

Page 10: Sql injection

Como se proteger?

Saiba o tipo de dado de todo input do usuário e transforme a entrada num objeto desse tipo;

Utilize Prepared Statements; Se não for possivel usar prepare, utilize

whitelist de caracteres válidos; NUNCA use blacklist;

Page 11: Sql injection

Prepared Statement

stmt = conn.prepareStatement(“SELECT id, username, password FROM admin WHERE username = ? and password = ?”);

stmt.setString(0, req.getParameter(“usuario”));

stmt.setString(1, reg.getParameter(“senha”));

stmt.execute();

Page 12: Sql injection

NUNCA utilize blacklist

Exemplos de formas de burlas blacklists: ' uNiOn AlL SeLecT 999 fRoM admin '/**/UnIoN/**/aLl/**/sElECT/**/666/**/fRoM/**/ad

min '%0a--%a%2f**%2f--%0asElEct--%0a666%2f**

%2f … Utilize a imaginação :)

Page 13: Sql injection

Quem se beneficia dessas falhas?

Page 14: Sql injection
Page 15: Sql injection
Page 16: Sql injection

BLACK MARKET

Page 17: Sql injection

BLACK MARKET

Page 18: Sql injection

Fim

Perguntas?