Web攻防系列教程之Cookie注入攻防实战

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Web攻防系列教程之Cookie注入攻防实战

摘要

随着网络安全技术的发展,SQL注入作为一种很流行的攻击方式被越来越多的人所知晓。很多网站也都对SQL注入做了防护,许多网站管理员的做法就是添加一个防注入程序。这时我们用常规的手段去探测网站的SQL注入漏洞时会被防注入程序阻挡。遇到这种情况我们该怎么办?难道就没有办法了吗?答案是否定的。我们知道,一般的防注入程序都是基于“黑名单”的,根据特征字符串去过滤掉一些危险的字符。一般情况下我们认为黑名单是不安全的,它存在被绕过的风险。比如有的防注入程序只过滤了通过GET、POST方式提交的数据,对通过Cookie方式提交的数据却并没有过滤,这时我们该怎么办?在本文你将会找到答案。

Cookie背景介绍

Cookie最先是由Netscape(网景)公司提出的,Netscape官方文档中对Cookie的定义是这样的:Cookie是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。

Cookie的用途

Cookie的用途非常广泛,在网络中经常可以见到Cookie的身影。它通常被用来辨别用户身份、进行session跟踪,最典型的应用就是保存用户的帐号和密码用来自动登录网站和电子商务网站中的“购物车”。

Cookie注入原理

Cookie注入简单来说就是利用Cookie而发起的注入攻击。从本质上来讲,Cookie注入与传统的SQL注入并无不同,两者都是针对数据库的注入。只是表现形式上略有不同罢了。

要想深入了解Cookie注入的成因,必须要了解ASP脚本中的request对象。它被用来获取客户端提交的数据。先来看下ASP开发文档中对request对象的描述:

图一

Request对象的使用方法一般是这样:request.[集合名称](参数名称),比如获取从表单中提

交的数据时可以这样写:request.form("参数名称"),但ASP中规定也可以省略集合名称,直接用这样的方式获取数据:request("参数名称"),当使用这样的方式获取数据时,ASP规定是按QueryString、Form、Cookies、ServerVariables的顺序来获取数据的。这样当我们使用request("参数名称")方式获取客户端提交的数据,并且没有对使用request.cookies("参数名称")方式提交的数据进行过滤时,Cookie注入就产生了。

Cookie注入典型步骤

上面我们介绍了Cookie注入的相关知识,下面我们来看如何确定一个网站是否存在Cookie 注入。

1.寻找形如“.asp?id=xx”类的带参数的URL。

2.去掉“id=xx”查看页面显示是否正常。如果不正常,说明参数在数据传递中是直接起作用的。

3.清空浏览器地址栏,输入“javascript:alert(document.cookie="id="+escape("xx"));”,按Enter键后弹出一个对话框,内容是“id=xx”,然后用原来的URL刷新页面,如果显示正常,说明应用是用Request("id")这种方式获取数据的。

4.重复上面的步骤,将常规SQL注入中的判断语句带入上面的URL:

“javascript:alert(document.cookie="id="+escape("xx and1=1"));”、

“javascript:alert(document.cookie="id="+escape("xx and1=2"));”。和常规SQL注入一样,如果分别返回正常和不正常页面,则说明该应用存在注入漏洞,并可以进行cookie 注入。

5.使用常规注入语句进行注入即可。

Cookie注入攻击案例

通过上面的介绍,相信读者对Cookie注入的原理和一般的注入流程都有了一定的了解。那么下面我们就通过一个实际案例来讲解一下Cookie注入攻击。

我们的目标是这个站:,这是我为了演示Cookie注入攻击而搭建的一个网站。先来看一下网站页面,如图二所示:

图二

我们随便查看一条新闻,如图三所示:

图三

通过URL我们了解到这是一个ASP的动态页面,现在我们用常规的手段去探测一下该网站是否存在SQL注入漏洞。关于SQL注入漏洞的介绍和利用可以参考这篇文章

(/newsletter/news/2012-05-24/11580.html),这里不作介绍。我们先在参数值后面加一单引号,然后提交,发现提示“请不要在参数中包含非法字符尝试注入”,并记录了我们的IP地址。这时可以确定该网站添加了防注入程序,对SQL注入中经常用到的字符做了过滤。如图四所示:

图四

接着我们再用经典的and1=1和and1=2试下,发现都被过滤掉,具体如下图:

图五

图六

看来我们检测SQL注入漏洞的常规手段不能绕过防注入程序。那我们还有其他办法吗?答案是有。我们用下面的方法来试下。

1.我们把上面URL(http://knowsec.332

/onews.asp?Id=33)问号后面的参数去掉,然后访问该页面,提示数据库出错。

图七

2.现在我们清空浏览器地址栏,输入

“javascript:alert(document.cookie="id="+escape("33"));”,按Enter键提交。会弹出一个对话框,

图八

3.现在我们再来访问这个URL(/onews.asp),发现可以正常访问了。

图九

4.根据上面返回的结果来分析,该网站是通过类似owen=request("id")的方式来获取浏览器提交的参数值的。

5.依此类推,我们可以把and1=1和and1=2带入上面的语句中去判断是否有SQL注入漏洞。

图十

图十一

6.现在我们已经可以确定该网站存在注入漏洞,并且可以通过Cookie进行注入。

由于手工进行Cookie注入比较繁琐,效率比较低。在理解了Cookie注入的原理以后,我们可以用工具来提高效率。首先我们需要用Cookie注入中转工具来生成一个中转页面。先来看下这个小工具的界面和使用方法。

相关文档
最新文档