#compdef sqlmap.py

# sqlmap completion commands. written by kost
# put this file in your zsh completion dir and restart your shell. Zsh completion dir is usually 
# located somewhere in /usr/share/zsh/ or /usr/local/share/zsh 

local curcontext="$curcontext" state line

_arguments -C -s \
  '(- *)'{--help,-h}'[Show basic help message and exit]' \
  '(- *)'-hh'[Show advanced help message and exit]' \
  '(-v)'-v+'[Verbosity level: 0-6 (default 1)]:Verbosity level (0-6) - default 1' \
  '(-d)'-d+'[Direct connection to the database]' \
  '(-u,--url)'{-u+,--url=-}'[Target url]' \
  '(-g)'-g+'[Process Google dork results as target urls]' \
  '(--data)'--data=-'[Data string to be sent through POST]' \
  '(-l)'-l+'[Parse targets from Burp or WebScarab proxy logs]:LOGFILE:_files' \
  '(-m)'-m+'[Scan multiple targets enlisted in a given textual file]:BULKFILE:_files' \
  '(-r)'-r+'[Load HTTP request from a file]:REQUESTFILE:_files' \
  '(-s)'-s+'[Load session from a stored (.sqlite) file]:SESSIONFILE:_files' \
  '(-c)'-c+'[Load options from a configuration INI file]:CONFIGFILE:_files' \
  '(--param-del)'--param-del=-'[Character used for splitting parameter values]:PDEL' \
  '(--cookie)'--cookie=-'[HTTP Cookie header]:COOKIE' \
  '(--load-cookies)'--load-cookies=-'[File containing cookies in Netscape/wget format]:COOKIEFILE:_files' \
  '(--drop-set-cookie)'--drop-set-cookie'[Ignore Set-Cookie header from response]' \
  '(--user-agent)'--user-agent=-'[HTTP User-Agent header]:HTTP User Agent' \
  '(--random-agent)'--random-agent'[Use randomly selected HTTP User-Agent header]' \
  '(--randomize)'--randomize=-'[Randomly change value for given parameter(s)]:RPARAM' \
  '(--force-ssl)'--force-ssl'[Force usage of SSL/HTTPS requests]' \
  '(--host)'--host=-'[HTTP Host header]:Host Header' \
  '(--referer)'--referer=-'[HTTP Referer header]:REFERER' \
  '(--headers)'--headers=-'[Extra headers (e.g. Accept-Language: fr\nETag: 123)]:HEADERS' \
  '(--auth-type)'--auth-type=-'[HTTP authentication type (Basic, Digest or NTLM)]:ATYPE' \
  '(--auth-cred)'--auth-cred=-'[HTTP authentication credentials (name:password)]:ACRED' \
  '(--auth-cert)'--auth-cert=-'[HTTP authentication certificate (key_file,cert_file)]:ACERT:_files' \
  '(--proxy)'--proxy=-'[Use a HTTP proxy to connect to the target url]:PROXY' \
  '(--proxy-cred)'--proxy-cred=-'[HTTP proxy authentication credentials (name:password)]:PCRED' \
  '(--ignore-proxy)'--ignore-proxy'[Ignore system default HTTP proxy]' \
  '(--delay)'--delay=-'[Delay in seconds between each HTTP request]:DELAY' \
  '(--timeout)'--timeout=-'[Seconds to wait before timeout connection (default 30)]:TIMEOUT' \
  '(--retries)'--retries=-'[Retries when the connection timeouts (default 3)]:RETRIES' \
  '(--scope)'--scope=-'[Regexp to filter targets from provided proxy log]:SCOPE' \
  '(--safe-url)'--safe-url=-'[Url address to visit frequently during testing]:SAFURL' \
  '(--safe-freq)'--safe-freq=-'[Test requests between two visits to a given safe url]:SAFREQ' \
  '(--skip-urlencode)'--skip-urlencode'[Skip URL encoding of payload data]' \
  '(--eval)'--eval=-'[Evaluate provided Python code before the request (e.g.]:EVALCODE' \
  '(-o)'-o'[Turn on all optimization switches]' \
  '(--predict-output)'--predict-output'[Predict common queries output]' \
  '(--keep-alive)'--keep-alive'[Use persistent HTTP(s) connections]' \
  '(--null-connection)'--null-connection'[Retrieve page length without actual HTTP response body]' \
  '(--threads)'--threads=-'[Max number of concurrent HTTP(s) requests (default 1)]:THREADS' \
  '(-p)'-p+'[Testable parameter(s)]:TESTPARAMETER' \
  '(--dbms)'--dbms=-'[Force back-end DBMS to this value]:DBMS:->list-dbms' \
  '(--os)'--os=-'[Force back-end DBMS operating system to this value]:OS:->list-os' \
  '(--invalid-bignum)'--invalid-bignum'[Use big numbers for invalidating values]' \
  '(--invalid-logical)'--invalid-logical'[Use logical operations for invalidating values]' \
  '(--no-cast)'--no-cast'[Turn off payload casting mechanism]' \
  '(--no-unescape)'--no-unescape'[Turn off string unescaping mechanism]' \
  '(--prefix)'--prefix=-'[Injection payload prefix string]:PREFIX' \
  '(--suffix)'--suffix=-'[Injection payload suffix string]:SUFFIX' \
  '(--skip)'--skip=-'[Skip testing for given parameter(s)]:SKIP' \
  '(--tamper)'--tamper=-'[Use given script(s) for tampering injection data]:TAMPER' \
  '(--level)'--level=-'[Level of tests to perform (1-5, default 1)]:LEVEL (1-5), default 1' \
  '(--risk)'--risk=-'[Risk of tests to perform (0-3, default 1)]:RISK (0-3), default 1' \
  '(--string)'--string=-'[String to match when query is evaluated to True]:STRING' \
  '(--not-string)'--not-string=-'[String to match when query is evaluated to False]:NOTSTRING' \
  '(--regexp)'--regexp=-'[Regexp to match when query is evaluated to True]:REGEXP' \
  '(--code)'--code=-'[HTTP code to match when query is evaluated to True]' \
  '(--text-only)'--text-only'[Compare pages based only on the textual content]' \
  '(--titles)'--titles'[Compare pages based only on their titles]' \
  '(--technique)'--technique=-'[SQL injection techniques to test for (default "BEUST")]:TECH:->list-techniques' \
  '(--time-sec)'--time-sec=-'[Seconds to delay the DBMS response (default 5)]:TIMESEC' \
  '(--union-cols)'--union-cols=-'[Range of columns to test for UNION query SQL injection]:UCOLS' \
  '(--union-char)'--union-char=-'[Character to use for bruteforcing number of columns]:UCHAR' \
  '(--dns-domain)'--dns-domain=-'[Domain name used for DNS exfiltration attack]:DNSDOMAIN' \
  '(--second-order)'--second-order=-'[Resulting page url searched for second-order response]:SECONDORDER' \
  '(-f,--fingerprint)'{-f,--fingerprint}'[Perform an extensive DBMS version fingerprint]' \
  '(-a,--all)'{-a,--all}'[Retrieve everything]' \
  '(-b,--banner)'{-b,--banner}'[Retrieve DBMS banner]' \
  '(--current-user)'--current-user'[Retrieve DBMS current user]' \
  '(--current-db)'--current-db'[Retrieve DBMS current database]' \
  '(--hostname)'--hostname'[Retrieve DBMS server hostname]' \
  '(--is-dba)'--is-dba'[Detect if the DBMS current user is DBA]' \
  '(--users)'--users'[Enumerate DBMS users]' \
  '(--passwords)'--passwords'[Enumerate DBMS users password hashes]' \
  '(--privileges)'--privileges'[Enumerate DBMS users privileges]' \
  '(--roles)'--roles'[Enumerate DBMS users roles]' \
  '(--dbs)'--dbs'[Enumerate DBMS databases]' \
  '(--tables)'--tables'[Enumerate DBMS database tables]' \
  '(--columns)'--columns'[Enumerate DBMS database table columns]' \
  '(--schema)'--schema'[Enumerate DBMS schema]' \
  '(--count)'--count'[Retrieve number of entries for table(s)]' \
  '(--dump)'--dump'[Dump DBMS database table entries]' \
  '(--dump-all)'--dump-all'[Dump all DBMS databases tables entries]' \
  '(--search)'--search'[Search column(s), table(s) and/or database name(s)]' \
  '(-D)'-D+'[DBMS database to enumerate]:DB' \
  '(-T)'-T+'[DBMS database table to enumerate]:TBL' \
  '(-C)'-C+'[DBMS database table column to enumerate]:COL' \
  '(-U)'-U+'[DBMS user to enumerate]:USER' \
  '(--exclude-sysdbs)'--exclude-sysdbs'[Exclude DBMS system databases when enumerating tables]' \
  '(--start)'--start=-'[First query output entry to retrieve]:LIMITSTART' \
  '(--stop)'--stop=-'[Last query output entry to retrieve]:LIMITSTOP' \
  '(--first)'--first=-'[First query output word character to retrieve]:FIRSTCHAR' \
  '(--last)'--last=-'[Last query output word character to retrieve]:LASTCHAR' \
  '(--sql-query)'--sql-query=-'[SQL statement to be executed]:QUERY' \
  '(--sql-shell)'--sql-shell'[Prompt for an interactive SQL shell]' \
  '(--sql-file)'--sql-file=-'[Execute SQL statements from given file(s)]:SQLFILE:_files' \
  '(--common-tables)'--common-tables'[Check existence of common tables]' \
  '(--common-columns)'--common-columns'[Check existence of common columns]' \
  '(--udf-inject)'--udf-inject'[Inject custom user-defined functions]' \
  '(--shared-lib)'--shared-lib=-'[Local path of the shared library]:SHLIB' \
  '(--file-read)'--file-read=-'[Read a file from the back-end DBMS file system]:RFILE' \
  '(--file-write)'--file-write=-'[Write a local file on the back-end DBMS file system]:WFILE' \
  '(--file-dest)'--file-dest=-'[Back-end DBMS absolute filepath to write to]:DFILE' \
  '(--os-cmd)'--os-cmd=-'[Execute an operating system command]:OSCMD' \
  '(--os-shell)'--os-shell'[Prompt for an interactive operating system shell]' \
  '(--os-pwn)'--os-pwn'[Prompt for an out-of-band shell, meterpreter or VNC]' \
  '(--os-smbrelay)'--os-smbrelay'[One click prompt for an OOB shell, meterpreter or VNC]' \
  '(--os-bof)'--os-bof'[Stored procedure buffer overflow exploitation]' \
  '(--priv-esc)'--priv-esc'[Database process user privilege escalation]' \
  '(--msf-path)'--msf-path=-'[Local path where Metasploit Framework is installed]:MSFPATH' \
  '(--tmp-path)'--tmp-path=-'[Remote absolute path of temporary files directory]:TMPPATH' \
  '(--reg-read)'--reg-read'[Read a Windows registry key value]' \
  '(--reg-add)'--reg-add'[Write a Windows registry key value data]' \
  '(--reg-del)'--reg-del'[Delete a Windows registry key value]' \
  '(--reg-key)'--reg-key=-'[Windows registry key]:REGKEY' \
  '(--reg-value)'--reg-value=-'[Windows registry key value]:REGVAL' \
  '(--reg-data)'--reg-data=-'[Windows registry key value data]:REGDATA' \
  '(--reg-type)'--reg-type=-'[Windows registry key value type]:REGTYPE' \
  '(-t)'-t+'[Log all HTTP traffic into a textual file]:TRAFFICFILE' \
  '(--batch)'--batch'[Never ask for user input, use the default behaviour]' \
  '(--charset)'--charset=-'[Force character encoding used for data retrieval]:CHARSET' \
  '(--check-tor)'--check-tor'[Check to see if Tor is used properly]' \
  '(--crawl)'--crawl=-'[Crawl the website starting from the target url]:CRAWLDEPTH' \
  '(--csv-del)'--csv-del=-'[Delimiting character used in CSV output (default is ,)]:CSVDEL' \
  '(--dbms-cred)'--dbms-cred=-'[DBMS authentication credentials (user:password)]:DBMS authentication credentials' \
  '(--eta)'--eta'[Display for each output the estimated time of arrival]' \
  '(--flush-session)'--flush-session'[Flush session files for current target]' \
  '(--forms)'--forms'[Parse and test forms on target url]' \
  '(--fresh-queries)'--fresh-queries'[Ignores query results stored in session file]' \
  '(--hex)'--hex'[Uses DBMS hex function(s) for data retrieval]' \
  '(--output-dir)'--output-dir=-'[Custom output directory path]:ODIR' \
  '(--parse-errors)'--parse-errors'[Parse and display DBMS error messages from responses]' \
  '(--save)'--save'[Save options to a configuration INI file]' \
  '(--tor)'--tor'[Use Tor anonymity network]' \
  '(--tor-port)'--tor-port=-'[Set Tor proxy port other than default]:TORPORT' \
  '(--tor-type)'--tor-type=-'[Set Tor proxy type (HTTP - default, SOCKS4 or SOCKS5)]:TORTYPE' \
  '(--update)'--update'[Update sqlmap]' \
  '(-z)'-z+'[Use short mnemonics (e.g. flu,bat,ban,tec=EU)]:MNEMONICS' \
  '(--check-payload)'--check-payload'[Offline WAF/IPS/IDS payload detection testing]' \
  '(--check-waf)'--check-waf'[Check for existence of WAF/IPS/IDS protection]' \
  '(--cleanup)'--cleanup'[Clean up the DBMS by sqlmap specific UDF and tables]' \
  '(--dependencies)'--dependencies'[Check for missing (non-core) sqlmap dependencies]' \
  '(--disable-coloring)'--disable-coloring'[Disable console output coloring]' \
  '(--gpage)'--gpage=-'[Use Google dork results from specified page number]:GOOGLEPAGE' \
  '(--mobile)'--mobile'[Imitate smartphone through HTTP User-Agent header]' \
  '(--page-rank)'--page-rank'[Display page rank (PR) for Google dork results]' \
  '(--purge-output)'--purge-output'[Safely remove all content from output directory]' \
  '(--smart)'--smart'[Conduct through tests only if positive heuristic(s)]' \
  '(--test-filter)'--test-filter=-'[Select tests by payloads and/or titles (e.g. ROW)]:test-filter' \
  '(--wizard)'--wizard'[Simple wizard interface for beginner users]' && return 0

case "$state" in
  list-dbms)
    _values -S : 'DBMS' 'access' 'db2' 'firebird' 'maxdb' 'mssqlserver' 'mysql' 'oracle' 'postgresql' \
		 'sqlite' 'sybase'
    ;;
  list-os)
    _values -S : 'os' 'Linux' 'Windows' 
    ;;
  list-techniques)
  	_values -S : 'technique' \
	'B[Boolean]' 'E[Error]'  'U[Union]' 'S[Stacked]' 'T[Time]'
  ;;
esac

return 0
