前话
前段时间看过一个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方法:
这里便可以修改参数,实现任意文件读取:
(正常返回)
(修改参数后)
@1967843296430081 谢谢师傅,冲鸭
师傅加油!