sqlmap-转载
2021-04-20 00:00:00

1.sqlmap是什么

sqlmap是一款自动化的 sql 注入工具,闻名程度匹敌几年前的啊 D,他的功能很多,比如判断是否可以注入,发现,然后利用漏洞,里面也包含了许多绕 waf 的脚本,不过近两年都绕不了了,在 18 年的时候还勉强可以绕过。他支持许多数据库:MySQL,Microsoft sql server,access,sqllite,Oracle,postgreSQL,IBM DB2,sybase,SAP maxdb。当然我都是百度的这些。

sqlmap也是是一款用来检测与利用SQL注入漏洞的免费开源工具,有一个非常棒的特性,即对检测与利用的自动化处理(数据库指纹、访问底层文件系统、执行命令),它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令SQLmap命令选项被归类为目标(Target)选项、请求(Request)选项、优化、注入、检测、技巧(Techniques)、指纹、枚举等。

sqlmap 有几种sql注入方式:布尔盲注,时间盲注,联合查询注入,报错注入,堆查询注入。

sqlmap支持五种不同的注入模式:

基于布尔的盲注,即可以根据返回页面判断条件真假的注入;基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断;基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中;联合查询注入,可以使用union的情况下的注入;堆查询注入,可以同时执行多条语句的执行时的注入。

2.安装 sqlmap

(1)windows下安装

sqlmap 的安装需要 Python 环境,不支持 Python3,可能需要一些组件包的支持,需要有python2.7.x或者2.6.x环境支持。可以去官网直接下载 Python,然后我们去 sqlmap 的官网,网址是:www.sqlmap.org

9d983bfea8000668fe8ece2b105a18d3.png

下载最新的 sqlmap,然后下载后,将压缩包复制到上 Python27 目录下,然后解压下来,然后我们打开 sqlmap,当然是必须在根目录下的,可不要直接在 cmd 打 sqlmap.py

886c46df98e388a6a178c9910c658f48.png

安装完成

(2)kali默认安装sqlmap

3.sqlmap 初步入门

(1)判断是否存在注入

一个网站是否有注入点,我个人认为要依照三个点:1.是否有可控参数,就是 id=1,这个 1 就是参数2.是否可以在数据库执行3.是否可以返回数据

如果有了这三条要点就可以了

我们假如拿到一个站,首先要看他的网页,先不提伪静态的站。假如注入点是 xxx.com/xxx?id=1假如注入点是这个,我们就拿 sqlmap 判断是否存在注入

sqlmap.py -u xxx.com/xxx?id=1

1fe45a1b5cfc61c4254cee96e8a0a392.png

​ 查询是否存在注入

然后我们如果遇到注入点的参数不为 1 的情况时,就是大于 1 时,需要加双引号

sqlmap.py -u “xxx.com/xxx?id=1”

然后我们可以看到,在第一行显示数据库可能是 MySQL,然后我这个出的信息太少,因为以前日过·······大家在找注入点时,检测的过程中会询问你什么问题,你就回车就可以了。

ee011e078b6dd9b86130e59df9cb662b.png

​ 显示存在注入

(2)判断请求数据包中是否存在注入

sqlmap 有个功能,就是可以从 txt 中获取 http 请求,这样就可以不设置一些参数,比如 cookie,我们怎么弄到请求的数据包呢,就拿 burp 抓包,至于怎么抓包我会在下面提到的,然后我们用下面这条指令

sqlmap.py -r desktop/38.5wocnm.txt这条指令我也不怎么经常用,他是存在 cookie 注入才使用的。

(3)查询所有数据库

当 sqlmap 确认可以注入时,我们就可以查询所有数据库了,前提是你的用户有权限读取所有数据库列表时,才可以列出是数据库,命令如下

sqlmap.py -u xxx.com/xxx?id=1 –dbs

33968ec4a9ab3473f81d6eb522c46689.png

​ 查询数据库

我们可以看到,查询了 5 个数据库以及列出了库名,我们在继续注入时,要将–dbs 改为-D xxx,记住要是大写,意思是在 xxx 数据库查询

(4)获取数据库的表名

这个命令是我们前提下已经查询量数据库后,然后我们在查询数据库内的表名,命令如下

sqlmap.py -u xxx.com/xxx?id=1 -D stormgroup –tables

888db29b3ed51f8bce50faf9908dc1c4.png

​ 查询表名

可以看到我们查询出了两个表名

(5)查询表名的字段名

前提还是在我们获取了表名时,查询表内的字段名,当然我们还是跟上面的一样,将 tables 改为大写 T,命令如下:

sqlmap.py -u xxx.com/xxx?id=1 -D stormgroup -T member –columns

9407231896a5a097f77c5f4329ba0399.png

​ 获取具体的字段内容

(6)获取字段内容

我们查询完字段内容,下一步就是获取字段内容了,我们就看 member 表中的 name 和 password 的值,命令如下:

sqlmap.py -u xxx.com/xxx?id=1 -D stormgroup -T member -C name,password –dump

ab698edccc3066de4967041898060305.png

​ 获取具体的字段内容

可以看到列出了账号密码,并且密码是用 md5 加密的

(7)查询数据库名称

用下面这条指令查询当前网站使用的数据库

sqlmap.py -u xxx.com/xxx?id=1 –current-db

a6dffb63381ead2b8bdb8a9cbb88ce78.png

​ 列出当前数据库用户

(9)获取数据库的所有用户

这个命令前提是当前用户有权限读取所有用户的表的权限,命令如下:

sqlmap.py -u xxx.com/xxx?id=1 –users

b2220c4b6c2b7a05a42448abb9ae7f05.png

​ 列出数据库用户

可以看到我们的用户账号是 root,root 是最高权限

(10)获取数据库用户的密码

这个指令是列出数据库用户的密码,命令如下:

sqlmap.py -u xxx.com/xxx?id=1 –password

632364934ba8741229564c895eaff319.png

​ 查询数据库用户密码

以上就是 sqlmap 入门了,接下来我们讲一下更高层面