文档详情

Web安全与防护 实训指南 3.4SQL注入过滤的绕过与防范.pdf

发布:2025-03-03约4.14千字共5页下载文档
文本预览下载声明

SQL注入过滤的绕过与防范

【实训目的】

1.掌握数字注入的漏洞的检测与利用方法。

2.掌握数字型注入漏洞的防范方法。

3.掌握字符型注入漏洞的防范方法。

【实训原理】

利用DVWA系统的SQL注入的Low、Medium、High、impossible四种安全

级别及对应的源代码,理解漏洞的SQL注入原理与防范方法。

【实训步骤】

步骤一、登录DVWA系统。在DVWASecurity当中选择medium选项,并

提交。然后选择SQLInjection。出现如下界面:

图3-27DVWA系统数据库注入medium界面图

在该界面中,只能选择UserID,因此需要通过BurpSuite或者firebug之类

工具绕过限制,在此使用FirefoxDeveloperEdition浏览器绕过这个限制。

步骤二、通过FirefoxDeveloperEdition重新登录DVWA系统,并将DVWA

Security等级设置为medium。

打开浏览器的openwebdevelopertools工具,如下图所示:

图3-28用FirefoxDeveloperEdition浏览器登录DVWA系统界面图

步骤三、在openwebdevelopertools中修改下拉菜单1中对应的value值为

1or1=1#,如图所示:

图3-29用FirefoxDeveloperEdition浏览器修改HTML页面

出现如下报错提示:

“YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondsto

yourMariaDBserverversionfortherightsyntaxtousenear\or1=1at

line1”

说明:WEB多了单引号,说明系统可能对做了转义,即单引号转换为\,或

者存在数字型注入。

步骤三、继续将value值修改为1or1=1进行测试,则暴出相应表的所有数

据,如下图所示:

图3-30DVWA系统被暴库图

步骤四、源代码分析。点击页面右下角的ViewSource按钮,则会看到如下

源代码,虽然程序采用mysql_real_escape_string()函数对输入中的,,,等做

了转义,但这些转义对数字型注入不起作用,因此可以轻易地进行SQL注入。

步骤五、数字型注入的防范。由于PHP是弱数据类型的语言,变量会根据

变量的值自动推导出数据类型。如输入1or1=1时,变量会根据值判断为字符串,

传递给程序,查询语句变成$getid=SELECTfirst_name,last_nameFROMusers

WHEREuser_id=1or1=1,暴出所有数据。因此可通过函数is_numeric()判断

输入是否为数字,如果是数字执行查询,否则不进行查询。找到

DVWA\vulnerabilities\sqli\source\medium.php源文件,对其进行修改如下:

?php

if(isset($_GET[Submit])){

$id=$_GET[id];

If(is_numeric($id)){

$getid=SELECTfirst_name,last_nameFROMusersWHEREuser_id=$id;

$result=mysql_query($getid)ordie(pre.mysql_error()./pre);

$num=mysql_numrows($result);

$i=0;

while($i$num){

$first=mysql_

显示全部
相似文档