php replacebadchar,简析60度CMS的Cookies欺骗漏洞

本文详细介绍了60度CMS中存在的Cookies欺骗漏洞,通过分析源代码揭示了登录验证过程中的缺陷,允许攻击者通过伪造Cookies实现未授权访问。作者分享了漏洞挖掘的经验,强调了防范此类漏洞的重要性,并提出使用Session代替Cookies以提高安全性。
摘要由CSDN通过智能技术生成

前言

本篇文章只是为了和大家分享漏洞的挖掘经验和思路,同时让大家认识到 Cookies 欺骗漏洞的危害和严重性。

漏洞发现时间:2017.8.16,因产商无回应,漏洞至今仍未修复

环境搭建

工具

搭建

安装好小旋风ASP服务器后,把60度CMS的所有文件复制到小旋风ASP服务器的site8001目录下,然后访问http://localhost:8001即可。

c8ec688174b2faf5e8b42a9defdd2934.png

源码分析

我们先看一下后台登录页面(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文件

60609bbece0ab8a40bf9b1e57e6e3ec3.png

找到并打开看看

发现这是检查用户登录状态的文件,源代码如下

'判断用户是否登陆

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("")

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无法添加

790cd33854c9b9ad7b14da85d167e73b.png

16738322b367b813bd50c92fb017892e.png

接着访问后台首页(index.asp),发现已经绕过验证,成功访问了后台主页,实现了Cookies欺骗。

3dfa8311879c2b157464b6471e9104a9.png

挖掘经验

挖掘Cookies欺骗漏洞时,可以查看登录页面和主页面的源代码,找到有关验证用户身份的源代码,查看是否存在欺骗的可能。

总结

现在大家应该都已经了解,Cookies欺骗漏洞的危害非常大,所以Cookies欺骗漏洞是一定要防范的。

既然 Cookies 是不安全的,而我们又必须把用户登录信息存储下来,那么应该存储在什么地方呢? 我们注意到,在 ASP 中,除了 Cookies 外,还有 Session 可以储存信息。Session 是储存在服务器上的,不是客户端随随便便就能够更改的,所以具有极高的安全性。这样,大家就可以把所有 Cookies 的代码均换作 Session 了。

*本文作者:J1anCan,转载请注明来自 FreeBuf.COM

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值