cookies欺骗入侵和原理
大家好,我是初学者,在上一讲"经典漏洞('or'='or')再现和原理"中,我们利用程序员在编程时,逻辑上考虑不周,构造一些特殊的语句,绕过程序的验证,不需输入密码就可直接登录到后台,今天我要讲的是另一种同样的方法,就是通过伪造cookies,绕过程序的验证,也不需要输入密码,同样也可进入后台.
一:认识cookies
1:首先我们要了解什么是"cookies".cookies是保存在客户端计算机,也就是运行了浏览器的计算机中的一个小文本文件,它用于WEB站点在用户的计算机上保存信息并以后再取回它,这些信息通常采用"名-值"对应的方式存储.cookies是一个文本文件,可以进行修改,是存储在我们本地的计算机上的,它伴随用户请求的页面在WEB服务器与浏览器之间的传递,用户每次访问网站的时候,WEB应用程序都可以读取cookies包含的信息,使用cookies能够达到网站认识你的目的,从而避免用户在登录网站时重复多次输入信息(用户名,密码等),目前,在一些电子商务网站上普遍使用.
2:我们可以在查看自己的电脑上cookie文件,对于使用windows操作系统的IE浏览器的用户可以在自己电脑的C:\Documents and Settings\用户名\Cookies目录中找到,我们可以用IEcookieView工具来查看,一打开后就可以直接看到本地机子上所有的cookies文件,我们可以点击baidu.comm,在下面的框架中就出现一行的数值,再点BAIDUID这个文件,单击右键出现两个选项,一个是"properties,另外一个是"Edit the cookies's conten"我们可以用到这二个功能查看和修改cookie的值了,使用起来很低方便.通过上面的了解,我们对cookies有了初步的认识了吧,下面,我们就开始从代码分析来看欺骗的形成
二:验证代码的分析,首先,我还是和大家一起来简单学习下ASP脚本的知识吧,在ASP中内置的对象有Request和Response等,Request对象的功能是获取客户端提交的信息,而Response对象的功能则相反,它是用于服务器端的数据发送到客户端的浏览器上,Request对象分GET和POST两种方法获取提交的数据,它对应的集合分别为"QueryString"和"From",而在Response对象中用到最多的方法就是"Write"了,它直接向用户浏览器输出信息,为了大家理解,我用记事本简单编写了一个asp文件,代码如下:
<%
Response.Write"我是第一次编写ASP"
%>
把它保存为1.asp文件后,放到我们的IIS的主目录下,我们在浏览器地址栏里提交
http://127.0.0.1/1.asp,在返回的页面上,大家就可以看到"我是第一次编写ASP",还有一个方法是"redirect"它能够快速地将网页重新定位到一个新的地址上.有了以上的简单的知识,(其实,在上一讲中,我们也用到了这些知识)我们就可以去分析一些比较简单的验证代码了,下面,我先从最简单的一个cookies验证代码中去怎么发现漏洞所在和利用,我们用"JIMMY中文站留言簿 v1.08"这套系统中的后台登录验证页面"chkmanage.asp"(这有一技巧,查看验证文件一般以"chk"开头后面加上表名)
<%
if request.cookies("lunjilyb")("username")="" then
response.redirect "login.asp"
end if
(获取cookies中username的值,并判断其KEY值是否为空,为空的就转到"login.asp"页面)
if request.cookies("lunjilyb")("password")="" then
response.redirect "login.asp"
end if
(获取cookies中password的值,并判断其KEY值是否为空,为空的就转到"login.asp"页面)
if request.cookies("lunjilyb")("randomid")<>12 then
response.redirect "login.asp"
end if
(获取cookies中randomid的值,并判断其KEY值是否=12,若不等于12,就转到"login.asp"页面)
%>
从上面的分析中,我们可以看出逻辑上出了问题,程序判断从客户端获得的用户名和密码是否为空,如果有一个为空就转到"login.asp"页面,最后还判断用户的id是不是12,如果不是12也转到"login.asp"页面,我们就要用户名和密码不为空,且id=12就可发进行cookies欺骗登录了,有了这个思路,我们就可以构造如下语句:ASPSESSIONIDSQSRTSDC=DMJDAGLBOJNGBIGJPJAHIPOA; lunjilyb=randomid=12&password=jkh&username=jkh,就可不用知道后台管理员的用户名和密码,而直接进行登录了,
三:实践操作,原理讲了这么多,下面我们来实际操作下吧,我先在自己的机子上打开网站,进入后台登录页面,要求输入用户名和密码(这当然是肯定的哟)若不用输入用户名和密码进行登录,怎么操作呢?这儿我们要用到一款"桂林老兵cookies的欺骗工具"打开工具后,我们在address栏中输入后台管理员登录的页面地址:
http://127.0.0.1/JIMMY/admin-index.asp(不是后台登录的页面地址:/login.asp),然后点上面黄色小锁的按钮,这样我们就可把修改好的cookies复制到框里,再点右边的"连接"按钮,看,我们直接就进入了后台登录的页面.就这么简单,至于怎么拿网站的WEBSHELL就不在本课的范畴中了,
四:继续深入:"商贸通2006地方门户版系统"中后台登录验证
Chkadmin.asp文件中一段代码如下:
.......省略
if password=rs("SMT_password") and nick=rs("SMT_nick") then
判断用户提交的password和nick是否和查询所得的SMT_password,SMT_nick相同,完全相同的
Response.Cookies("adminID")=rs("SMT_id")
Response.Cookies("admin")=rs("SMT_nick")
Response.Cookies("adminflag")=rs("SMT_flag")
就把管理员的SMT_id,SMT_nick,SMT_flag的相应字段值以cookie的形式存储在客户端中,
response.redirect "manage.asp"
只要用户提交的cookie值和管理员的SMT_id,SMT_nick,SMT_flag这三个字段的值一致就转到"manage.asp"页面.
...........省略以下
我们现在整理下思路,代码的意思是:首先程序判断我们提交的密码和用户名是否和数据库中保存中的密码和用户名字段值相同,若相同,就把管理员的SMT_id,SMT_nick,SMT_flag的相应字段值以cookie的形式存储在客户端中,其次只要用户提交的cookies值和管理员的SMT_id,SMT_nick,SMT_flag这三个字段的值一致就转到"manage.asp"页面.而没有判断SMT_password字段的值,好了,思路清楚后,我们就可以进行入侵了,我们先把管理员SMT_id,SMT_nick,SMT_flag这三个字段的值找出来,打开系统的数据库,找到管理员的表,再打开后发现SMT_id字段对应的值是"5",SMT_nick字段对应值是"admin"SMT_flag字段对应值是"1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"这样我们就把cookies值改为:adminID=5;admin=admin;adminflag=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;
现在就以
http://www.fstcb.com/这个网站为例吧,我们打开"桂林老兵cookies的欺骗工具"在address栏中输入管理员登录的页面地址:
http://www.fstcb.com/admin/manage.asp,然后点上面黄色小锁的按钮,我们把修改好的cookies:adminID=5;admin=admin;adminflag=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;
复制到框里,再点右边的"连接"按钮,看,我们直接就进入了后台登录的页面.
最后说下,目前"桃源网盘""飞天论坛"F-BLOG"Cnmai二手信息发布""心情网络投票"良精商城网店"等网站系统都一定程度上存在cookies验证上的漏洞,这就看大家自己去挖掘了.