0-综合实践项目5 WEB安全攻防技术实践

时间:2019-05-14 18:58:29下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《0-综合实践项目5 WEB安全攻防技术实践》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《0-综合实践项目5 WEB安全攻防技术实践》。

第一篇:0-综合实践项目5 WEB安全攻防技术实践

PINGDINGSHAN UNIVERSITY

课程项目报告

题 目: WEB安全攻防技术实践

院(系): 计算机学院(软件学院)专业年级: 软件工程

2014级 姓 名: 第六组

组长:(江浩)学 号:

141530153 指导教师: 杨照峰

副教授

2016年10月16日

WEB安全攻防技术实践

摘 要

在当今社会,信息技术的快速发展,使得以计算机、通信等技术变得日益更新,发展非常快,从而影响了政治经济和生活登各方各面领域的飞速发展,然而,网络是把双刃剑,在给人们生活带来便利的同时,网络的安全问题也日益突出和重要。所以,网络是把双刃剑,在给人们带来便利的同时也给人们带来了危险,危险的例子也屡见不鲜,所以我们应该了解网络安全中面临的危险。我们把文档分为四部分:

第一部分,我们在实验中平台中的网页进行攻击,在攻击过程中,检测出可利用的漏洞,进行攻击。

第二部分,我们在选择实验室平台中的网站进行SQL注入,分别实现手工注入和手工注入,记录全部攻击操作过程,记录攻击结果及现象,形成详细的攻击分析报告。

第三部分,我们进行讨论分析,阐明XSS跨站脚本攻击和SQL注入攻击的原理、表现特征、防御策略方案。

关键词:WEB攻击,SQL注入,网络安全 绪论

计算机和信息技术的飞速发展,网络的日益普及,深刻地改变着人们的生活方式、生产方式与管理方式,加快了国家现代化和社会文化的发展。21世纪的竞争是经济全球化和信息化的竞争,“谁掌握信息,谁就掌握了世界”,信息安全不仅关系到公民个人,企业团体的日常生活,更是影响国家安全,社会稳定的至关重要的因素之一。

今年来,我国网络安全事件发生的比例呈上升趋势,调查结果显示绝大多数网民的主机曾经感冒病毒,超过一半的网民经历过账号/个人信息被盗窃、被篡改,部分网民曾被仿冒网站欺骗。在经济利益的驱使下,制造、贩卖病毒木马、进行网络盗窃或诈骗、教授网络攻击技术等形式的网络犯罪活动明显增多,造成了巨大的经济损失和安全威胁,严重影响了我国互联网事业的健康发展。WEB攻击

进入实验虚拟机,打开XMAPP(开始-所有程序-XAMPP-XAMPP Control Panel),开启Apache HTTP服务和MYSQL服务,如下图2-1所示:

图 2-1开启服务

打开dvwa网站,http://localhost/dvwa,进入如下界面,点击Create/Reset Database,创建数据模块。如图2-2所示:

图 2-2打开dvwa 网站 打开存在漏洞的网站,http://localhost/dvwa/vulnerabilities/xss_r/登陆账号:admin 登陆密码:password。安全等级设置为:low。登陆后重新将上述的url地址复制到浏览器的地址栏 进入如下图2-3所示:

图2-3 存在反射型XSS漏洞页面

选择DVWA Security的安全级别,此处选择“low”如图2-4所示:

图2-4 DVWA Security安全级别 查看正常输入输出:在输入框中输入test,点击Submit,可以看到页面上的正常返回结果。说明这个页面的功能是将用户输入的信息直接发送给用户。如图2-5所示:

图2-5 页面正常输入效果

查看PHP源码:点击右下角的View Source,可以看到页面的PHP源码。从源码中可以看出,页面直接将用户输入的信息返回给用户。如图2-6所示:

图 2-6 页面PHP源码 进行攻击测试:在输入框中输入,可以看到非正常返回结果页面。同时在IP地址中可以看到输入内容的URL编码。由此说明,Web应用将未经验证的数据通过请求发送给客户端。如图2-

7、2-8所示:

图 5 页面攻击效果

图 2-8 被攻击页面此时的IP 验证此类漏洞的非持久性:重新访问该页面,点击刷新或再次点击右边XSS reflected,可以看见页面恢复正常,由此说明之前输入的信息未保存,是非持久性跨站脚本漏洞如图2-9所示:

图 2-9 重新访问后恢复正常的页面 存储型XSS攻击:

打开存在漏洞的网站http://localhost/dvwa/vulnerabilities/xss_s/,如图2-10所示:

图 2-10 存在存储型XSS漏洞的页面

查看正常输入输出:在Name的输入框中输入test,在Message的输入框中输入This is a test comment.点击Sign Guestbook按钮,可以得到正常的返回结果。说明该网页的功能是用来用户发表署名和评论的如图2-11所示:

图 2-11 正常输入效果 查看PHP源码:点击右下角的View Source,可以看到页面的PHP源码。从源码中可以看出,页面允许用户存储未正确过滤的信息,显示的时候从数据库中读取。如图2-12所示:

图 2-12 页面PHP源码

进行攻击测试:在Name输入框中输入Test,在Message输入框中输入,点击Sign Guestbook,再次访问页面就可以得到弹出的对话框结果如图2-13所示。

图 11 被攻击的页面

验证漏洞的存储性:重新访问该页面,点击刷新或再次点击右边XSS stored,可以看到页面仍弹出之前的对话框。说明之前输入的信息被保存。SQL注入

3.1 SQL手工注入

打开虚拟机,输入用户名和密码,用户为:Adminsitrator。密码为:123456如图3-1所示:

图 3-1 打开浏览器,输入http://localhost:8080/example_code/ 如图3-2所示:

图 3-2 找到“(5)SQl注入攻击(SQL injection,俗称负料隐码)”项,并点击打开。如图3-

3、3-4所示:

图 3-3

图 3-4 攻击实例:绕过账号、密码的检查

先来看看上图,这是一个常见的形式简单的会员登录的画面。会员登录的功能是让来访者输入账号和密码来登录网站,入口网页的程序代码会判断来访者输入的账号和密码是否存在于数据库中。如果输入的数据存在于数据库中,就让这个来访者登录网站,否则就提示信息要求来访者必须先注册。如图3-5所示:

图 3-5 上图的网页是一个简单的会员登录的画面login.php,请试着执行它。login.php文件会读取ch数据库中的member数据表内的记录,如果使用者所输入的账号和密码存在于member数据表内,就会打开首页ex5-1.php。源码为http://localhost:8080/example_code/source/code5/login.php

所谓SQL注入攻击,就是在客户端的网页中输入特定的与SQL语句有关的代码。这段特定的程序代码会改变SQL语句,也就是login.php文件中有一段代码:

$query = “select * from member where username=”'.$_POST[“username”].“' and password='”.$_POST[“password”].“'”;这个SQL语句用来把在“账号”和“密码”文本框的输入值,与select语句连接成一个查询语句。

假如在上图的“账号”文本框中输入“daniel”,在“密码”文本框中输入“123456”,那么这个SQL语句会是:

select * from member where usemame='daniel' and password='123456' 使用mysql_query函数提交这个SQL语句后,如果“daniel“与“123456”的账号/密码值存在于ch数据库中的member数据表内,那么mysql_query函数会返回一个结果集:

$result=mysql_query($query);

如果“daniel”与“123456”的账号/密码值不存在于ch数据库中的member数据表内,那么mysql_query函数会返回FALSE。

如果能够让SQL语句:$query=”select * from member where username=“'.$_POST[”username“].”' and password='“.$_POST[”password“].”'“;不检查$_POST[”username“]与$_POST[”password“]的值,那么就可以绕开会员登录的数据检查而随意录入数据。

在类似这种检查“账号”与“密码”值的入口网页,许多黑客利用暴力破解的方式来尝试账号/密码,或是设法取得他人的cookie来得获得目标的账号/密码。如果使用SQL注入攻击的话,根本就不需要账号/密码就可以直接进入网站。

现在打开“攻击1”,进行输入,“账号”文本框中输入“'OR”='”,“密码”文本框中输入“'OR“='”。

“'OR”='”字符串是由下列字符所组成的: ●

一个单引号: ●

一个空白; ● OR:

一个空白: ●

两个单引号; ● =;●

一个单引号。输入情况下图所示。

上图为输入SQL注入攻击的字符串结果如下图所示,无效的账号/密码值也可以用来登录网站。

无效的账号/密码也可以登录现在回头看看login.php文件中所用的SQL语句:

$query = “select * from member where username=”'.$_POST[“username”].“' and password='”.$_POST[“password”] , “'”;在“账号”文本框中输入“'OR“='”,在“密码”文本框中输入“'OR”='”,那么这个SQL语句会是:

select * from member where username='' OR ''='' and password='' OR ''='' 在where子句中,username=''(两个单引号)表示username等于空字符串““”,”=“表示空字符串“''”等于空字符串“''”,所以结果为TRUE,usemame='' OR ''=''的结果为TRUE,因为''=''为TRUE,所以'' OR TRUE的结果为TRUE。同样地,password=''(两个单引号)表示password等于空字符串“''”,''=''表示空字符串''等于空字符串'',所以结果为TRUE,password='' OR ''=''的结果为TRUE,因为''=''为TRUE,所以 '' OR TRUE的结果为TRUE。

所以login.php文件的SQL语句:

select * from member where username='' OR ''='' and password='' OR ''='' 等同于:

select * from member where TRUE and TRUE 因此这个SQL语句不会验证账号和密码文本框所输入的值,而是直接查询member数据表内的所有记录。

攻击1的防护方法是:字符串变量的过滤方式(使用addslashes函数)。使用addslashes函数来将SQL语句中的单引号、双引号、“”及NULL字符加上反斜线“”。

例如:addslashes(”O'reilly“)会变成:”O'reilly“ 注意,如果在php.ini文件中将magic_quotes_gpc设置为On,那么在GET、POST和COOKIE的数据上会自动执行addslashes函数。如果再调用一次addslashes函数,就会变成加了两次反斜线“”而产生错误。

点击“防护1”,进行输入,“账号”文本框中输入“'OR”='”,“密码”文本框中输入“'OR“='”,网页不会提交。

攻击2实例:删除数据库的所有记录

现在来看下图,这是一个常见的简单形式的留言板。下图的网页是ex5-2.php,执行这个页面,ex5-2.php文件会将留言的数据插入MySQL数据库ch5里面的postmessage数据表中。

执行ex5-2-check.php文件,浏览ch数据库的postmessage数据表内的记录。ex5-2-check.php文件的页面如图所示。在如下图所示的“标题”文本框中,单击第一条超链接。这时会打开ex5-2-show.php文件来显示这一条留言,在ex5-2-show.php文件中有一个“删除”按钮,单击这个【删除】按钮后就会删除目前显示的这一条留言,如下图示。

请注意在ex5-2-show.php的一段这样的程序代码,有一个“删除”按钮的程序代码:

“删除’’按钮的name与id属性值是delete。

在删除目前这一条留言的时候,我们使用postmessage数据表内的id字段来标识。$query = ”delete from postmessage where id=“.$_POST[”id“];$_POST[”id“]的值是由id这个隐藏文本框:“ />而来的。

而id隐藏文本框的值,则是从ex5-2-show.php的URL参数id而来。攻击1的防护方法是:字符串变量的过滤方式(使用addslashes函数)。打开“攻击2”,点击超链接按钮进行攻击,删除所有记录,如下图。

同样攻击2的防护也可以使用addslashes函数来将SQL语句中的单引号、双引号、“”及NULL字符加上反斜线“”。例如:打开“防护3”,点击按钮超链接进行防护。

攻击3实例:盗取密码

现在来看下图,这是一个简单的首页的画面。下图的网页是ex5-3.php,请试着执行它。ex5-3.php文件会读取ch5数据库中的member数据表内的记录,然后在“访客:”文字处显示member数据表的username文本框的值。上图是一个简单的首页的画面

ex5-3.php文件需要URL参数id,这个id值是member数据表内的id文本框的值。在“访客:”文字处显示的username值,就是URL参数id所对应的username文本框的值。

这段在ex5-3.php中的程序代码http://localhost:8080/example_code/source/code5/ex5-3.php。如何攻击在ex5-3.php文件中,查询所用的SQL语句是:$query=”select username from member where id=“.$_GET[”id“];黑客利用在$_GET[”id“]变量内加入union select表达式的方式来达到盗取会员密码的目的。

union select表达式用来实现多重查询的功能,在$_GET[”id“]变量内加入union select就会让ex5-3.php文件的SQL语句变成有两个select查询语句。

第1个select查询语句是ex5-3.php原本的: select username from member 第2个select查询语句是黑客加入的: select password from member 这个select查询语句用来盗取别人的密码。

黑客必须让第1个select查询语句失效,而让第2个select查询语句成功,那么这个SQL语句就会返回password,而不是username的值。由于ex5-3.php预期SQL语句会返回username,所以在“访客:”文字处显示了这个SQL语句的查询结果。

但是实际上这个SQL语句返回的是password,所以原本要显示账号的地方就会显示密码的值。因此黑客就可以借着这种SQL注入攻击,来盗取网站会员的密码。

开始攻击这个攻击的程序代码在ex5-3-attack.html文件中:

http://localhost:8080/example_code/source/code5/ex5-3-attack.html。

ex5-3-attack.html文件实际上是执行一个HTTP链接:

http://localhost/example/ex5-3.php?id=”union select password from member where usemame='daniel'/* ex5-3.php文件的URL参数id的值等于:

“union select password from member where username='daniel'/* 开头是两个单引号“''”。

将URL参数id的值代入SQL语句:

$query = ”select username from member where id=“.$_GET[”id“];结果得到:

select username from member where id=”union

select password from member where username='daniel' /* 第1个select查询语句是ex5-3.php原本的:

select username from member 但是无法执行。

第2个select查询语句是黑客加入的:

select password from member where username='daniel' 因此,这个SQL语句会返回password,而不是username的值。打开“攻击3”,攻击ex5-3.php文件,如下图所示。

单击【攻击ex5-3.php文件】按钮后,就会执行ex5-3.php文件,使用SQL注入攻击来盗取密码,结果如下图所示。在上图的“访客:”文字处,原本是要显示账号:访客: 但是,因为SQL注入攻击的缘故却显示了密码,黑客就因此盗取了网站会员的密码。

防范的方法:

SQL注入攻击(SQL Injection)之所以会发生,是由于SQL语句被篡改的缘故。因此防御的方法,就是检查SQL语句中的变量数据是否是正确的格式。

(1)如果数据确定是整数,就使用intval函数来将数据转换成整数。例如,id值通常是由MySQL数据库产生的整数类型的数字,因此使用intval函数来将id值转换成整数,以避免id值被窜改。

(2)如果数据确定是浮点数,就使用floatval或doubleval函数来将数据转换成浮点数。floatval与doubleval函数的功能与语法相同。

(3)如果数据确定是字符串,就使用addslashes函数来将单引号、双引号、“”、及NULL字符加上反斜线“”。

3.2 SQL工具注入

学生输入账号administrator,密码123456,登录到实验场景中的目标主机。如图所示: 打开IE浏览器,登录www.xiexiebang.com网站。如图所示:

打开文件夹中的明小子4.0压缩包,点击明小子4.0文件进入后,双击domain4.0.exe。如图所示:

双击domian4.0.exe

点击关闭

在当前路径中输入http://www.xiexiebang.com,并点击连接。如图所示:

注意 注入点区域,您可以发现SQL注入点。右键“注入点”中的红色网址。

点击检测注入,进入如图所示页面,点击开始检测。

点击“猜解表名”

获得数据库admin,选中admin,点击猜解列名。

勾选上username、password、id并点击开始检测,等待几分钟,在编号中会出现username、password、id的信息。如图所示:

点击“管理入口扫描”选项,再点击“检测后台地址”按钮,出现如图所示页面:

右键点击http://www.xiexiebang.com/logout.asp网址,点击“用IE打开连接”。如图所示:

输入获取的username和password即可进入到http://www.xiexiebang.com的管理页面。如图所示:

使用admin账户登陆以后我们具有了管理权限,可对该网站进行操作。如图所示:

17、实验结束,请关闭虚拟机 总结

XXS跨站脚本攻击原理:XSS 属于被动式的攻击。攻击者先构造一个跨站页面,利用script、