前话

前段时间看过一个cms https://xz.aliyun.com/t/10733 后台存在很多可利用的上传和文件读取等,但是感觉有的地方没有记录仔细,另写一篇补充。

关于后台editor模块的任意文件上传

前篇提到后台editor模块存在create_node方法,可以实现任意位置的文件上传,但是这里有两个地方存在疑问,第一个是上传的绝对路径,毕竟前面也没有提到如何获取,实际上,在正常使用模板在线编辑功能的时候,路径就已经有了:

第二个就是我们在上传的时候,是没有写入文件内容的:

这里写入的内容是空的,需要想办法添加内容。
回头再看该cms时,发现editor模块中还存在一个save_file的方法:

这里传入了一个file_content,像是可写,跟进if条件中第二个setFileContent方法:

发现内容可写,那么现在需要满足if第一个条件,跟进checkFileKey:

发现,通过getFileKey将传入的file_path进行加密,并于传入的file_key进行比较,
这里获取self::getFileKey($file_path))的值,可以当前控制器下新写个方法,然后调用便可获取,或者再继续跟进getFileKey,这里我继续跟进getFileKey,

发现只是将参数简单拼接后加密。
新建poc.php,获取file_key:


(本机是win环境)

然后利用:

写入成功:

新的任意文件读取

同样在editor目录下发现dir_list方法

用前面提到的同样的方法测试:
正常不传参:

修改dir_path:

发现可以利用,但是这里显示的只是json数据,需要进行实际应用,
来到模板编辑-在线编辑:

两次抓包、放包:

在第三次请求中调用了dir_list方法:

这里便可以修改参数,实现任意文件读取:

(正常返回)

(修改参数后)

点击收藏 | 0 关注 | 1
登录 后跟帖