74cms最新版4.1.15任意文件删除
闲逛补天,就喜欢看标题去猜谜语,新鲜的
在文件D:\wamp\www\74cms_v4.1.15\upload\Application\Home\Controller\PersonalController.class.php
中的ajax_resume_attach函数
public function ajax_resume_attach(){
if(false === $resume = $this->_is_resume()) $this->ajaxReturn(0,'简历不存在!');
$img_mod = M('ResumeImg');
$data['resume_id'] = $resume['id'];
$data['uid'] = C('visitor.uid');
$data['title'] = I('post.title','','trim,badword');
$data['img'] = I('post.img','','trim,badword');
$data['id'] = I('post.id',0,'intval');
if($data['id']==0){
$count = M('ResumeImg')->where(array('resume_id'=>$resume['id'],'uid'=>C('visitor.uid')))->count('id');
if($count >= 6) $this->ajaxReturn(0,'简历附件最多只可上传6张!');
}
$reg = D('ResumeImg')->save_resume_img($data);
if($reg['state'])
{
D('Resume')->check_resume(C('visitor.uid'),intval($data['resume_id']));//更新简历完成状态
$this->ajaxReturn(1,'附件添加成功!',$reg['id']);
}
$this->ajaxReturn(0,$reg['error']);
}
其中$data['img'] = I('post.img','','trim,badword');
会获取img变量,然后带入到
$reg = D('ResumeImg')->save_resume_img($data);
看函数名字,本来以为是直接insert了,结果跟一下SQL语句发现是update,结果只能先在其他地方插数据,再用这个update成install.lock等我们要删除文件的路径。
触发任意文件删除的文件还是在这个文件,在ajax_resume_img_del函数
public function ajax_resume_img_del(){
if(IS_POST){
$img_id = I('request.id',0,'intval');
!$img_id && $this->ajaxReturn(0,'请选择要删除的图片!');
$uid = C('visitor.uid');
$img_mod = M('ResumeImg');
$row=$img_mod->where(array('id'=>$img_id,'uid'=>$uid))->field('img,resume_id')->find();
$size = explode(',',C('qscms_resume_img_size'));
@unlink(C('qscms_attach_path')."photo/".$row['img']);
foreach ($size as $val) {
@unlink(C('qscms_attach_path')."photo/{$row['img']}_{$val}x{$val}.jpg");
}
if(false === $img_mod->where(array('id'=>$img_id,'uid'=>$uid))->delete()) $this->ajaxReturn(0,'删除失败!');
//写入会员日志
write_members_log(C('visitor'),2029,intval($row['resume_id']));
D('Resume')->check_resume(C('visitor.uid'),intval($row['resume_id']));//更新简历完成状态
$this->ajaxReturn(1,'删除成功!');
}else{
$tip='删除后将无法恢复,您确定要删除该条数据吗?';
$this->ajax_warning($tip);
}
}
其中这里
$row=$img_mod->where(array('id'=>$img_id,'uid'=>$uid))->field('img,resume_id')->find();
会获取img字段的值,然后带入到
@unlink(C('qscms_attach_path')."photo/".$row['img']);
这里,进行文件删除
其中上面几个变量id都是可控的,所以无影响
先注册用户,再填写简历,再上传图片,
再update
可以删除了
可以重装