Web安全与防护 实训指南 3.4SQL注入过滤的绕过与防范.pdf
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_