php代码审计
厂商官网
https://www.ecisp.cn/html/cn/download_espcms/
此处下载服务器安装版,并使用phpstudy安装成功。
网站分析
后台入口文件参数加密
登录后台后,发现类名和方法名似乎在这里是通过参数act进行加载的,但是此处被加密了。
所以直接在网站源码中搜索关键字encrypt
和decrypt
此时似乎成功找到了关键的加密函数espcms_encrypt
再次通过全局搜索,在install_pack/espcms_public/espcms_tool.php
中找到了有关该加密函数的实现。
通过分析发现,
data代表加密前或者加密后的数据(废话文学)
key代表密钥,这里key好像是一个常量。
网站配置文件
install_pack/espcms_datacache/espcms_config.php
解密成功
此时尝试解密act的值,并解密成功。
MainCenter
是类名
MainPage
是方法名
代码审计
先拿一个权限
在install_pack/espcms_admin/control/SettingMain.php
的saveSettingMain
中
foreach循环遍历从SettingMain/saveSettingMain
post提交的数据。
并将数据存于ESPCMS_DB_PREFIX . "config"
数据表中
即espcms_config
表。(注:ESPCMS_DB_PREFIX
的值在网站配置文件中被全局定义了)
数据存于数据表后,执行第95-97行的代码。
即调用对象ESPCMS_Core
中的command_creat
方法
那么此处拿权限的思路应该是,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
中
此处在更新网站配置信息数据时,未作过滤,因此存在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
给一个小星星吧。