SQLMap详解

SQLMap是一个自动化的SQL注入工具,其主要功能是扫描、发现并利用给定URL的SQL注入漏洞,内置了很多绕过插件,支持的数据库是MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB。SQLMap采用了以下5种独特的SQL注入技术。

基于布尔类型的盲注,即可以根据返回页面判断条件真假的注入。
基于时间的盲注,即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已执行(即页面返回时间是否增加)来判断。
基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中。
联合查询注入,在可以使用Union的情况下的注入。
堆查询注入,可以同时执行多条语句时的注入。

SQLMap的强大的功能包括数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时实行任意命令。SQLMap的功能强大到让人惊叹,当常规的注入工具不能利用SQL注入漏洞进行注入时,使用SQLMap会有意想不到的效果。

 

命令语法

sqlmap -u http://xx.xx.xxx.xx:5456/admin
 

选项含义

-u 指定目标URL (可以是http协议也可以是https协议)
-d 连接数据库
--dbs 列出所有的数据库
--current-db 列出当前数据库
--tables 列出当前的表
--columns 列出当前的列
-D 选择使用哪个数据库
-T 选择使用哪个表
-C 选择使用哪个列
--dump 获取字段中的数据
--batch 自动选择yes
--smart 启发式快速判断,节约浪费时间
--forms 尝试使用post注入
-r 加载文件中的HTTP请求(本地保存的请求包txt文件)
-l 加载文件中的HTTP请求(本地保存的请求包日志文件)
-g 自动获取Google搜索的前一百个结果,对有GET参数的URL测试
-o 开启所有默认性能优化
--tamper 调用脚本进行注入
-v 指定sqlmap的回显等级
--delay 设置多久访问一次
--os-shell 获取主机shell,一般不太好用,因为没权限
--os-cmd 获取webshell
-m 批量操作
-c 指定配置文件,会按照该配置文件执行动作
-data data指定的数据会当做post数据提交
-timeout 设定超时时间
--level 设置注入探测等级,level有5个等级
--risk 风险等级
--identify-waf 检测防火墙类型
--param-del="分割符"  设置参数的分割符
--skip-urlencode 不进行url编码
--keep-alive 设置持久连接,加快探测速度
--null-connection 检索没有body响应的内容,多用于盲注
--thread 最大为10 设置多线程
 

例如

测试是否存在注入
sqlmap -u ["URL"]

查询当前数据库
sqlmap -u ["URL"] -current-db

查询当前数据库中的所有表
sqlmap -u ["URL"] -D ["数据库名"] --tables

查询指定库中指定表的所有列(字段)
sqlmap -u ["URL"] -D ["数据库名"] -T ["表名"] --columns

指定库中指定表指定列中的字段内容
sqlmap -u ["URL"] -D ["数据库名"] -T ["表名"] -C ["列名"] --dump