cookie注入

  SQL注入作为一种很流行的攻击方式被越来越多的人所知晓,很多网站都对SQL注入做了防护,用常规的手段去探测网站的SQL注入漏洞时会被防注入程序阻挡,一般的防注入程序都是基于“黑名单”的,根据特征字符串去过滤掉一些危险的字符。一般情况下,黑名单是不安全的,它存在被绕过的风险。比如有的防 注入程序只过滤了通过GET、POST方式提交的数据,对通过Cookie方式提交的数据却并没有过滤。

  cookie注入其原理也和平时的注入一样,只不过说我们是将提交的参数已cookie方式提交了,而一般的注入我们是使用get或者post方式提交,get方式提交就是直接在网址后面加上需要注入的语句,post则是通过表单方式,get和post的不同之处就在于一个我们可以通过IE地址栏处看到我们提交的参数,而另外一个却不能。相对post和get方式注入来说,cookie注入就要稍微繁琐一些了,要进行cookie注入,我们首先就要修改cookie,这里就需要使用到Javascript语言了。
  
  cookie注入的形成有两个必须条件:

 条件1是:程序对get和post方式提交的数据进行了过滤,但未对cookie提交的数据库进行过滤。

 条件2是:在条件1的基础上还需要程序对提交数据获取方式是直接request("xxx")的方式,未指明使用request对象的具体方法进行获取,也就是说用request这个方法的时候获取的参数可以是是在URL后面的参数也可以是cookie里面的参数这里没有做筛选,之后的原理就像我们的sql注入一样了。

    document.cookie:表示当前浏览器中的cookie变量

  alert():表示弹出一个对话框,在该对话框中单击“确定”按钮确认信息。

  escape():该函数用于对字符串进行编码。
  cookie注入的原理在于更改本地的cookie,从而利用cookie来提交非法语句。从本质上来讲,Cookie注入与传统的SQL注入并无不同,两者都是针对数据库的注入,只是表现形式上略有不同罢了。

Cookie注入典型步骤

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

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

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

  1. 清空浏览器地址栏,输入“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.使用常规注入语句进行注入即可。

例如:
在参数值后面加一单引号,然后提交,发现提示拦截。这时可以确定该网站添加了防注入程序,对SQL注入中经常用到的字符做了过滤

输入and 1=1 and 1=2会同样拦截

可见是使用了防注入系统的,但我们是使用get方式提交的参数,那现在我们将“id=6”这个参数使用cookie提交看看程序对数据接收是否直接使用 request("xx")的方式?

更改成cookie方式提交,我们首先要访问正常的页面,等页面完全打开之后,清空地址栏然后写上:javascript:alert(document.cookie="id="+escape("6")); 这里的“id=”便是“?id=6”中的“id=”,“escape("6")”中的“6”是“?id=6”中的“id=6”了,这两处要根据实际情况来定义。

输入javascript:alert(document.cookie="id="+escape("6"));之后可以发现弹窗或正常显示,当把?id=6去掉后回车还是可以正常显示,这就说明程序在使用request对象获取数据的时候并未指明具体使用什么方法来获取,而是直接使用request("xx")的方式。现在cookie形成的一个重要因素已经明确了,然后看看能否提交特殊字符,看程序是否对数据进行过滤。

在地址栏输入javascript:alert(document.cookie="id="+escape("6 and 1=1"));再回到xx.php刷新发现页面正常,然后javascript:alert(document.cookie="id="+escape("6 and 1=2"));,再回到xx.php刷新发现页面不正常。后面就是常规步骤了~

sqlmap操作:
sqlmap.py -u "http://xxxx/show.php" --cookie "id=6" --tables --level 2

posted @ 2020-11-16 18:48  M1n0s博客  阅读(275)  评论(0编辑  收藏  举报