这段时间一直在恶补php的基础知识,为后续代码审计做准备。今天决定先小试牛刀一下,在星球大牛的建议下,准备拿beescms练练手,顺便写了这篇文章记录一下。
先简单了解一下这套cms
BEES企业网站管理系统是一个基于PHP+Mysql架构的企业网站管理系统。BEES采用模块化方式开发,功能强大灵活易于扩展,并且完全开放源代码,多种语言分站,为企业网站建设和外贸提供解决方案,我们见到的很多中小型站点仍在使用这套cms。
废话少说,掏出我的phpstorm直接开审。
后台文件上传getshell
既然要审代码那肯定先找能getshell的洞,这种我一般比较喜欢文件上传类。
代码审计找文件上传的点 一般找下面这些点
$_FILES, type="file", 上传 ,move_upload_file()等
找到fun.php
发现上传函数只对文件类型进行了限制
我们可以看到这块对于上传文件是有两处过滤点的,第一处就是文件大小,第二处是文件类型,当然第一个无所谓,我们追踪文件类型。
全局搜索up_img。
找到admin/upload.php。
这里限制了文件类型,也就是说我们满足规定的文件类型就能实现绕过。
抓包上传文件。
成功解析
虽然现在绕过了,但是是后台文件上传,不太好利用,继续审计看能不能再扩大危害。
前台登录处sql注入getshell
将目光转到登陆处
按照平常黑盒测试的经验 随手在用户名admin后面加个单引号
感觉有戏 转到白盒看代码
/admin/login
先追踪fl_html和fl_value函数
fl_value函数将我们传入的user参数使用正则表达式将一些常见的sql注入敏感字符替换为空
fl_html是将传入的参数进行html实体编码
绕过fl_value函数只需要对字符进行双写进行绕过
fl_html对单引号转换有要求 默认情况只对双引号进行编码
再追踪到check_login函数
直接将参数传入数据库进行查询 这里由于前面过滤不严格可以绕过导致sql注入
成功注入
但是我们的最终目的是getshell 尝试写文件
这里看到htmlspecialchars函数对马子进行了转义 尝试转将马子编码绕过
先考虑的的是hex编码,但是编码后还是不能写入,再尝试写绝对路径,折腾
了很久还是以失败告终,表哥们可以自己本地复现一下。
变量覆盖导致的用户登录绕过
既然此路不通,那就再换一条路。继续看后台登陆的代码,
先看到admin.php,发现在文件头包含了init.php,跟踪到init.php。
可以看到,是用is_login函数进行检查。
找到is_login函数。
这个判断登录的逻辑是只要判断_SESSION['login_in']==1并且_SESSION['admin']有值,然后$_SESSION['login_time']大于3600,就判断为已经登录。
执行payload
然后再访问/admin/admin.php,成功登录后台。
这个漏洞结合后台文件上传就可以构成一个危害比较大的任意getshell。
ps:这套cms还是存在不少的漏洞,对于我这样的新手来说,已经完全够练手用的,整套审计下来也比较轻松。还是希望自己再努力努力,早日审计出自己的0day。最后祝师傅们新年快乐!!!
原文始发于微信公众号(LK安全):新手php代码审计之beescms
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论