史上最详细sqlmap入门教程
最近做安全测试,遇到了SQL盲注的漏洞,从发现漏洞,确认漏洞,协助开发复现漏洞,验证漏洞一整套流程下来,有了亿点点收获,下面分享给大家,希望对软件测试同学有所启发,难度不大,小白看完也能上手的那种。
话不多说,先上图!!!
一、sqlmap工具简介
sqlmap 是一个自动化的 SQL 注入和渗透测试工具,是开源免费的, 支持 MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase 和 SAP MaxDB 等数据库管理系统, 可以帮助渗透测试人员自动化地检测和利用 SQL 注入漏洞,获取数据库服务器上的数据,甚至可以在某些情况下获取操作系统的shell。
sqlmap支持五种不同的注入模式:
基于布尔的盲注,即可以根据返回页面判断条件真假的注入;
基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断;
基于报错注入,即页面会返回错误信息,或者把注入语句的结果直接返回在页面中;
联合查询注入,可以使用 union 情况下的注入;
堆查询注入,可以同时执行多条语句执行时的注入。
二、sqlmap工具安装
1、安装Python
此次演示的Python版本是Python 3.6.6
2、在官网:sqlmap: automatic SQL injection and database takeover tool,下载sqlmap安装包,选择任意一种格式均可
3、解压sqlmap,并将解压的文件复制到Python安装路径下
演示的Python安装目录在:D:\Python36
4、在桌面创建一个cmd的快捷方式,并命名为sqlmap
5、在快捷方式sqlmap上鼠标右键,选择“属性”,把起始位置修改为sqlmap所在路径后,点击“确定”按钮
6、双击快捷方式sqlmap,并输入:sqlmap.py -h
这样,sqlmap就安装成功了。
三、sqlmap参数讲解
1、-u "URL"
指定URL,一般用于get请求
用法:python sqlmap.py -u "接口地址"
例如:python sqlmap.py -u "https://xxxx/saler/list?customerId=2"
2、-r
sqlmap可以从一个文本中读取原始的 HTTP 请求,通过这种方式,能够免于设置部分选项(例如:设置 Cookies,POST 数据等参数)
例如:python sqlmap.py -r D:\user.txt --dbs
如果相关的请求是 HTTPS,可以结合 --force-ssl 开关强制使用 SSL 进行 443/tcp 连接。或者,在 Host 头部信息后面直接加上 :443,使用 Google dork 结果作为目标地址
3、--dbs
如果当前会话用户对数据库系统表有读取权限,则可以枚举出当前数据库名称
例如:python sqlmap.py -r D:\user.txt --dbs
4、--exclude-sysdbs
排除所有的系统数据库
例如:python sqlmap.py -r D:\user.txt --dbs --exclude-sysdbs "information_schema,mysql,performance_schema"
5、--tables
如果当前会话用户对数据库系统表有读取权限,则可以枚举出当前数据库表
例如:python sqlmap.py -r D:\user.txt --tables
6、-D
用来指定数据库,如果不加该参数, sqlmap 将枚举所有 DBMS 数据库的表
例如:python sqlmap.py -r D:\user.txt -D test --tables
7、--columns
如果当前会话用户对数据库系统表有读取权限,则可以枚举出当前数据库表的列名
例如:python sqlmap.py -r D:\user.txt --columns -D testdb -T users -C name
8、-D
用来指定数据库名称
例如:python sqlmap.py -r D:\user.txt --columns -D testdb -T users -C name
9、-T
用来指定数据库表名
例如:python sqlmap.py -r D:\user.txt --columns -D testdb -T users -C name
10、-C
用来指定要枚举的数据库表的列名称
例如:python sqlmap.py -r D:\user.txt --columns -D testdb -T users -C name
11、--fresh-queries
使用这个参数sqlmap将不会从缓存里面加载数据,从而能将最新的数据注入到数据库
例如:python sqlmap.py -r D:\user.txt --dbs --fresh-queries
12、--level
如果 SQL 注入检测的难度越高,则需要设定越高的--level 值,最高级别是5
例如:python sqlmap.py -r D:\user.txt --level=5 --risk=3
13、--risk
风险级别,默认级别是1,风险级别是2时,会在默认的基础上添加大量的时间型盲注语句进行测试,风险级别是3时,会在原基础上添加大量OR类型的布尔型盲注语句进行测试
例如:python sqlmap.py -r D:\user.txt --level=5 --risk=3
这个命令,执行时间会比较久
四、sqlmap实践应用
一)通过工具AppScan扫描SQL盲注漏洞
查看AppScan工具的扫描结果,看是否有SQL盲注漏洞,如果存在,就会有如下图所示的标注
二)分析存在SQL盲注的接口
注入的接口一般分为POST注入和GET注入,两种类型的接口使用工具的方式不一样。
1、POST注入
1)如果接口是POST类型的,就需要把AppScan上该接口的请求信息(请求头+请求体),全部复制到一个txt文件下保存,放到一个本地文件下,例如D:\saler.txt
2)手动登录系统,将D:\saler.txt文件的Cookie值更新为最新值
复制最新的Cookie值
粘贴至D:\saler.txt文件中
3)打开cmd窗口,通过桌面快捷方式进入sqlmap所在目录,执行命令:python sqlmap.py -r D:\user.txt --dbs
命令的格式为:python sqlmap.py -r 请求报文txt文件所在目录位置 --dbs
4)命令执行完成后,分析结果
如果有注入,结果如下(因为我们演示的时候,执行命令的参数是--dbs,所以暴露的是数据库名):
5)将SQL盲注的漏洞反馈给开发同学,让开发同学修复
参考AppScan扫描时的参数,利用抓包工具例如Fiddler或者Charles进行重现
尝试传这四个参数,验证结果是不是不同,如果不一样,则证明存在SQL盲注漏洞
6)待开发修复漏洞后,进行验证
注意验证的时候清除缓存,带--fresh-queries参数,该参数表示sqlmap将不会从缓存里面加载数据,从而能注入到数据库最新的数据
3分钟左右,脚本跑完后,查看结果,如下是已修复的结果
2、GET注入
1)打开cmd窗口,通过桌面快捷方式进入sqlmap所在目录,执行命令:python sqlmap.py -u "https://xxxx/saler/list?customerId=2" --dbs
命令的格式为:python sqlmap.py -u "接口地址" --dbs
2)命令执行完成后,分析结果
如果有注入,结果如下:
如果没有注入,结果如下:
3)将SQL盲注的漏洞反馈给开发同学,让开发同学修复
参考POST注入的方式,GET注入重现也可以不抓包,直接手动登录系统,在浏览器中访问接口地址即可
4)待开发修复漏洞后,进行验证
注意验证的时候清除缓存,带--fresh-queries参数,该参数表示sqlmap将不会从缓存里面加载数据,从而能注入到数据库最新的数据
请参考POST注入的方式
相信大家看完了整个SQL盲注测试流程,对SQL盲注也有了一定的了解,今天的分享就到这里,希望对大家有所启发。(全网同名,转载请注明出处)
史上最详细sqlmap入门教程相关推荐
- 深度学习为什么选择Pytorch?史上最详细Pytorch入门教程
目录 前言 一. Pytorch介绍 1.常见的深度学习框架 2.Pytorch框架的崛起 3.Pytorch与Tensorflow多方位比较 二.Tensors 1.Tensor的创建 2.Tens ...
- python神器_Python的三大神器,你知道是哪三大吗?史上最详细的入门教程!
Python的三大神器:装饰器.迭代器与生成器!这就是Python的三大神器,好了废话不多说.直接来上干货吧! 生成器 仅仅拥有生成某种东西的能力,如果不用__next__方法是获取不到值得. 创建一 ...
- 史上最权威Python爬虫入门教程,15天就能轻松搞定,自嗨玩到爆
Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程.Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数编程语言的使用场 ...
- 史上最全3DMAX入门教程来啦,小白赶紧收藏!
[最新版]3DMAX自学入门教程,3dsmax建模基础教学,游戏建模新手教程,软件介绍和基本操作,3DMAX+PS+Bodypaint**(全集共42集)**,如果无法跳转请移步BILIBILI学习! ...
- Python入门到入土!史上最详细的函数教程!入门真的分分钟!
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(). 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数. 函数的第一行语句可以选择性地使用文档字符串-用于存放函数说明. ...
- python入门之函数调用第3关_Python入门到入土!史上最详细的函数教程!
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(). 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数. 函数的第一行语句可以选择性地使用文档字符串-用于存放函数说明. ...
- 使用iso安装linux系统安装教程,史上最详细linux安装教程
今天小编为大家分享LInux安装教程,基本一步一图,即使初学者也能学会:不信往下划. 1.首先,使用光驱或U盘或你下载的Linux ISO文件进行安装. 界面说明: Install or upgrad ...
- 360系统急救箱服务器,360系统急救箱史上最详细使用方法教程
本帖最后由 360电脑专家003 于 2017-9-11 15:23 编辑 360系统急救箱,支持查杀电脑恶性木马,包含驱动型及MBR型,如果电脑中了顽固的驱动或者引导类木马,请关闭并且退出其他无关程 ...
- K8s集群史上最详细二进制安装教程
1. 安装部署准备工作 1.1 基础环境准备 5台2C/2G/50G磁盘虚拟机(内核版本最低需要3.10) Centos7.6系统 关闭selinux,关闭firewalld 时间同步 调整base源 ...
最新文章
- 用Python玩转微信的正确姿势!
- IBM斥资3.6亿美元建史上最复杂云计算中心
- 热血江湖战无止境与服务器连接不稳定,《热血江湖》V14.0“战无止境”新版玩不停...
- 神啊,6小时30分钟,完成想要的所有Lync测试
- 机器学习速成课程 | 练习 | Google Development——编程练习:神经网络简介
- 在使用Navicat for MySQL 出现 异常“You have an error in your SQL syntax......“
- python import自定义模块方法
- 服务器2003系统序列号,Windows Server 2003 R2 With Sp2 序列号
- 利用python预测sir模型_SI,SIS,SIR模型的正确实现(python)
- 【STM32H7的DSP教程】第13章 DSP快速计算函数-三角函数和平方根
- windows10中最强大王爽汇编语言学习环境
- 用百度地图开发android程序时,location.getAddrStr()总是为null的解决方法
- word目录生成JAVA_aspose word for java添加页码并自动生成目录
- 使用fsck修复损坏磁盘
- 分析APP的安装流程 API29
- 网络直播卖货为什么能火
- 免费快速提升网站流量之方法大结合(转摘有修改)
- sybase 珍藏系列之一
- d1,d2,d3 error
- vivado batch mode
热门文章
- win7文件夹工作组指定计算机共享,win7共享文件夹如何设置成指定IP访问-win7设置共享文件夹,win7共享文件后无权限访问...
- 三步解决微信小程序cdn加速(资源大小超过200k)
- 网络信息安全的防御措施有哪些?
- linux怎么u盘挂载到根目录,Linux系统挂载U盘方法
- App Store和Google Play的商店截图尺寸
- vad唤醒算法_唤醒算法经济后公司需要考虑的问题
- STM32F103的DAC——实现音频输出
- 腊月廿五链界观区块链资讯
- 各系列单片机的简单特点介绍及了解
- 美国海志蓄电池产品介绍