安装
- python 环境
- 下载地址http://sqlmap.org/
特点
- 完全支持MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB、HSQLDB和Informix等多种数据库管理系统。
- 完全支持布尔型盲注、时间型盲注、基于错误信息的注入、联合查询注入和堆查询注入。
- 在数据库证书、IP地址、端口和数据库名等条件允许的情况下支持不通过SQL注入点而直接连接数据库。
- 支持枚举用户、密码、哈希、权限、角色、数据库、数据表和列。
- 支持自动识别密码哈希格式并通过字典破解密码哈希。
- 支持完全地下载某个数据库中的某个表,也可以只下载某个表中的某几列,甚至只下载某一列中的部分数据,这完全取决于用户的选择。
- 支持在数据库管理系统中搜索指定的数据库名、表名或列名
sqlmap注入介绍
所谓SQL注入,就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串, 最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将SQL命令注入 到后台数据库引擎执行的能力,它可以通过在web表单中输入SQL语句得到一个存在安全漏洞 的网站上的数据库,而不是按照设计者意图去执行SQL语句
常用命令
参数-v
输出级别
Sqlmap的输出信息按从简到繁共分为7个级别依次为0、1、2、3、4、5和6。使用参数-v 来 指定某个等级,如使用参数-v 6来指定输出级别为6。默认输出级别为1。
- 0:只显示Python的tracebacks信息、错误信息[ERROR]和关键信息[CRITICAL]
- 1:同时显示普通信息[INFO]和警告信息[WARNING]
- 2:同时显示调试信息[DEBUG]
- 3:同时显示注入使用的攻击荷载
- 4:同时显示HTTP请求头
- 5:同时显示HTTP响应头
- 6:同时显示HTTP响应体
参数-b
,--banner
检索数据库信息
大多数的数据库系统都有一个函数可以返回数据库的版本号,通常这个函数是version()或者变量@@version这主要取决与是什么数据库。
参数--dbs
列举数据库
当前用户有权限读取包含所有数据库列表信息的表中的时候,即可列出所有的数据库。
列举数据库表
参数-d
直连数据库
- 服务型数据库-MySQL,Oracle
python3 sqlmap.py -d "mysql://用户名:密码@地址:端口/数据库名字" -f --banner --dbs --users
python sqlmap.py -d "mysql://root:toor@localhost:3306/mysql" -f --banner --dbs --users
- 文件型数据库-SQLite
参数-u
,--url
指定目标URL获取
URL格式:http(s)://targetur\[:port\]/
python sqlmap.py -u "http://127.0.0.1:3306?id=1"
参数-x
读取xml站点地图
为便于搜索引擎收录,许多网站专门为搜索引擎生成了xml格式的站点地图
参数-m
扫描文本文件中给定的多个目标
从多行文本格式文件读取多个目标,对多个目标进行探测
sqlmap -m target.txt
www.target1.com/vuln1.php?q=foobar
www.target2.com/vuln2.asp?id=1
www.target3.com/vuln3/id/1*
参数-r
从文件加载HTTP请求
可以将一个HTTP请求保存在文件中,然后使用参数
sqlmap -m target.txt
POST /vuln.php HTTP/1.1
Host: www.target.com
User-Agent: Mozilla/4.0
id=1
参数-l
日志文件分析
可以直接把Burp proxy或者WebScarab proxy中的日志直接倒出来交给sqlmap来一个一个检测是否有注入。
从文本中获取多个目标扫描
参数-c
配置文件读取
从配置文件sqlmap.conf中读取目标探测
参数-g
Google搜索引擎结果作为目标url处理
sqlmap可以测试注入Google的搜索结果中的GET参数(只获取前100个结果)。
python sqlmap.py -g "inurl:\".php?id=1\""
参数--method
强制使用给定的HTTP请求方法
一般来说,Sqlmap能自动判断出是使用GET方法还是POST方法,但在某些情况下需要的可能是PUT 等很少见的方法,此时就需要用参数--method来指定方法。
python sqlmap.py -u "http://127.0.0.1:3306" --method=GET
参数--data
表单提交数据
默认情况下,用于执行HTTP请求的HTTP方法是GET,但是可以通过提供在POST请求中发送的数据隐式 的将其改为POST。这些数据作为参数,被用于SQL注入检测
python sqlmap.py -u "http://127.0.0.1:3306" --method=POST --data="username=123&password=456"
设置cookie
当你使用--cookie参数时,当返回一个Set-Cookie头的时候,sqlmap会询问你用哪个cookie来继续接下来的请求。当--level
的参数设定为2或者2以上的时候,sqlmap会尝试注入Cookie参数。
--cookie #设置cookie
--cookie-del # 设置cookie分隔符
--load-cookies # 通过带有cookie的Netscape/wget格式的文件进行探测注入
--drop-set-cookie # 如果响应中使用set-cookie设置了新的cookie,sqlmap会在之后的探测中使用它,可以用这个参数忽略新cookie。
--cookie="PHPSESSID=a8d127efc693b45"
--cookie-del="&"