SQLMAP使用教程(一)

一、介绍

官网 https://sqlmap.org/	

sqlmap是一个开源的渗透测试工具,它可以自动化检测和利用SQL注入漏洞并接管数据库服务器。它有一个强大的检测引擎,许多适合于终极
渗透测试的良好特性和众多的操作选项,从数据库指纹、数据获取到访问底层文件系统、执行操作系统命令。 

二、特点

全面支持MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, 
Sybase 和 SAP MaxDB数据库管理系统。
支持六种SQL注入技术:boolean-based盲注、time-based盲注、error-based、UNION查询、堆叠查询和带外查询。
通过提供DBMS凭证、IP地址、端口和数据库名,支持不通过SQL注入的直接连接数据库。
支持枚举用户、密码哈希、特权、角色、数据库、表和列。
自动识别密码哈希格式,支持基于字典的攻击破解。
支持完整转储数据库表,根据用户的选择转储一定范围内的条目或特定列。用户还可以选择只从每列中转储指定字符。
支持搜索特定的数据库名、表名,或跨表搜索特定的列名。这非常有用,例如,识别包含自定义应用程序凭证的表,其相关列名称可能包含
name、pass等字符串。
支持通过数据库服务器所在的文件系统下载和上传任何文件,当数据库软件是MySQL, PostgreSQL或Microsoft SQL server时。
支持通过数据库服务器所在的操作系统执行任意命令并获取输出,当数据库软件为MySQL、PostgreSQL或Microsoft SQL server时。
支持在攻击者机器和数据库服务器所在操作系统之间建立带外有状态的TCP连接,这个通道根据用户的选择可以是交互式命令行、Meterpreter
会话或图形用户界面(VNC)。
支持通过Metasploit的getsystem命令实现数据库进程的用户权限升级。

SQLMAP支持的六种不同的注入方式:
B:Boolean-basedblindSQLinjection(布尔型注入)
E:Error-basedSQLinjection(报错型注入)
U:UNIONquerySQLinjection(可联合查询注入)
S:StackedqueriesSQLinjection(可多语句查询注入)
T:Time-basedblindSQLinjection(基于时间延迟注入)
Q:InlineSQLInjection(内联注入)

三、下载

kali自带 sqlmap
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap

更新sqlmap:
python sqlmap.py --update

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

四、帮助文档

1、显示终端帮助文档

sqlmap -h

2、显示sqlmap详细的帮助文档

sqlmap -hh

3、中文帮助文档

用法:python sqlmap.py [选项]

选项:
  -h, --help            显示基本帮助信息并退出
  -hh                   显示高级帮助信息并退出
  --version             显示程序版本信息并退出
  -v VERBOSE            输出信息详细程度级别:0-6(默认为 1)

  目标:
      至少提供一个以下选项以指定目标

    -d DIRECT           直接连接数据库
    -u URL, --url=URL   目标 URL(例如:"http://www.site.com/vuln.php?id=1"-l LOGFILE          从 Burp 或 WebScarab 代理的日志文件中解析目标地址
    -x SITEMAPURL       从远程网站地图(.xml)文件中解析目标
    -m BULKFILE         从文本文件中获取批量目标
    -r REQUESTFILE      从文件中读取 HTTP 请求
    -g GOOGLEDORK       使用 Google dork 结果作为目标
    -c CONFIGFILEINI 配置文件中加载选项

  请求:
      以下选项可以指定连接目标地址的方式

    --method=METHOD     强制使用提供的 HTTP 方法(例如:PUT--data=DATA         使用 POST 发送数据串
    --param-del=PARA..  设置参数值分隔符
    --cookie=COOKIE     指定 HTTP Cookie 
    --cookie-del=COO..  设置 cookie 分隔符
    --load-cookies=L..  指定以 Netscape/wget 格式存放 cookies 的文件
    --drop-set-cookie   忽略 HTTP 响应中的 Set-Cookie 参数
    --user-agent=AGENT  指定 HTTP User-Agent
    --random-agent      使用随机的 HTTP User-Agent
    --host=HOST         指定 HTTP Host
    --referer=REFERER   指定 HTTP Referer
    -H HEADER, --hea..  设置额外的 HTTP 头参数(例如:"X-Forwarded-For: 127.0.0.1"--headers=HEADERS   设置额外的 HTTP 头参数(例如:"Accept-Language: fr\nETag: 123"--auth-type=AUTH..  HTTP 认证方式(Basic,Digest,NTLMPKI--auth-cred=AUTH..  HTTP 认证凭证(username:password)
    --auth-file=AUTH..  HTTP 认证 PEM 证书/私钥文件
    --ignore-code=IG..  忽略 HTTP 错误码(例如:401--ignore-proxy      忽略系统默认代理设置
    --ignore-redirects  忽略重定向尝试
    --ignore-timeouts   忽略连接超时
    --proxy=PROXY       使用代理连接目标 URL
    --proxy-cred=PRO..  使用代理进行认证(username:password)
    --proxy-file=PRO..  从文件中加载代理列表
    --tor               使用 Tor 匿名网络
    --tor-port=TORPORT  设置 Tor 代理端口代替默认端口
    --tor-type=TORTYPE  设置 Tor 代理方式(HTTPSOCKS4SOCKS5(默认))
    --check-tor         检查是否正确使用了 Tor
    --delay=DELAY       设置每个 HTTP 请求的延迟秒数
    --timeout=TIMEOUT   设置连接响应的有效秒数(默认为 30--retries=RETRIES   连接超时时重试次数(默认为 3--randomize=RPARAM  随机更改给定的参数值
    --safe-url=SAFEURL  测试过程中可频繁访问且合法的 URL 地址(译者注:
                        有些网站在你连续多次访问错误地址时会关闭会话连接,
                        后面的“请求”小节有详细说明)
    --safe-post=SAFE..  使用 POST 方法发送合法的数据
    --safe-req=SAFER..  从文件中加载合法的 HTTP 请求
    --safe-freq=SAFE..  每访问两次给定的合法 URL 才发送一次测试请求
    --skip-urlencode    不对 payload 数据进行 URL 编码
    --csrf-token=CSR..  设置网站用来反 CSRF 攻击的 token
    --csrf-url=CSRFURL  指定可提取反 CSRF 攻击 token 的 URL
    --force-ssl         强制使用 SSL/HTTPS
    --hpp               使用 HTTP 参数污染攻击
    --eval=EVALCODE     在发起请求前执行给定的 Python 代码(例如:
                        "import hashlib;id2=hashlib.md5(id).hexdigest()")

  优化:
    以下选项用于优化 sqlmap 性能

    -o                  开启所有优化开关
    --predict-output    预测常用请求的输出
    --keep-alive        使用持久的 HTTP(S) 连接
    --null-connection   仅获取页面大小而非实际的 HTTP 响应
    --threads=THREADS   设置 HTTP(S) 请求并发数最大值(默认为 1)

  注入:
    以下选项用于指定要测试的参数,
    提供自定义注入 payloads 和篡改参数的脚本

    -p TESTPARAMETER    指定需要测试的参数
    --skip=SKIP         指定要跳过的参数
    --skip-static       指定跳过非动态参数
    --param-exclude=..  用正则表达式排除参数(例如:"ses"--dbms=DBMS         指定 DBMS 类型(例如:MySQL)
    --dbms-cred=DBMS..  DBMS 认证凭据(username:password)
    --os=OS             指定 DBMS 服务器的操作系统类型
    --invalid-bignum    将无效值设置为大数
    --invalid-logical   对无效值使用逻辑运算
    --invalid-string    对无效值使用随机字符串
    --no-cast           关闭 payload 构造机制
    --no-escape         关闭字符串转义机制
    --prefix=PREFIX     注入 payload 的前缀字符串
    --suffix=SUFFIX     注入 payload 的后缀字符串
    --tamper=TAMPER     用给定脚本修改注入数据

  检测:
    以下选项用于自定义检测方式

    --level=LEVEL       设置测试等级(1-5,默认为 1--risk=RISK         设置测试风险等级(1-3,默认为 1--string=STRING     用于确定查询结果为真时的字符串
    --not-string=NOT..  用于确定查询结果为假时的字符串
    --regexp=REGEXP     用于确定查询结果为真时的正则表达式
    --code=CODE         用于确定查询结果为真时的 HTTP 状态码
    --text-only         只根据页面文本内容对比页面
    --titles            只根据页面标题对比页面

  技术:
    以下选项用于调整特定 SQL 注入技术的测试方法

    --technique=TECH    使用的 SQL 注入技术(默认为“BEUSTQ”,译者注:
                        B: Boolean-based blind SQL injection(布尔型盲注)
                        E: Error-based SQL injection(报错型注入)
                        U: UNION query SQL injection(联合查询注入)
                        S: Stacked queries SQL injection(堆查询注入)
                        T: Time-based blind SQL injection(时间型盲注)
                        Q: inline Query injection(内联查询注入)
    --time-sec=TIMESEC  延迟 DBMS 的响应秒数(默认为 5--union-cols=UCOLS  设置联合查询注入测试的列数目范围
    --union-char=UCHAR  用于暴力猜解列数的字符
    --union-from=UFROM  设置联合查询注入 FROM 处用到的表
    --dns-domain=DNS..  设置用于 DNS 渗出攻击的域名(译者注:
                        推荐阅读《在SQL注入中使用DNS获取数据》
                        http://cb.drops.wiki/drops/tips-5283.html,
                        在后面的“技术”小节中也有相应解释)
    --second-order=S..  设置二阶响应的结果显示页面的 URL(译者注:
                        该选项用于二阶 SQL 注入)

  指纹识别:
    -f, --fingerprint   执行广泛的 DBMS 版本指纹识别

  枚举:
      以下选项用于获取后端数据库管理系统的信息,结构和数据表中的数据。
      此外,还可以运行你输入的 SQL 语句

    -a, --all           获取所有信息、数据
    -b, --banner        获取 DBMS banner
    --current-user      获取 DBMS 当前用户
    --current-db        获取 DBMS 当前数据库
    --hostname          获取 DBMS 服务器的主机名
    --is-dba            探测 DBMS 当前用户是否为 DBA(数据库管理员)
    --users             枚举出 DBMS 所有用户
    --passwords         枚举出 DBMS 所有用户的密码哈希
    --privileges        枚举出 DBMS 所有用户特权级
    --roles             枚举出 DBMS 所有用户角色
    --dbs               枚举出 DBMS 所有数据库
    --tables            枚举出 DBMS 数据库中的所有表
    --columns           枚举出 DBMS 表中的所有列
    --schema            枚举出 DBMS 所有模式
    --count             获取数据表数目
    --dump              导出 DBMS 数据库表项
    --dump-all          导出所有 DBMS 数据库表项
    --search            搜索列,表和/或数据库名
    --comments          获取 DBMS 注释
    -D DB               指定要枚举的 DBMS 数据库
    -T TBL              指定要枚举的 DBMS 数据表
    -C COL              指定要枚举的 DBMS 数据列
    -X EXCLUDECOL       指定要排除的 DBMS 数据列
    -U USER             指定枚举的 DBMS 用户
    --exclude-sysdbs    枚举所有数据表时,指定排除特定系统数据库
    --pivot-column=P..  指定主列
    --where=DUMPWHERE   在转储表时使用 WHERE 条件语句
    --start=LIMITSTART  指定要导出的数据表条目开始行数
    --stop=LIMITSTOP    指定要导出的数据表条目结束行数
    --first=FIRSTCHAR   指定获取返回查询结果的开始字符位
    --last=LASTCHAR     指定获取返回查询结果的结束字符位
    --sql-query=QUERY   指定要执行的 SQL 语句
    --sql-shell         调出交互式 SQL shell
    --sql-file=SQLFILE  执行文件中的 SQL 语句

  暴力破解:
    以下选项用于暴力破解测试

    --common-tables     检测常见的表名是否存在
    --common-columns    检测常用的列名是否存在

  用户自定义函数注入:
    以下选项用于创建用户自定义函数

    --udf-inject        注入用户自定义函数
    --shared-lib=SHLIB  共享库的本地路径

  访问文件系统:
    以下选项用于访问后端数据库管理系统的底层文件系统

    --file-read=RFILE   读取后端 DBMS 文件系统中的文件
    --file-write=WFILE  写入后端 DBMS 文件系统中的文件
    --file-dest=DFILE   使用文件绝对路径写入到后端 DBMS

  访问操作系统:
    以下选项用于访问后端数据库管理系统的底层操作系统

    --os-cmd=OSCMD      执行操作系统命令
    --os-shell          调出交互式操作系统 shell
    --os-pwn            调出 OOB shell,Meterpreter 或 VNC
    --os-smbrelay       一键调出 OOB shell,Meterpreter 或 VNC
    --os-bof            利用存储过程的缓冲区溢出
    --priv-esc          数据库进程用户提权
    --msf-path=MSFPATH  Metasploit 框架的本地安装路径
    --tmp-path=TMPPATH  远程临时文件目录的绝对路径

  访问 Windows 注册表:
    以下选项用于访问后端数据库管理系统的 Windows 注册表

    --reg-read          读取一个 Windows 注册表键值
    --reg-add           写入一个 Windows 注册表键值数据
    --reg-del           删除一个 Windows 注册表键值
    --reg-key=REGKEY    指定 Windows 注册表键
    --reg-value=REGVAL  指定 Windows 注册表键值
    --reg-data=REGDATA  指定 Windows 注册表键值数据
    --reg-type=REGTYPE  指定 Windows 注册表键值类型

  通用选项:
    以下选项用于设置通用的参数

    -s SESSIONFILE      从文件(.sqlite)中读入会话信息
    -t TRAFFICFILE      保存所有 HTTP 流量记录到指定文本文件
    --batch             从不询问用户输入,使用默认配置
    --binary-fields=..  具有二进制值的结果字段(例如:"digest"--check-internet    在访问目标之前检查是否正常连接互联网
    --crawl=CRAWLDEPTH  从目标 URL 开始爬取网站
    --crawl-exclude=..  用正则表达式筛选爬取的页面(例如:"logout"--csv-del=CSVDEL    指定输出到 CVS 文件时使用的分隔符(默认为“,”)
    --charset=CHARSET   指定 SQL 盲注字符集(例如:"0123456789abcdef"--dump-format=DU..  导出数据的格式(CSV(默认),HTMLSQLITE--encoding=ENCOD..  指定获取数据时使用的字符编码(例如:GBK--eta               显示每个结果输出的预计到达时间
    --flush-session     清空当前目标的会话文件
    --forms             解析并测试目标 URL 的表单
    --fresh-queries     忽略存储在会话文件中的查询结果
    --har=HARFILE       将所有 HTTP 流量记录到一个 HAR 文件中
    --hex               获取数据时调用 DBMS 的 hex 函数
    --output-dir=OUT..  自定义输出目录路径
    --parse-errors      从响应中解析并显示 DBMS 错误信息
    --save=SAVECONFIG   将选项设置保存到一个 INI 配置文件
    --scope=SCOPE       用正则表达式从提供的代理日志中过滤目标
    --test-filter=TE..  根据 payloads 和/或标题(例如:ROW)选择测试
    --test-skip=TEST..  根据 payloads 和/或标题(例如:BENCHMARK)跳过部分测试
    --update            更新 sqlmap

  其他选项:
    -z MNEMONICS        使用短助记符(例如:“flu,bat,ban,tec=EU”)
    --alert=ALERT       在找到 SQL 注入时运行 OS 命令
    --answers=ANSWERS   设置问题答案(例如:“quit=N,follow=N”)
    --beep              出现问题提醒或在发现 SQL 注入时发出提示音
    --cleanup           指定移除 DBMS 中的特定的 UDF 或者数据表
    --dependencies      检查 sqlmap 缺少什么(非核心)依赖
    --disable-coloring  关闭彩色控制台输出
    --gpage=GOOGLEPAGE  指定页码使用 Google dork 结果
    --identify-waf      针对 WAF/IPS/IDS 保护进行彻底的测试
    --mobile            使用 HTTP User-Agent 模仿智能手机
    --offline           在离线模式下工作(仅使用会话数据)
    --purge-output      安全地删除输出目录的所有内容
    --skip-waf          跳过启发式检测 WAF/IPS/IDS 保护
    --smart             只有在使用启发式检测时才进行彻底的测试
    --sqlmap-shell      调出交互式 sqlmap shell
    --tmp-dir=TMPDIR    指定用于存储临时文件的本地目录
    --web-root=WEBROOT  指定 Web 服务器根目录(例如:"/var/www"--wizard            适合初级用户的向导界面

五、常见命令

1、-u、-v参数

sqlmap -u "http://192.168.1.50/06/vul/sqli/sqli_str.php?name=1&submit=1" -v 1

-u 和 --url参数一样,都是代表填写测试的url连接,如果存在 &符号,需要添加把url放在双引号内。

-v 表示输出信息详细程度级别:0-6(默认为 10:只显示Python回源(tracebacks),错误(error)和关键(criticle)信息。
1:同时显示信息(info)和警告信息(warning)(默认为12: 同时显示调试信息(debug)
3:同时显示注入的有效载荷(payloads)
4:同时显示http请求
5:同时显示http响应头
6:同时显示http响应内容

级别越高,信息就越详细,根据需求选择合适的输出信息。

2、指定目标

1、指定某个url进行测试 :
sqlmap -u http://sqlmap.com/index.php?id=1 -v 1 

2、从文件中加载http请求测试:
sqlmap -r url.txt 

3、从文本中获取多个目标扫描:
sqlmap -m url.txt 
url.txt:
http://www.moonsec.com/index.php?id=1
http://www.moonsec.com/new.php?id=1
http://www.moonsec.com/awd.php?id=1

3、请求

http数据
1、参数 --data
此参数是把数据以post方式提交,sqlmap会自动检测post参数。
sqlmap -u "http://192.168.0.103/06/vul/sqli/sqli_id.php" --data="id=1&submit=1"

在这里插入图片描述

参数:--param-del
当GETPOST的数据需要用其他字符分割测试参数的时候,需要用到此参数。
sqlmap -u "http://www.target.com/vuln.php" --data="query=foobar;id=1" --param-del=";" --dbs --users
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值