cookies欺骗漏洞代码详细分析
在前面已经为大家演示了如何利用工具进行cookie欺骗,然后进入后台。
现在我们从程序的角度上来学习如何挖掘代码中存在的cookie欺骗漏洞。还是以第二章中的那个心情网络投票系统来举例。
我们先来看看在心情网络投票系统中系统是如何得到cookie的,它的程序其实就上上一节中采用cookie验证的那个例子,代码这里不在列举出来了,可以参考上面的。
在上面的代码中,有样的两行代码:
response.cookies("admin")=rs("admin")
response.cookies("pass")=rs("pass")
当登陆用户的名称及密码正确,程序就会在该用户的cookies中增加admin和pass这两项。他们就是系统给登陆用户赋予的cookie值,采用cookie当然是为了方便我们以后登陆。那么在以后的登陆过程中它是怎么验证的我们的cookies值,实现验证的过程在check.asp文件中,代码如下所示:
<%if request.cookies("admin")="" or request.cookies("qx")="" then
response.write "<script>alert('你还未登陆,请登陆!');</script>"
response.write "<script>location.href='index.asp';</script>"
response.end
end if%>
仔细看第一行代码:request.cookies("admin")="" or request.cookies("qx")=""。它的意思是如果request.cookies("admin")中的值和request.cookies("qx")中的值同时为空的话,那么就弹出一个对话框显示“你还未登陆,请登陆”并返回到index.asp页面去。这行代码存在很大的逻辑问题,如果我们request.cookies("admin")的值不为空呢;或者request.cookies("qx")的值不为空呢;或者他们两个的值都不为空呢,那么不就不会输出错误了吗?也就成功的进入了后台了。
所以我们只需要在验证的时候使request.cookies("admin")和request.cookies("qx")中的值不同时空,要使他们不为空,我们用桂林老兵修改一下他们的cookie值就可以了,至于他们的值为多少就无所谓,重要的是要保证他们不为空就可以了,那么这样就可以成功的进入后台。
其实,分析cookie欺骗的代码很简单。之所以会出现这样的漏洞是因为他们在逻辑上考虑不严格而导致的。例如下面的代码也是典型:
if request.cookies("username")="" then
//判断cookie中的username是否为空
response.redirect "login.asp"
//为空就转向login.asp
end if
if request.cookies("password")="" then
//判断cookie中的password是否为空
response.redirect "login.asp"
//为空就转向login.asp
end if
if request.cookies("randomid")<>4790 then
//判断cookie中的randomid(验证码)是否为4790
response.redirect "login.asp"
//不等于就转向login.asp
end if
程序判断从客户端获得的用户名和密码是否为空,如果有一个为空,就转向login.asp,最后还判断验证码是不是4790,如果不是也转向login.asp去所以要对它进行cookie也很简单,只需要使用户名和密码不为空且验证码为4790就可以达到欺骗的目的了。
所以要分析程序中存在的cookie欺骗漏洞,逻辑思维比较重要,同时逻辑运算符一定要学好,至于逻辑运算符在7.1节已经给大家列举了两个表,没事的时候多看看那两个表,对你绝对是有好处的。