Sql injection

819 visualizações

Publicada em

Básico de SQL Injection

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
819
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
33
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Sql injection

  1. 1. SQL InjectionTiago Natel de Moura natel@owasp.org
  2. 2. 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
  3. 3. Experiências/InteressesLinguagens: • C, C++, Assembly, LispSeguranç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;
  4. 4. SQL Injection DEMO
  5. 5. SQL InjectionSQL 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.
  6. 6. 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
  7. 7. 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
  8. 8. Como ocorre:Input malicioso:usuario=admin&senha= OR 1=1Query produzida:SELECT id, username, password FROM admin WHERE username=admin and password= OR 1=1;
  9. 9. 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...
  10. 10. 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;
  11. 11. Prepared Statementstmt = 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();
  12. 12. NUNCA utilize blacklistExemplos 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 :)
  13. 13. Quem se beneficia dessas falhas?
  14. 14. BLACK MARKET
  15. 15. BLACK MARKET
  16. 16. FimPerguntas?

×