cookie注入

0x00 什么是cookie?

cookie是当前识别用户,实现持久会话的最好的方式,有时也叫cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。cookie最初是由网景公司开发的,现在所有的浏览器都支持。

“Cookie”是小量信息,由网络服务器发送出来以存储在网络浏览器上,从而下次这位独一无二的访客又回到该网络服务器时,可从该浏览器读回此信息。这是很有用的,让浏览器记住这位访客的特定信息,如上次访问的位置、花费的时间或用户首选项(如样式表)。Cookie 是个存储在浏览器目录的文本文件,当浏览器运行时,存储在 RAM 中。一旦你从该网站或网络服务器退出,Cookie 也可存储在计算机的硬驱上。当访客结束其浏览器对话时,即终止的所有 Cookie。

0x01 cookie的类型

(1)会话cookie

会话cookie是一种临时cookie,它记录了用户访问站点时的设置和偏好。用户退出浏览器时,会话cookie就被删除了。

(2)持久cookie

持久cookie的生存时间更长一点,他们存储在硬盘上,浏览器退出,计算机重启时他们依然存在。通常会用持久cookie维护某个用户会周期性访问的站点的配置文件或登录名。

(3)会话cookie和持久cookie的区别

唯一的区别就是它们的过期时间。

0x02 cookie是如何工作的?

cookie就像服务器给用户帖的“嗨,我叫xxx”的贴纸一样。用户访问一个web站点时,这个web站点就可以读取服务器贴在用户身上的所有贴纸。

用户首次访问web站点时,web服务器对用户一无所知。web服务器希望这个用户会再次回来,所以想给这个用户贴上一个独有的cookie,这样以后它就可以识别出这个用户了。cookie中包含了一键值对形式的列表,并通过Set cookieSet cookis2HTTP响应(扩展)首部将其帖到用户身上去。

cookie中可以包含任意信息,但他们通常只包含一个服务器为了进行跟踪而产生的独特的识别码。

0x03 如何判断是否存在cookie注入?

(1)判断参数是否通过cookie传递?

一般浏览器向服务器发起请求都是通过GETPOST来传入参数的,但是也有通过cookie传入的,要判断是否存在cookie注入,首先就要判断参数是不是通过cookie来传入的。

通过下面一个实例来说明:

访问http://120.203.13.75:8001/shownews.asp?id=171,可以看到参数id
cookie注入_第1张图片
去掉参数id,再次访问,发现页面不能正常访问
cookie注入_第2张图片

这时候我们在浏览器地址栏中输入下面的代码,来设置cookie,其内容为id=171

javascript:alert(document.cookie="id="+escape("171"));

cookie注入_第3张图片

成功弹窗,说明上面的代码被成功执行,这时候再来访问http://120.203.13.75:8001/shownews.asp,发现页面又可以成功访问了
cookie注入_第4张图片

通过上述过程,我们就可以确定参数是通过cookie传入的

(2)判断在cookie处是否存在注入?

由于edge没有cookie编辑插件,所以我们在chrome中测试是否存在注入?
cookie注入_第5张图片

再次访问,页面显示正常
cookie注入_第6张图片

测试是否存在注入,payload:id=171+order+by+10,页面返回正常,
cookie注入_第7张图片

通过以上测试就可以得出结论:该站点存在cookie注入。

0x04 cookie注入漏洞产生原因

cookie注入一般见于aspaspx搭建的网站,这是因为在aspaspx语言中,获取参数是有不同的语言表达形式,比如:

GET型获取参数:Request.QueryString['id']

POST型获取参数:Request.Form['id']

还可以以Request['id']的表达形式来获取参数,这时候获取参数的顺序是QueryStringFormCookiesServerVariables

所以说如果使用了Request['id']的形式,就有可能存在cookie注入。

0x05 cookie注入的利用条件

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

(2)在条件1的基础上,还需要程序对提交数据获取方式是直接request(“xxx”)的方式,未指明使用request对象的具体方法进行获取。

0x06 简单示例

猜测是否存在admin

id=171+union+select+1,username,password,4,5,6,7,8,9,10+from+admin

cookie注入_第8张图片

发现页面返回了admin表中,usernamepassword字段的值:adminb9a2a2b5dffb918c
cookie注入_第9张图片

得到管理员用户名和密码
cookie注入_第10张图片

登录后台,admin/welcome
cookie注入_第11张图片

成功拿到flag
cookie注入_第12张图片

你可能感兴趣的:(web安全,sql注入)