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节已经给大家列举了两个表,没事的时候多看看那两个表,对你绝对是有好处的。

posted @ 2012-11-16 20:07  山貓  阅读(1141)  评论(0编辑  收藏  举报