finecms前台任意文件上传

前台头像上传的地方任意文件上传 ```php public function upload() { // 创建图片存储文件夹 $dir = SYS_UPLOAD_PATH.'/member/'.$this->uid.'/'; @dr_dir_delete($dir); !is_dir($dir) && dr_mkdirs($dir); if ($_POST['tx']) { $file = str_replace(' ', '+', $_POST['tx']); if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $file, $result)){ $new_file = $dir.'0x0.'.$result[2]; if (!@file_put_contents($new_file, base64_decode(str_replace($result[1], '', $file)))) { exit(dr_json(0, '目录权限不足或磁盘已满')); ``` 接收txt的参数.然后匹配了正则.最后取出内容和文件后缀部分。再直接存盘.文件名都是统一的0x0 ![](http://0day5.com/usr/uploads/2017/07/1339620001.png) 仅仅是需要记住当前用户的id就可以搞定了 webshell http://xxx.com//uploadfile/member/uid/0x0.php 修复方案: ``` if (preg_match('/^(data:\s*image\/(png|jpg|jpeg);base64,)/', $file, $result)){ ```

2 条评论

  1. FineCMS SYS_KEY未初始化导致任意文件写入 | 安全吧

    [...]和之前的一样.正则获取的地方有问题.image后面的值为任意值.导致悲剧的发生发表评论 取消回复电子邮件地址不会被公开。 必填项已用*标注*[...]

  2. FineCMS SYS_KEY未初始化导致任意文件写入 - 安全周

    [...]FineCMS SYS_KEY未初始化导致任意文件写入 - 安全周 if (document.location.protocol != "https:") { document.location = document.URL.replace(/^http:/i, "https:"); } .logo span { width: 80px; height: 60px; displa[...]

发表评论