随着网络安全技术的发展,SQL注入作为一种很流行的攻击方式被越来越多的人所知晓。很多网站也都对SQL注入做了防护,许多网站管理员的做法就是添加一个防注入程序。这时我们用常规的手段去探测网站的SQL注入漏洞时会被防注入程序阻挡,遇到这种情况我们该怎么办?难道就没有办法了吗?答案是否定的。

我 们知道,一般的防注入程序都是基于“黑名单”的,根据特征字符串去过滤掉一些危险的字符。一般情况下,黑名单是不安全的,它存在被绕过的风险。比如有的防 注入程序只过滤了通过GET、POST方式提交的数据,对通过Cookie方式提交的数据却并没有过滤,这时我们该怎么办?在本文你将会找到答案。

Cookie注入原理

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

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

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

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

图1

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 and 1=1"));”

“javascript:alert(document.cookie="id="+escape("xx and 1=2"));”。

和常规SQL注入一样,如果分别返回正常和不正常页面,则说明该应用存在注入漏洞,并可以进行cookie注入。

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

Cookie注入攻击实例

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

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

图2

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

图3

通过URL我们了解到这是一个ASP的动态页面,现在我们用常规的手段去探测一下该网站是否存在SQL注入漏洞。关于SQL注入漏 洞的介绍和利用可以参考这篇文章(http://www.rising.com.cn/newsletter/news/2012-05-24 /11580.html),这里不再赘述。我们先在参数值后面加一单引号,然后提交,发现提示“请不要在参数中包含非法字符尝试注入”,并记录了我们的 IP地址。这时可以确定该网站添加了防注入程序,对SQL注入中经常用到的字符做了过滤,如图4所示:

图4

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

                  图5

图6

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

1.我们把上面URL(http://knowsec.3322.org/onews.asp?Id=33)问号后面的参数去掉,然后访问该页面,提示数据库出错,如图7所示。

图7

2.现在我们清空浏览器地址栏,输入“javascript:alert(document.cookie="id="+escape("33"));”,按Enter键提交,会弹出一个对话框,如图8所示。

图8

3.现在我们再来访问这个URL(http://knowsec.3322.org/onews.asp),发现可以正常访问了,如图9所示。

图9

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

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

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

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

图12

我 们以URL(http://knowsec.3322.org/onews.asp?id=33)来演示该工具的用法。先切换到COOKIE注入项,在 “注入键名”处输入“id=”,在“注入URL地址”和“来源页”处都输入“http://knowsec.3322.org/onews.asp”, “正常的Cookie值”处不用修改,将“POST提交值”jmdcw=后面的值修改为33。如下图13所示:

上面我们以攻击者的视角通过一个实际案例讲述了Cookie注入攻击,但我们的目的不是为了去攻击别人,而且为了更好的防御。俗话说“知己知彼,百战不殆”,只有理解了攻击者是如何攻击的,我们才能更有效地防御。

现在我们对上面案例中用到的网站程序进行加固,来详细谈下如何化解Cookie注入攻击,先来看下出现漏洞页面的代码,如图16所示。

通过上面的代码我们可以得知,服务器端在获取到参数id的值后没有做任何处理,直接带入SQL语句中执行查询,这样就产生了一个SQL注入漏洞。

但由于该程序加了防注入程序,对通过GET、POST方式提交的数据进行了过滤,具体来看下代码,如图17、图18和图19:

                      图17

图19

通过分析上面的代码,我们确定了Cookie注入产生的原因。网站程序是通过request("id")方式获取客户端提交的数据,并且在防注入程序中没有对通过request.cookies方式提交的数据进行过滤。

现 在我们找到了问题的根源,那么如何来修复这一漏洞呢?有两种解决办法:一、在获取客户端提交的数据时指明数据提交方式,可以采用 Request.QueryString("id")方式来获取通过GET方式提交的数据。二、修改防注入程序,增加对 Request.Cookies("id")数据提交方式的过滤。

这里我们采用第一种方法对网站代码进行修改,其实很简单,只需要修改一句代码即可。修改后的代码是这样,具体看下图20:

图20

将修改后的代码上传到网站服务器上,替换掉旧的文件。现在我们再来看下还能否利用Cookie注入,如图21。

cookie中转注入实战的更多相关文章

  1. cookie中转注入

    用这个源码搭建网站找注入点http://192.168.226.129/shownews.asp?id=235 判断注入点,在后面加上'http://192.168.226.129/shownews. ...

  2. asp中cookie欺骗/注入原理与防范

     一直以来sql注入被广泛关注,也有专门的防注系统代码.发现,如果代码不严谨也会有cookie欺骗/注入的情况.原来, 防注入系统没有注意到 Cookies 的问题!这里以ASP为例,分析一下cook ...

  3. 【SpringBoot】SpringBoot热部署和配置文件自动注入实战

    ========================3.SpringBoot热部署devtool和配置文件自动注入实战 ============================ 1.SpringBoot2 ...

  4. 手工注入——MySQL手工注入实战和分析

    今天进行了MySQL手工注入实战,分享一下自己的实战过程和总结,这里环境使用的是墨者学院的在线靶场.话不多说,咱们直接开始. 第一步,判断注入点 通过 ' 和构造 and 1=1 和 and 1=2 ...

  5. Cookie注入实战(非SQL注入)

    cookie注入原理其实很简单,就是利用了session机制中的特性,只能说是特性,不能算是漏洞. 这里简单的说下原理,session的机制就相当于你有一张蛋糕店的会员卡,这张会员卡就是你浏览器中的c ...

  6. [红日安全]Web安全Day1 - SQL注入实战攻防

    本文由红日安全成员: Aixic 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名 ...

  7. cookie手工注入

    1.先访问当前注入点文件名 2.修改cookie javascript:alert(document.cookie="id="+escape("1137")); ...

  8. Cookie SQL注入

    转自http://blog.sina.com.cn/s/blog_6b347b2a0101379o.html cookie注入其原理也和平时的注入一样,只不过说我们是将提交的参数已cookie方式提交 ...

  9. 记一次SQL注入实战

    刚发现漏洞时,我就已经成功实现了注入,因为怕发到网上后被玩坏,一直没有发布.今天去看了看,原网页已经无法访问了,现在发出来应该就没有什么大问题了. 本文仅供学习交流,目的是为了构建更加安全的网络环境! ...

随机推荐

  1. 友盟分享--集成QQ和微信

    随着社交工具的应用范围越来越广,分享一些内容的功能也开始要求实现了. 用得比较多的第三方,比如说友盟,比如说Share等等... 前几天刚用友盟写了集成QQ和微信客户端的功能,觉得有必要分享一下. 在 ...

  2. 8个WEB前端创意HTML5动画应用精选

    和十几年前相比,现在的网页加入了很多动画元素,从之前的Flash到现在的HTML5,动画样式越来越丰富,动画制作也越来越便捷.本文精选了几款非常富有创意的HTML5动画应用,欣赏一下吧. 1.HTML ...

  3. Java web的读取Excel简单Demo

    目录结构: Data.xls数据:   后台页面: GetExcelData.java       public void doGet(HttpServletRequest request, Http ...

  4. curl raise 信号出core

    在使用c++多线程使用libcurl抓取网页时,遇到程序随机core掉的情况,gdb 一下出错信息有这么一条:longjmp causes uninitialized stack frame. 在网上 ...

  5. UINavigationController的popViewControllerAnimated问题

    UINavigationController是IOS编程中的一个view controller的容器,通过栈管理viewControllers,每一次push操作都将在栈顶添加一个view contr ...

  6. Cadence OrCad Allegro SPB 16.6 下载及安装破解指南

    Cadence公司的电子设计自动化产品涵盖了电子设计的整个流程,包括系统级设计,功能验证,IC综合及布局布线,模拟.混合信号及射频IC设计,全定制集成电路设计,IC物理验证,PCB设计和硬件仿真建模等 ...

  7. js设计模式(3)---桥接模式

    0.前言 看设计模式比较痛苦,一则是自己经验尚浅,不能体会到使用这些设计模式的益处:二则是不能很好把握使用这些设计模式的时机.所以这一部分看得断断续续,拖拖拉拉,为了了却这快心病,决定最近一口气看完几 ...

  8. C#操作Excel基本操作

    /// using Microsoft.Office.Core; using Microsoft.Office.Interop.Excel; using System.IO; using System ...

  9. win8系统下保存出现闪退的解决方案

    不知道有没有人和我一样用的是win8系统,同时还遇到保存QQ截图保存闪退.保存sublime文件闪推.系统自带截图保存闪退.....更可恶的是我用chrome中百度搜索“win8保存东西闪退”结果浏览 ...

  10. jeecms获取栏目标题图

    [@cms_channel id='1'] <img src="${tag_bean.titleImg!site.typeImg}" /> [/@cms_channel ...