DVWA之SQL Injection--SQLMap&Fiddler测试(High)

一、测试需求分析

测试对象:DVWA漏洞系统--SQL Injection模块--ID提交功能
防御等级:High
测试目标:判断被测模块是否存在SQL注入漏洞,漏洞是否可利用,若可以则检测出对应的数据库数据
测试方式:手工+Fiddler+ SQLMap工具

url: http://localhost:8001/dvwa/vulnerabilities/sqli/

DVWA之SQL Injection--SQLMap&Fiddler测试(High)_第1张图片
被测模块(防御:High)

session-input.php代码



"; $page[ 'body' ] .= "Session ID: {$_SESSION[ 'id' ]}


"; $page[ 'body' ] .= ""; } $page[ 'body' ] .= "


"; dvwaSourceHtmlEcho( $page ); ?>

防御等级为High的后端控制代码:
high.php

Something went wrong.
' ); // Get results while( $row = mysqli_fetch_assoc( $result ) ) { // Get values $first = $row["first_name"]; $last = $row["last_name"]; // Feedback for end user $html .= "
ID: {$id}
First name: {$first}
Surname: {$last}
"; } ((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. 参数请求 _SESSION[ 'id' ] id =$_POST[ 'id' ] id =$_REQUEST[ 'id' ]
4.查询提交&显示 提交、显示-页面分离控制 提交、显示-页面合一 提交、显示-页面合一

从以上对比分析:

  1. High级别的查询数据提交的页面、查询结果显示的页面是分离成了2个不同的窗口分别控制的。即在查询提交窗口提交数据(POST请求)之后,需要到另外一个窗口进行查看结果(GET请求)。若需获取请求体中的Form Data数据,则需要在提交数据的窗口中查看网络请求数据or通过拦截工具获取
  2. High级别的查询提交页面与查询结果显示页面不是同一个,也没有执行302跳转,这样做的目的是为了防止常规的SQLMap扫描注入测试,因为SQLMap在注入过程中,无法在查询提交页面上获取查询的结果,没有了反馈,也就没办法进一步注入;但是并不代表High级别不能用SQLMap进行注入测试,此时需要利用其非常规的命令联合操作,如:--second-order="xxxurl"(设置二阶响应的结果显示页面的url),具体的操作命令可参看==>SQLMap工具使用选项的操作命令&功能
  3. High级别前端用户提交的id值是首先传入到服务端存储到Session文件中,然后再调用给其他需要该id的地方使用。如PhpStudy+DVWA搭建的环境中,Session文件是存储在服务器根目录下的temp二级文件夹下(...\tmp\tmp):
DVWA之SQL Injection--SQLMap&Fiddler测试(High)_第2张图片
  1. High级别的query语句中增加了LIMIT 1,以此来控制每次常规查询方式只会输出一个结果的记录;不过通过非常规方式,利用注释符#注释掉LIMIT 1的限制,也可以查询出多个结果记录,如1' or 1=1 #
  2. High级别的query语句中id传值并没有对特殊符号(如:单引号')进行转义or限制传递,若采用手工注入方式,则和Low级别的操作流程相似,并不复杂;从以上分析来看,High级别主要是一定长度上限制自动化扫描测试工具SQLMap的常规操作

二、判断注入点&注入类型、获取数据库数据

1.手工方式注入检测

手工操作方式,可参看==>手工测试DVWA之SQL注入漏洞-详细解析(防御: Low) 中的第三步[获取数据库信息]的具体步骤,此处从略

2.利用SQLMap工具注入测试

1)预测试检验
按照以往SQLMap常规的操作方式,首先要后去cookie信息、POST请求体中的Form data数据

DVWA之SQL Injection--SQLMap&Fiddler测试(High)_第3张图片

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

指向命令的效果:

DVWA之SQL Injection--SQLMap&Fiddler测试(High)_第4张图片

以上,说明按照常规的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

查看执行效果:

DVWA之SQL Injection--SQLMap&Fiddler测试(High)_第5张图片

此时已可注入测试成功,判断出注入点的参数和注入的类型。后续列出数据库数据的操作,只需要在以上有效的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抓取数据

DVWA之SQL Injection--SQLMap&Fiddler测试(High)_第6张图片

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

DVWA之SQL Injection--SQLMap&Fiddler测试(High)_第7张图片
sqli.txt
DVWA之SQL Injection--SQLMap&Fiddler测试(High)_第8张图片
存放路径

构造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

查看指向效果:
同样的可以获取到注入点的参数和注入类型

DVWA之SQL Injection--SQLMap&Fiddler测试(High)_第9张图片

你可能感兴趣的:(DVWA之SQL Injection--SQLMap&Fiddler测试(High))