L003001015HTTP攻击与防范SQL注入攻击05脚本PHP的SQL注入防护.docx

上传人:b****6 文档编号:4687188 上传时间:2022-12-07 格式:DOCX 页数:14 大小:775.11KB
下载 相关 举报
L003001015HTTP攻击与防范SQL注入攻击05脚本PHP的SQL注入防护.docx_第1页
第1页 / 共14页
L003001015HTTP攻击与防范SQL注入攻击05脚本PHP的SQL注入防护.docx_第2页
第2页 / 共14页
L003001015HTTP攻击与防范SQL注入攻击05脚本PHP的SQL注入防护.docx_第3页
第3页 / 共14页
L003001015HTTP攻击与防范SQL注入攻击05脚本PHP的SQL注入防护.docx_第4页
第4页 / 共14页
L003001015HTTP攻击与防范SQL注入攻击05脚本PHP的SQL注入防护.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

L003001015HTTP攻击与防范SQL注入攻击05脚本PHP的SQL注入防护.docx

《L003001015HTTP攻击与防范SQL注入攻击05脚本PHP的SQL注入防护.docx》由会员分享,可在线阅读,更多相关《L003001015HTTP攻击与防范SQL注入攻击05脚本PHP的SQL注入防护.docx(14页珍藏版)》请在冰豆网上搜索。

L003001015HTTP攻击与防范SQL注入攻击05脚本PHP的SQL注入防护.docx

L003001015HTTP攻击与防范SQL注入攻击05脚本PHP的SQL注入防护

课程编写

类别

内容

实验课题名称

HTTP攻击与防范-SQL注入攻击-05脚本PHP的SQL注入防护

实验目的与要求

1、了解如何防护SQL注入

2、了解对PHP代码如何修改进行SQL注入防护

实验环境

VPC1(虚拟PC)

操作系统类型:

windows,网络接口:

本地连接

VPC1连接要求

PC网络接口,本地连接与实验网络直连

软件描述

1、学生机要求安装java环境

2、vpc安装windows

实验环境描述

1、学生机与实验室网络直连;

2、VPC1与实验室网络直连;

3、学生机与VPC1物理链路连通;

预备知识

SQL注入被那些菜鸟级别的所谓黑客高手玩出了滋味,发现现在大部分黑客入侵都是基于SQL注入实现的.

  现在我开始说如果编写通用的SQL防注入程序一般的http请求不外乎get 和 post.

  所以只要我们在文件中过滤所有post或者get请求中的参数信息中非法字符即可,

所以我们实现http 请求信息过滤就可以判断是是否受到SQL注入攻击。

当传递数据后,PHP解析器会分析数据的信息,

  然后根据"&",分出各个数组内的数据所以get的拦截如下:

 首先我们定义请求中不能包含如下字符,并进行替换保存到一个phpsqlinj.php文件中,代码如下:

php

functionphp_sava($str)

{

   $farr=array(

       "/s/",                       

       "/<(/?

)(script|i?

frame|style|html|body|title|link|meta|?

|%)([^>]*?

)>/isU", 

       "/(<[^>]*)on[a-zA-Z]s*=([^>]*>)/isU",   

  );

  $tarr=array(

       "",

       "<\1\2\3>",          //如果要直接清除不安全的标签,这里可以留空

       "\1\2",

  );

$str=preg_replace($farr,$tarr,$str);

  return$str;

}

//phpsql防注入代码

classsqlin

{

//dowith_sql($value)

functiondowith_sql($str)

{

  $str=str_replace("and","",$str);

  $str=str_replace("execute","",$str);

  $str=str_replace("update","",$str);

  $str=str_replace("count","",$str);

  $str=str_replace("chr","",$str);

  $str=str_replace("mid","",$str);

  $str=str_replace("master","",$str);

  $str=str_replace("truncate","",$str);

  $str=str_replace("char","",$str);

  $str=str_replace("declare","",$str);

  $str=str_replace("select","",$str);

  $str=str_replace("create","",$str);

  $str=str_replace("delete","",$str);

  $str=str_replace("insert","",$str);

  $str=str_replace("'","",$str);

  $str=str_replace("","",$str);

  $str=str_replace("or","",$str);

  $str=str_replace("=","",$str);

  $str=str_replace("","",$str);

  //echo$str;

  return$str;

}

//aticle()防SQL注入函数//php教程

functionsqlin()

{

  foreach($_GETas$key=>$value)

  {

      $_GET[$key]=$this->dowith_sql($value);

  }

  foreach($_POSTas$key=>$value)

  {

      $_POST[$key]=$this->dowith_sql($value);

  }

}

}

$dbsql=newsqlin();

?

>

然后在获取form表单内容页面,例如login.php中加入一行代码

include('phpsqlinj.php');

即可.

好了大功告成,我们已经实现了get和post请求的信息拦截,你只需要在conn.asp之类的打开数据库文件之前引用这个页面即可。

放心的继续开发你的程序,不用再考虑是否还会受到SQL注入攻击。

实验内容

1、  掌握SQL注入基本手段

2、  了解WEB站点的脆弱性

3、  修复存在SQL注入可能的漏洞

实验步骤

●实验操作

1、学生单击实验拓扑按钮,进入实验场景,(第一次启动目标主机,还需要安装java控件)。

2、学生输入账号Administrator,密码123456,登录到实验场景中的目标主机。

如图所示:

3、打开IE浏览器,输入http:

//127.0.0.1:

8080,即可登录如图所示页面:

4、假设我们知道用户名为:

aaaaaa,密码:

111111。

我们输入正确的用户名和密码如图所示:

 

 

5、漏洞尝试:

在对一个网站进行安全检测的时候,检测者并不知道被检测的网站使用的是什么数据库及网页程序语言,需要对其进行一些手动探测。

譬如本案例中,检测者在“用户”框输入一个单引号,密码留空,点击“登录”,会返回如图所示:

6、结果分析:

从返回信息“Warning:

mysql_fetch_row()expectsparameter1toberesource,booleangiveninC:

\xampp\htdocs\test\login.phponline24”可以得知系统使用了PHP+MYSQL的架构,以及路径信息等。

而且很有可能存在含注入漏洞的SQL语句,如SELECT*FROMuser_loginWHEREu_id=’’’。

7、在登陆界面中,选择IE浏览器的查看源文件,读取html源码,如图所示:

8、. 通过分析html源码,可以知道提交的username、password字段及post提交方式,及login.php的处理页面,后台的SQL语句确定是:

SELECT*FROMuser_loginWHEREu_id=’$username’

9、所以,当我们输入用户名为单引号时,形成了

SELECT*FROMuser_loginWHEREu_id=’’’

这样以来,最后的那个单引号就多余了,造成了语法错误。

综上所述,我们现在可以确定注入成功的条件了,登陆时username输入框输入如下内容即可,甚至不需要输入密码:

aaaaaa'or'1=1

 

【注释】

aaaaaa’ or1=1/*构建了SELECT*FROM`user_login`WHERE`u_id`='aaaaaa'

or'1=1'AND`passwd`=''语句,直接通过1=1的恒等条件,让验证通过。

 

10、进入c:

\xampp\htdocs文件夹

 

11、使用Ultraedit打开c:

\xampp\htdocs\login.php文件。

 

12、去掉//include(‘phpsqlinj.php’); 行 //

 

13、输入:

8080/index.html,并输入用户名:

aaaaaa’or‘1=1,密码:

111111

点击登陆进行验证.

 

14、验证发现 u_id=aaaaaa11 并出错,说明sql防注入成功。

 

15、实验完毕,关闭虚拟机和所有窗口。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1