前言
本篇文章只是為了和大家分享漏洞的挖掘經驗和思路,同時讓大家認識到 cookies 欺騙漏洞的危害和嚴重性。
漏洞發現時間:2017.8.16,因產商無回應,漏洞至今仍未修復
環境搭建
工具
小旋風ASP服務器
http://www.jb51.net/softs/35167.html#download
60度CMS
http://down.chinaz.com/soft/23548.htm
搭建
安裝好小旋風ASP服務器後,把60度CMS的所有文件復制到小旋風ASP服務器的site8001目錄下,然後訪問 http://localhost:8001 即可。
源碼分析
我們先看一下後臺登錄頁面(login.asp)的源代碼
action=replace(trim(request("Action")),"'","''") if action="logout" then session("cmsid") = "" session("cmsname") = "" response.Cookies("cmsname") = "" response.Cookies("cmsid") = ""
得知登錄頁面的兩個Cookies值分別為cmsname和cmsid
接著往下看
if code <> session("code") then showmsg "驗證碼錯誤!","login.asp" end if set rs = conn.execute("select * from 60du_Admin where AdminName = '"&ReplaceBadChar(username)&"' and Password = '"&md5(password,32)&"'") if rs.eof then showmsg "用戶名或密碼錯誤!","login.asp" elseif rs("IsActive")=1 then showmsg "你的用戶名已被鎖定,你不能登陸!請聯系管理員。","login.asp" else session("cmsid") = rs("id") session("cmsname") = rs("AdminName") response.Cookies("cmsname") = rs("AdminName") response.Cookies("cmsid") = rs("id") ip=Request.ServerVariables("REMOTE_ADDR") Call conn.execute("update 60du_Admin set LoginTime='"&Now()&"',LoginIP='"&ip&"' where AdminName='"&username&"'",0) Call InsertLog(1, 0, UserName, ip, "登錄成功", ComeUrl, "") showmsg 0,"index.asp"
可以看到,網頁會把輸入的管理員帳號和管理員ID分別賦值給cmsname和cmsid這兩個cookies值
如果密碼正確就會跳轉到後臺首頁
並添加上述的兩個cookies值
這時我們再來看一下後臺首頁(index.asp)的源代碼
發現頭部引用了check.asp文件
找到並打開看看
發現這是檢查用戶登錄狀態的文件,源代碼如下
<!--#include file="../inc/md5.asp"--><% '判斷用戶是否登陸 if session("cmsname")="" and instr(CStr(Request.ServerVariables("SCRIPT_NAME")),site_install&AdminPath&"/login.asp")=0 then if ReplaceBadChar(Trim(request.Cookies("cmsname")))="" then response.Redirect(site_install&AdminPath&"/login.asp") elseif Session("admin_id") =null then Response.Write("<script>alert('登陸超時!');parent.location = '"&site_install&AdminPath&"/login.asp';</script>") else ReplaceBadChar(Trim(session("cmsname")))=ReplaceBadChar(Trim(request.Cookies("cmsname"))) ReplaceBadChar(Trim(session("cmsid")))=ReplaceBadChar(Trim(request.Cookies("cmsid"))) end if end if %>
可以看到,網頁雖然有驗證用戶登錄狀態,但只僅僅驗證了Cookies的內容
只要兩個Cookies的內容都對得上,就能訪問後臺首頁
於是,造成了一個典型的Cookies欺騙漏洞
60度CMS的默認管理員為admin,默認管理員ID為1
所以只要根據這兩個信息創建Cookies,我們就可以通過偽造Cookies來實現越權訪問後臺
漏洞利用
訪問後臺登錄頁面
使用firebug添加兩個Cookies及其內容
分別是:cmsname=admin;cmsid=1
註意這裏的日期一定要修改(比如說修改為2018年),否則Cookies無法添加
接著訪問後臺首頁(index.asp),發現已經繞過驗證,成功訪問了後臺主頁,實現了Cookies欺騙。
挖掘經驗
挖掘Cookies欺騙漏洞時,可以查看登錄頁面和主頁面的源代碼,找到有關驗證用戶身份的源代碼,查看是否存在欺騙的可能。
總結
現在大家應該都已經了解,Cookies欺騙漏洞的危害非常大,所以Cookies欺騙漏洞是一定要防範的。
既然 Cookies 是不安全的,而我們又必須把用戶登錄信息存儲下來,那麽應該存儲在什麽地方呢? 我們註意到,在 ASP 中,除了 Cookies 外,還有 Session 可以儲存信息。Session 是儲存在服務器上的,不是客戶端隨隨便便就能夠更改的,所以具有極高的安全性。這樣,大家就可以把所有 Cookies 的代碼均換作 Session 了。
參考文章: Cookies 欺騙漏洞的防範方法(vbs+js 實現)
*本文作者:J1anCan,轉載請註明來自 FreeBuf.COM
Tags: quot 漏洞 Cookies session cmsname 039
文章來源: