★★免责声明★★
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
1、sqlmap简介
sqlmap 是一款开源的渗透测试工具,可以自动化进行SQL注入的检测、利用,并能接管数据库服务器。它具有功能强大的检测引擎,为渗透测试人员提供了许多专业的功能并且可以进行组合,其中包括数据库指纹识别、数据读取和访问底层文件系统,甚至可以通过带外数据连接的方式执行系统命令。
项目地址:https://github.com/sqlmapproject/sqlmap
kali系统内置sqlmap工具,可以先查看到版本号,如果不最新版本会提示,升级版本可用命令 apt-get upgrade
进行升级。
kali系统下使用命令
# 查看常用命令列表
sqlmap -h
# 查看所有命令列表
sqlmap -hh
# 查看sqlmap版本号,注意前面是2个横杆
sqlmap --version
如果需要kali系统虚拟机,请关注我的公众号:大象只为你,后台回复:虚拟机。
其他系统比如windows,可以下载源码下来,运行环境是python2.6, 2.7 and 3.x 。以windows为例,使用git命令克隆代码到本地,或者在项目右侧的Release选择最新的Source code(zip)下载并解压即可,确保自己本机有python环境就可用了。
# git命令下载
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
# 查看常用命令列表
python sqlmap.py -h
# 查看所有命令列表
python sqlmap.py -hh
kali系统与windows使用命令不同点在于:前者封装好为sqlmap,后者要加上python,其他没有不同。我个人比较习惯在kali系统下使用,下文给的示例命令都是基于kali系统。
2 、SQL注入攻击流程
SQL注入漏洞产生根本条件是可控变量的存在和特定函数。SQL注入攻击流程一般是猜测数据库类型,再根据数据库类型选择思路。常见开发语言和数据库组合如下:
ASP+Access
ASP.NET+MSSQL
PHP+MySQL
Java+MySQL
怎么查看网站使用开发语言,可用浏览器插件Wappalyzer
,或浏览器按F12看网络请求的响应头X-Powered-By会体现出来。
3、MySQL攻击思路
1、非root的注入攻击:
常规类的猜解,黑盒测试中可以采用user()获取当前用户权限,白盒中看连接用户。
2、root用户的注入攻击:
文件读写操作,跨库查询注入等。
MySQL5.0以上版本,自带的数据库information_schema
,存储数据库下的数据库名及表名,列名信息的数据库。想要获取到相关信息可从以下几方面着手:
1、数据库版本:version()
,看是否带有库information_schema,可用来猜解表名、列名、数据等;
2、数据库用户:user()
,看是否符合ROOT型注入攻击;
3、当前操作系统:@@version_compile_os
,看是否支持大小写或文件路径选择;
4、数据库名字:database()
,为后期猜解指定数据库下的表、列做准备。
4、sqlmap常用命令介绍
-u #注入点,也就是请求url地址,get请求在此处不再加上构造的poc
-f #指纹判别数据库类型
-b #获取数据库版本信息
-p #指定可测试的参数(?page=1&id=2 -p "page,id")
-f #指纹判别数据库类型
-b #获取数据库版本信息
-p #指定可测试的参数(?page=1&id=2 -p "page,id")
-v #详细的等级(0-6)
0:只显示Python的回溯,错误和关键消息。
1:显示信息和警告消息。
2:显示调试消息。
3:有效载荷注入。
4:显示HTTP请求。
5:显示HTTP响应头。
6:显示HTTP响应页面的内容
--data #通过POST发送数据,这个我建议使用参数-r t1.txt t1.txt为请求体内容
--columns #列出字段
--current-user #获取当前用户名称
--current-db #获取当前数据库名称
--users #列数据库所有用户
--passwords #数据库用户所有密码
--privileges #查看用户权限(--privileges -U root)
-U #指定数据库用户
--dbs #列出所有数据库
--tables -D "" #列出指定数据库中的表
--columns -T "user" -D "mysql" #列出mysql数据库中的user表的所有字段
更多命令详解请参考:https://www.cnblogs.com/bmjoker/p/9326258.html ,里面有详细命令含义和一些常用的组合命令。
5、靶场实验
以sqli-labs靶场实验SQL攻击注入,靶场搭建请详见我的另一篇文章《靶场环境搭建【XP、pikachu、dvwa、sqli-labs】》。
5.1、get方式
sqli靶场选择get请求的Less-1
# 确认数据库类型、数据库版本信息、当前用户名称、当前数据库名称、数据库用户所有密码、列出所有数据库
sqlmap -u "http://192.168.242.1/sqli/Less-2/?id=1" -f -b --current-user --current-db --passwords --dbs -v 0
在kali系统输入该命令后按enter执行命令,过程会提问y或n进行确认是否继续操作。如果想继续操作,则输入y或按enter,如果不继续输入n。在爆破密码过程会提示密码字典文件,如果自己没有其他更好的选择,按默认即可,按enter继续。
5.2、post方式
sqli靶场选择post请求的Less-11,打开Burp suite,在输入框架输入任意账号密码,在Burp suite的历史请求记录找到请求记录,把Request的请求体copy到一个新建的文本文件,比如t1.txt,**注意在username=admin后要加*
标识为SQL注入点。**然后把t1.txt文件复制到kali系统的sqlmap命令目录下。
在执行sqlmap
命令时所在目录,比如/home/kali
,把t1.txt复制到/home/kali
下。
# 确认数据库类型、数据库版本信息、当前用户名称、当前数据库名称、数据库用户所有密码、列出所有数据库
# 因为t1.txt里面已经有包含请求路径了,就不需要再设置-u了
sqlmap -r t1.txt -f -b --current-user --current-db --passwords --dbs -v 0
同样的输入该命令后按enter执行命令,过程会提问y或n进行确认是否继续操作。正常情况下都是输入y或按enter往下执行,这边只截取与get方式不同点,后面信息列出来和get一样。
5.3、题外话
sqlmap使用起来真的很简单,但我一直没有使用,最开始给自己找借口说想用手工注入的方式,在学习阶段确实是以手工方式是有助于理解。后面自己懂了原理,总是不想看文档学习,一拖再拖,今天学习后操作起来一点都不难,在挖漏洞方面也会更高效。
6、我的公众号
敬请关注我的公众号:大象只为你,持续更新网安相关知识中…