一,Cookie的来源和作用
Cookie最先是由Netscape(网景)公司提出的,Netscape官方文档中对Cookie的定义是这样的:Cookie是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。就是某些网站为了辨别网站用户身份而进行对session追踪结果的记录,浏览器不同Cookie存储的位置也不尽相同。而Cookie的作用则很大,例如某些浏览器需要记录用户名及密码或者自动登录某个网站,还有一个典型的例子就是电商网站的购物车记录。
二,Cookie注入攻击
1,Cookie注入攻击的来由:
由于SQL注入攻击的愈演愈烈,越来越多的网站管理员加入了防注入程序来抵挡SQL注入攻击,这样我们用常规的手段去进行SQL注入攻击时,就不太可能会成功。但是由于防注入程序是基于黑名单的,根据特征字符串过滤某些字符。然而某些防注入程序就仅仅只是验证了GET POST方法提交的数据,对于Cookie的提交却是没有过滤,于是便产生了Cookie注入。
ASP脚本语言中的REQUEST对象通常被用来获取客户端提交的数据。REQUEST对象的使用方法为Request[集合名称](“参数名称”),例如从Cookie中获取信息时就是Request.cookie(”参数名称“)。而且ASP默认可以没有参数名称,而默认的结果就是ASP获取数据的顺序就是QueryString,Form,Cookie,ServerVariables。所以当我们不填写集合名称时,并没有对我们提交的Cookie数据进行过滤,便产生了Cookie注入。
2,一般步骤:
在URL里寻找有没有诸如?id=xx的样子,找到后删去id=xx看看页面是否如前,如果不一样则说明参数传递是有直接作用的,这时我们在浏览器地址栏中输入javascript:alert(document.cookie="id="+escape("xx"));按回车会出现一个对话框,显示id=xx,然后用原来的URL刷新页面,如果显示正常,说明应用是用Request("id")这种方式获取数据的。重复上面的步骤,将常规SQL注入中的判断语句分别带入上面的URL:“javascript:alert(document.cookie="id="+escape("xx
and 1=1")); javascript:alert(document.cookie="id="+escape("xx and 1=2")); 和常规SQL注入一样,如果分别返回正常和不正常页面,则说明该应用存在注入漏洞,并可以进行cookie注入。然后使用常规注入语句进行注入。
三,Cookie注入攻击的防御措施:
由上述的产生原因可知,解决方法大致有已下两种:(1)在获取客户端提交的数据时指明数据提交方式,可以采用Request.QueryString("id")方式来获取通过GET方式提交的数据。(2)修改防注入程序,增加对Request.Cookies("id")数据提交方式的过滤。