影响范围
良精商城网店购物系统 1.13
漏洞类型
逻辑设计缺陷
利用条件
影响范围应用
漏洞概述
经测试与分析,发现良精商城网店购物系统的oa管理系统模块登陆功能底层sql语句执行存在设计缺陷,导致使用admin用户名+任意密码即可登录。
漏洞分析
ljcmsshop_v1.13\\\\oa.php
第一次访问时页面加载处理逻辑:获得c(Public)、a(login)参数,之后定义三个php文件路径信息,在L24判断该处理类是否存在,如果存在则再L27~33行包含进指定的三个php文件,之后拼接一个method——>action_login,之后判断该方法是否存在,且参数a的第一个字符不为”_”,如果存在则调用该方法:
此处调用的方法为:Public类下的action_login方法:
ljcmsshop_v1.13\\\\source\\\\control\\\\oa\\\\Public.php
之后这里转向了$this->cptpl . \\’login.tpl\\’,此处的this->cptpl为“tpl/oa/”,这一点在文件:ljcmsshop_v1.13\\\\source\\\\control\\\\oabase.php中有说明:
ljcmsshop_v1.13\\\\tpl\\\\oa\\\\login.tpl
之后转向tpl/oa/login.tpl中,在这里是一个登陆处理表单逻辑,具体代码如下:
最后会将以上填写的信息,提交到oa页面,同时赋予a(check_login)和c(Public)不同的参数值:
之后再次转向oa.php文件,再次回到之前的逻辑,最后在L34调用public类的action_check_login函数:
ljcmsshop_v1.13\\\\source\\\\control\\\\oa\\\\Public.php action_check_login函数逻辑设计:首先检测验证码是否为空,如果不为空则进行检查,魏国则跳过,之后检测账号是否为空,如果不为空则检测密码是否为空,之后如果账号名为”admin”则直接赋予” $_SESSION[\\’ADMIN_AUTH_KEY\\’] = true;”,之后的if(false)条件语句直接跳过,之后进入到else中,之后定义map存储当前登陆用户的信息,之后调用check_login函数进行检查:
ljcmsshop_v1.13\\\\source\\\\model\\\\oa\\\\model.login.php check_login函数处理逻辑设计:
在这里会首先获取map数组中的信息,之后通过拼接进SQL语句中执行,但是需要注意的是这里的sql语句中使用了一个OR导致后面对于密码的检测失效,不管后面的密码是否正确都会返回信息,这一点在Mysql中进行了验证,不管密码为什么都会成功完成查询到用户的信息数据:
之后进入后面的if判断语句中,在这里由于sql语句执行的结果不为空,使得最后直接进入else语句中,之后将数据库中的信息报错到session中
最后重定向到oa.php中,重新赋予c、a数值,之后在L15调用importPlugin导入配置信息: ljcmsshop_v1.13\\\\source\\\\core\\\\ljphp.php
之后再加载各种配置信息~
漏洞复现
访问一下URL,之后输入admin/sjdkgljsdkgjdkg:
http://192.168.174.160/oa.php?c=Public&a=login
成功登陆:
之后退出,并使用admin/s@#@#SDGSDGDS:成功登陆
安全建议
修改后台SQL执行语句~
原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34238.html