cookie是当前识别用户,实现持久会话的最好的方式,有时也叫cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。cookie最初是由网景公司开发的,现在所有的浏览器都支持。
“Cookie”是小量信息,由网络服务器发送出来以存储在网络浏览器上,从而下次这位独一无二的访客又回到该网络服务器时,可从该浏览器读回此信息。这是很有用的,让浏览器记住这位访客的特定信息,如上次访问的位置、花费的时间或用户首选项(如样式表)。Cookie 是个存储在浏览器目录的文本文件,当浏览器运行时,存储在 RAM 中。一旦你从该网站或网络服务器退出,Cookie 也可存储在计算机的硬驱上。当访客结束其浏览器对话时,即终止的所有 Cookie。
会话cookie是一种临时cookie,它记录了用户访问站点时的设置和偏好。用户退出浏览器时,会话cookie就被删除了。
持久cookie的生存时间更长一点,他们存储在硬盘上,浏览器退出,计算机重启时他们依然存在。通常会用持久cookie维护某个用户会周期性访问的站点的配置文件或登录名。
唯一的区别就是它们的过期时间。
cookie就像服务器给用户帖的“嗨,我叫xxx”的贴纸一样。用户访问一个web站点时,这个web站点就可以读取服务器贴在用户身上的所有贴纸。
用户首次访问web站点时,web服务器对用户一无所知。web服务器希望这个用户会再次回来,所以想给这个用户贴上一个独有的cookie,这样以后它就可以识别出这个用户了。cookie中包含了一键值对形式的列表,并通过Set cookie
或Set cookis2
HTTP响应(扩展)首部将其帖到用户身上去。
cookie中可以包含任意信息,但他们通常只包含一个服务器为了进行跟踪而产生的独特的识别码。
一般浏览器向服务器发起请求都是通过GET
或POST
来传入参数的,但是也有通过cookie
传入的,要判断是否存在cookie注入,首先就要判断参数是不是通过cookie来传入的。
通过下面一个实例来说明:
访问http://120.203.13.75:8001/shownews.asp?id=171
,可以看到参数id
,
去掉参数id
,再次访问,发现页面不能正常访问
这时候我们在浏览器地址栏中输入下面的代码,来设置cookie,其内容为id=171
javascript:alert(document.cookie="id="+escape("171"));
成功弹窗,说明上面的代码被成功执行,这时候再来访问http://120.203.13.75:8001/shownews.asp
,发现页面又可以成功访问了
通过上述过程,我们就可以确定参数是通过cookie
传入的
由于edge没有cookie编辑插件,所以我们在chrome中测试是否存在注入?
测试是否存在注入,payload:id=171+order+by+10
,页面返回正常,
通过以上测试就可以得出结论:该站点存在cookie注入。
cookie注入一般见于asp
或aspx
搭建的网站,这是因为在asp
或aspx
语言中,获取参数是有不同的语言表达形式,比如:
GET
型获取参数:Request.QueryString['id']
POST
型获取参数:Request.Form['id']
还可以以Request['id']
的表达形式来获取参数,这时候获取参数的顺序是QueryString
、Form
、Cookies
、ServerVariables
。
所以说如果使用了Request['id']
的形式,就有可能存在cookie注入。
(1)程序对get和post方式提交的数据进行了过滤,但未对cookie提交的数据库进行过滤。
(2)在条件1的基础上,还需要程序对提交数据获取方式是直接request(“xxx”)的方式,未指明使用request对象的具体方法进行获取。
猜测是否存在admin
表
id=171+union+select+1,username,password,4,5,6,7,8,9,10+from+admin