某Easy 漏洞挖掘
CmsEasy 漏洞挖掘 写在前面 在index.php ,定义了一些常量,设置 文件包含的目录,和注册了自定义加载类。 lib目录中前两个文件夹分别存放的是后台和前台的控制器。 inc文件夹提供一些必要的支撑,数据库的操作,以及控制器的基类,模板渲染类。 所有的控制器都继承于 act 类。同时他还给所有数据库的表,设计了相对应的操作,位于table文件夹下,此文件夹下的类也都继承于 tab
CmsEasy 漏洞挖掘
写在前面
在index.php ,定义了一些常量,设置 文件包含的目录,和注册了自定义加载类。


lib目录中前两个文件夹分别存放的是后台和前台的控制器。
inc文件夹提供一些必要的支撑,数据库的操作,以及控制器的基类,模板渲染类。

所有的控制器都继承于 act 类。同时他还给所有数据库的表,设计了相对应的操作,位于table文件夹下,此文件夹下的类也都继承于 table类。
tool文件夹存放一些小工具,自定义函数,waf之类的,应用调度,也是在此文件夹处理。
继续跟进入口文件。

实例化了 front对象,并调用 dispatch 方法。
他的构造方法就是获取对应的参数,


同时对所有的请求进行转义和html实体的处理。

这里获取对应的控制器和操作。

这两个静态变量,在 dispatch 方法 中,用于实例化控制器,并调用方法。

前台sql注入
在 crossall_act.php 中存在 execsql_action 方法

他接受一个get请求的 sql参数,然后进行一个解码的操作

但此文件还同样提供了加密的函数,都不需要逆向他的算法,直接利用其加密sql语句。

我们可以利用此函数加密 sql语句,最后执行我们的sql语句


执行一个sql查询。


后台RCE
一
在language_admin.php 中,有add_action方法,这个方法用于给语言文件添加规则,

当id是1时,语言包是中文语言包,由于hackbar 没办法提交submit参数 ,我这里直接改成了 submi。

system_custom.php文件中有空数组,用他来进行尝试。

插入新定义的键值对,且文件名和插入内容都是可以控制的,由于对表单数据存在waf,被转义的和转成html实体,无法对原文件造成危险。
$content=str_replace(');',"\n".$replace.');',$content);
注意这句话,他插入键值对的逻辑就是讲文件中的 );替换为 换行符 加上
,再补上); 。
他的想法是没错的,但我觉得不应该,万一字符里有了 ); 呢。


把); 去掉,再插一条。

报错是好事情,说明里面可以做文章。由于 此php文件 是直接 return 一个数组的,没办法直接在数组外面写东西的,这些是语法问题。
php的数组比较随意的。

观察上面的错误,因为先前 拼接的 ); 导致中间逃出了一个单引号,剩下的就好办了,配合 , 和 /* 解决后面的问题。


成功拼接。

二
在update_admin.php 中存在 downfile_action 操作,存在可控url参数,

导致我们可以从任意服务器下载压缩文件,

并解压,压缩文件中可以写入 upgrade/upgrade.sql ,sql注入,对数据库信息造成破坏。

还可以写入木马文件。


成功写入。

@breakalc 我不是大佬呀,我比较笨,还不喜欢用扫描器,单单定位危险函数,感觉事倍功半。
这个方法我感觉更好一些。要审代码,就得一直看下去的。