菜鸟代码审计-microcms

microCMS

开源cms:https://gitee.com/fancanjie/microCMS
GitHub地址:https://github.com/973432436/microCMS.git

废话

最近打算做点代码审计的活,目标都是从开源中国上下载回来的开源cms。不管能否挖到洞,都把个人都挖掘经历记录下来,当作成长笔记。但由于自己太菜了,可能很多都未能挖到洞,就只能记录一下敏感点,希望以后有能力了再来打组合拳。

cms结构与亮点

这个cms如同其“micro”的名称一样,整个cms只有一个PHP文件,而且都是经过压缩处理的(但问题不大)。按照官方要求,先把index.released.php改成index.php,同时通过.htaccess控制路由。特点是单文件(数据库连接配置等都写入index.php内),结构轻量化。

错误日志生成路径问题-低

默认设置打开了’log_errors’,同时日志文件生成路径为网站目录下的’error.log’。
设置了.htaccess对敏感文件进行访问限制,但作用仅限于apache环境,如果搭建环境为nginx这样的不支持.htaccess语法的,能直接访问到error.log,能看到网站绝对路径。如果日志为空,可以手动制造错误以查看报错信息。贴部分日志图,后面跟着的是绝对路径信息:

密码机制-低

密码保存都是使用简单到纯md5加密保存,能通过第三方解密平台解密。(但我也注入不了。。。)
但登陆时使用了两种比较方式,解压后大概在L158:

所以如果拿到数据库hash后的密文,可以直接用hash进行登陆,无需解密。同时在PHP5的版本中,如果密文hash刚好以0e开头的话,可以弱比较绕过(几率极低)

数据库备份还原机制-中

在后台的数据还原功能里,并没有对传入的sql文件进行../过滤,可传入../../mysqli.sql可重装数据库。

演示:
使用备份功能:
先创建一份最新的备份

由于在.htaccess里做了路由,所以表面看着参数都是发往html文件的,问题不大。可能是我的非apache环境问题。

由于我运行的环境不是apache,所以这个路径有点变化,但可以利用。

通过该方法可以达到类似“重新安装”的效果,所有配置都还原至最初的样子,如admin/123456,但后期新增但数据不会被删除,如admin_log表的数据。

而且在还原备份时,服务端会返回完整的插入记录,可以看到.sql的内容。

利用此特性,我们传入非.sql文件,通过报错返回部分文件内容(但未具体测试返回多长的数据),可惜不能返回完整的index.php,其在大概L1600的位置保存着数据库的连接信息。

关于复现

由于一开始是在mac环境下搭建的,但cms声明了要使用apache环境。
所以掏出了Windows+phpstudy的组合,但直接跑不起来,问题很大。
然后打算放到服务器上跑,试了两台都有各种bug,一开始是由于PHP文件有混淆,出现了500错误。使用了美化后的PHP文件,又在解析上出了问题。由于.htaccess隐藏了php后缀,但不知道为什么,不添加php后缀在服务器上无法调用PHP进行解析,导致网页就像txt一样。

发表评论

电子邮件地址不会被公开。 必填项已用*标注