Sqlmap中文手册 -Darren制作
零、前言
Sqlmap是十分著名的、自动化的SQL注入工具。为了较为系统地学习Sqlmap,我决定翻译一遍Sqlmap的用户手册,于是便有了此文。由于我英语学得很差,所以翻译地不好。基本上是意译,还加入了我自己的东西,和原文有较大差距。
一、Sqlmap是什么
Sqlmap是开源的自动化SQL注入工具,由Python写成,具有如下特点:
完全支持MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB、HSQLDB和Informix等多种数据库管理系统。
完全支持布尔型盲注、时间型盲注、基于错误信息的注入、联合查询注入和堆查询注入。
在数据库证书、IP地址、端口和数据库名等条件允许的情况下支持不通过SQL注入点而直接连接数据库。
支持枚举用户、密码、哈希、权限、角色、数据库、数据表和列。
支持自动识别密码哈希格式并通过字典破解密码哈希。
支持完全地下载某个数据库中的某个表,也可以只下载某个表中的某几列,甚至只下载某一列中的部分数据,这完全取决于用户的选择。
支持在数据库管理系统中搜索指定的数据库名、表名或列名
当数据库管理系统是MySQL、PostgreSQL或Microsoft SQL Server时支持下载或上传文件。
当数据库管理系统是MySQL、PostgreSQL或Microsoft SQL Server时支持执行任意命令并回现标准输出。
二、安装Sqlmap
Sqlmap的开源项目,托管在github,最简单的安装方式便是使用git,执行如下命令:
git clone https://github.com/sqlmapproject/sqlmap.git
片刻后命令执行完毕,可以看到当前目录中多了一个名为“sqlmap”的目录,
该目录中保存着Sqlmap的Python源码、配置文件和文档。
由于Python是解释执行的语言,不用编译,所以至此最新版的Sqlmap已经安装完成。
cd到“sqlmap”目录中,用命令“python
sqlmap”启动Sqlmap,如下图所示:
当想要更新Sqlmap时,进入到“sqlmap”目录中执行命令“git pull”即可。
三、输出级别(Output verbosity)
参数:-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响应体。
各个级别输出的信息详细到什么程度,还需要自己尝试下,亲眼见到,才会有明确的认识。
四、指定目标
Sqlmap运行时必须指定至少一个目标,支持一次指定多个目标。有以下几种指定目标的方式:
1.直接连接数据库
参数:-d
使用参数“-d”直接连接数据库,该参数后跟一个表示数据库的字符串,该字符串有以下两种格式:
(1).当数据库管理系统是MySQL、Oracle、Microsoft SQL Server或PostgreSQL等时格式为:
DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME
(2).当数据库管理系统是SQLite、Microsoft Access或Firebird等时格式为:
DBMS://DATABASE_FILEPATH
我用如下命令连接装在本机上的Mysql:
python sqlmap.py -d "mysql://root:root@127.0.0.1:3306/DISSchool"
却出现了错误,错误为:
[CRITICAL] sqlmap requires 'python-pymysql' third-party library in order to directly connect to the DBMS 'MySQL'. You can download it from 'https://github.com/petehunt/PyMySQL/'. Alternative is to use a package 'python-sqlalchemy' with support for dialect 'mysql' installed
意思是我没有安装Python连接Mysql用的第三方库python-pymysql。虽然我安装了python-mysqldb可以使Python连接Mysql,但显然Sqlmap使用的是python-pymysql而不是python-mysqldb。使用如下命令安装python-pymysql:
git clone https://github.com/petehunt/PyMySQL/
cd PyMySQL/
sudo python setup.py install
安装好python-pymysql后再执行命令:
python sqlmap.py -d "mysql://root:root@127.0.0.1:3306/DISSchool"
这次没有报错,成功的连接到了数据库。只是除了检测数据库确实是Mysql版本号大于等于5.0.0之外便什么都没有做。让Sqlmap做点什么需要用其他参数指定,这些参数我们稍晚些再学习。
2.指定目标URL
参数:-u 或 –url
使用参数“-u”或“–url”指定一个URL作为目标,该参数后跟一个表示URL的字符串,可以是http协议也可以是https协议,还可以指定端口,如:
python sqlmap.py -u "http://192.168.56.102:8080/user.php?id=0"
3.从Burp或WebScarab的代理日志中解析目标
参数:-l