简析60度CMS的Cookies欺骗漏洞
前言
本篇文章只是为了和大家分享漏洞的挖掘经验和思路,同时让大家认识到 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 了。
- 如何理解云计算?很简单,就像吃货想吃披萨了……
- .NET 2.0 中使用Active Directory 应用程序模式 (ADAM)
- struts2: 通过流输出实现exce导出
- Google的数据交换协议:GData (Google Data APIs Protocol)
- C# 内部类
- 四字母.com域名均以五位数结拍
- mybatis 3.2.7 与 spring mvc 3.x、logback整合
- spring 3.2.x + struts2 + mybatis 3.x + logback 整合配置
- struts2使用Convention Plugin在weblogic上以war包部署时,找不到Action的解决办法
- 使用xfce4桌面系统
- 号外!号外!Python纳入高考内容了!人工智能时代就要来临了!
- 高颜值!域名5h.net和jb.cc纷纷易主
- 认识ASP.NET 5项目结构和项目文件xproj
- weblogic下部署应用时slf4j与logbak冲突的解决办法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法