最近做安全测试,遇到了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入门教程相关推荐

  1. 深度学习为什么选择Pytorch?史上最详细Pytorch入门教程

    目录 前言 一. Pytorch介绍 1.常见的深度学习框架 2.Pytorch框架的崛起 3.Pytorch与Tensorflow多方位比较 二.Tensors 1.Tensor的创建 2.Tens ...

  2. python神器_Python的三大神器,你知道是哪三大吗?史上最详细的入门教程!

    Python的三大神器:装饰器.迭代器与生成器!这就是Python的三大神器,好了废话不多说.直接来上干货吧! 生成器 仅仅拥有生成某种东西的能力,如果不用__next__方法是获取不到值得. 创建一 ...

  3. 史上最权威Python爬虫入门教程,15天就能轻松搞定,自嗨玩到爆

    Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程.Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数编程语言的使用场 ...

  4. 史上最全3DMAX入门教程来啦,小白赶紧收藏!

    [最新版]3DMAX自学入门教程,3dsmax建模基础教学,游戏建模新手教程,软件介绍和基本操作,3DMAX+PS+Bodypaint**(全集共42集)**,如果无法跳转请移步BILIBILI学习! ...

  5. Python入门到入土!史上最详细的函数教程!入门真的分分钟!

    函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(). 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数. 函数的第一行语句可以选择性地使用文档字符串-用于存放函数说明. ...

  6. python入门之函数调用第3关_Python入门到入土!史上最详细的函数教程!

    函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(). 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数. 函数的第一行语句可以选择性地使用文档字符串-用于存放函数说明. ...

  7. 使用iso安装linux系统安装教程,史上最详细linux安装教程

    今天小编为大家分享LInux安装教程,基本一步一图,即使初学者也能学会:不信往下划. 1.首先,使用光驱或U盘或你下载的Linux ISO文件进行安装. 界面说明: Install or upgrad ...

  8. 360系统急救箱服务器,360系统急救箱史上最详细使用方法教程

    本帖最后由 360电脑专家003 于 2017-9-11 15:23 编辑 360系统急救箱,支持查杀电脑恶性木马,包含驱动型及MBR型,如果电脑中了顽固的驱动或者引导类木马,请关闭并且退出其他无关程 ...

  9. K8s集群史上最详细二进制安装教程

    1. 安装部署准备工作 1.1 基础环境准备 5台2C/2G/50G磁盘虚拟机(内核版本最低需要3.10) Centos7.6系统 关闭selinux,关闭firewalld 时间同步 调整base源 ...

最新文章

  1. 用Python玩转微信的正确姿势!
  2. IBM斥资3.6亿美元建史上最复杂云计算中心
  3. 热血江湖战无止境与服务器连接不稳定,《热血江湖》V14.0“战无止境”新版玩不停...
  4. 神啊,6小时30分钟,完成想要的所有Lync测试
  5. 机器学习速成课程 | 练习 | Google Development——编程练习:神经网络简介
  6. 在使用Navicat for MySQL 出现 异常“You have an error in your SQL syntax......“
  7. python import自定义模块方法
  8. 服务器2003系统序列号,Windows Server 2003 R2 With Sp2 序列号
  9. 利用python预测sir模型_SI,SIS,SIR模型的正确实现(python)
  10. 【STM32H7的DSP教程】第13章 DSP快速计算函数-三角函数和平方根
  11. windows10中最强大王爽汇编语言学习环境
  12. 用百度地图开发android程序时,location.getAddrStr()总是为null的解决方法
  13. word目录生成JAVA_aspose word for java添加页码并自动生成目录
  14. 使用fsck修复损坏磁盘
  15. 分析APP的安装流程 API29
  16. 网络直播卖货为什么能火
  17. 免费快速提升网站流量之方法大结合(转摘有修改)
  18. sybase 珍藏系列之一
  19. d1,d2,d3 error
  20. vivado batch mode

热门文章

  1. win7文件夹工作组指定计算机共享,win7共享文件夹如何设置成指定IP访问-win7设置共享文件夹,win7共享文件后无权限访问...
  2. 三步解决微信小程序cdn加速(资源大小超过200k)
  3. 网络信息安全的防御措施有哪些?
  4. linux怎么u盘挂载到根目录,Linux系统挂载U盘方法
  5. App Store和Google Play的商店截图尺寸
  6. vad唤醒算法_唤醒算法经济后公司需要考虑的问题
  7. STM32F103的DAC——实现音频输出
  8. 腊月廿五链界观区块链资讯
  9. 各系列单片机的简单特点介绍及了解
  10. 美国海志蓄电池产品介绍