易思ESPCMS(P8.21012001稳定版)代码审计

php代码审计

厂商官网

https://www.ecisp.cn/html/cn/download_espcms/

image

此处下载服务器安装版,并使用phpstudy安装成功。

image

网站分析

后台入口文件参数加密

登录后台后,发现类名和方法名似乎在这里是通过参数act进行加载的,但是此处被加密了。

image

所以直接在网站源码中搜索关键字encryptdecrypt

image

此时似乎成功找到了关键的加密函数espcms_encrypt

再次通过全局搜索,在install_pack/espcms_public/espcms_tool.php中找到了有关该加密函数的实现。

image

通过分析发现,

data代表加密前或者加密后的数据(废话文学)

key代表密钥,这里key好像是一个常量。

image

网站配置文件

install_pack/espcms_datacache/espcms_config.php

image

解密成功

此时尝试解密act的值,并解密成功。

image

MainCenter 是类名

MainPage 是方法名

代码审计

先拿一个权限

install_pack/espcms_admin/control/SettingMain.phpsaveSettingMain

foreach循环遍历从SettingMain/saveSettingMainpost提交的数据。

并将数据存于ESPCMS_DB_PREFIX . "config"数据表中

espcms_config表。(注:ESPCMS_DB_PREFIX的值在网站配置文件中被全局定义了)

image

数据存于数据表后,执行第95-97行的代码。

即调用对象ESPCMS_Core中的command_creat方法

效果

image

那么此处拿权限的思路应该是,post的数据中包含恶意代码,并存入数据表中,通过读取数据表的内容,将恶意代码写入到espcms_command.php文件中。

此时我们去该功能点处抓包。

效果

效果

通过日志监听工具发现,恶意代码已经被写入数据库

效果

并且恶意数据也被成功写入到espcms_command.php文件中

效果

前端访问

http://192.168.31.96/espcms_datacache/espcms_command.php?0=phpinfo();

phpinfo被成功执行

效果

命令执行也成功。

效果

再拿点数据

通过对2.4.1的分析可知,在SettingMain/saveSettingMain

image

此处在更新网站配置信息数据时,未作过滤,因此存在SQL注入。

此处尝试注入

效果

效果

此处payload意思是当前数据库账号是root@localhost时,延时2s

通过查看日志监听信息,注入无误。

效果

最后删除点文件

install_pack/espcms_admin/control/TemplateFile.php中的delTemplateFile方法存在该任意文件删除漏洞,该漏洞可导致web系统重装。

TemplateFile/delTemplateFile

效果

通过unlink将文件删除。

效果

此时尝试删除espcms_datacache/install.lock

效果

尝试发包

效果

回显为true

好像删除成功

访问http://192.168.31.96/espcms_install/

发现的确删除成功

效果

总结

还有别的乱七八糟的漏洞,这里就不继续审计了。

工具地址:https://github.com/jdr2021/MysqlLogQuery

给一个小星星吧。

Author: jdr
Link: https://jdr2021.github.io/2021/11/24/易思ESPCMS(P8-21012001稳定版)代码审计/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.