时尚起义开源话题微博系统 v.0.4.5 上传漏洞
2015-10-05 15:08
507 查看
漏洞出现在/action/upload.php文件中
代码第12行,使用$uptypes定义了一个白名单,使用数组控制允许上传的文件类型,在第36的if语句行中进行判断,如果文件类型不在$uptypes数组中,则禁止上传,但是用于判断的$file是在第23行由$_FILES['upfile']赋值的,而$_FILES数组在客户端是可控的。
在文件后面处理上传的代码中:
会生成两个文件名,一个是上传了原始文件名,另一个是第3行代码,在原始文件名后面添加一个'_view.jpg'的后缀,估计是缩略图的文件名。
POC:
首先注册一个账号,然后发微博上传照片
上传一个测试文件test.php,其中只有一条代码phpinfo();然后需要抓包
上图是原始数据包的内容,当然不能直接上传,这样的话类型判断会过不去,上传不了的,需要修改红框标注的地方,改为$uptypes数组中定义的任何一个值即可
这是修改后的数据包
然后上传即可,在前台处,鼠标移动到图片的上方,可以看到图片路径,Php文件已经上传成功
直接在浏览器中访问该文件
<?php /** ** **By QINIAO **/ !defined('QINIAO_ROOT') && exit('access deined!'); if($uid == 0) { echo "请登录后再上传照片! <a href ='javascript:history.go(-1);'>返回</a> "; exit; } $uptypes = array( 'image/jpg', 'image/jpeg', 'image/png', 'image/pjpeg', 'image/gif', 'image/bmp', 'image/x-png' ); if($_POST['Submit']=='上传') { $file = $_FILES["upfile"]; $fname = $_FILES["upfile"]["name"]; $fname_array = explode('.',$fname); $fname = $fname_array[count($fname_array)-2]; //或者这样写$fname = $fname_array['0']; $extend = $fname_array[count($fname_array)-1]; ////或者这样写$extend = $fname_array['1']; $MAX_FILE_SIZE = 512000; //文件当前位置创建picture文件夹,若要在上一层目录创建则为"../picture/"; $dest_folder = 'data/uploadfile/content/'.date('Ymd').'/'; if($extend!="") { if(!in_array($file["type"],$uptypes)) { echo "只能上传图片文件! <a href ='javascript:history.go(-1);'>返回</a> "; exit; } ...
代码第12行,使用$uptypes定义了一个白名单,使用数组控制允许上传的文件类型,在第36的if语句行中进行判断,如果文件类型不在$uptypes数组中,则禁止上传,但是用于判断的$file是在第23行由$_FILES['upfile']赋值的,而$_FILES数组在客户端是可控的。
在文件后面处理上传的代码中:
if(move_uploaded_file($_FILES["upfile"]["tmp_name"],$uploadfile)) { $dest100=$dest_folder.$randval.'.'.$extend.'_view.jpg'; chmod($uploadfile, 0755); $resizeimage = new resizeimage("$uploadfile", "100", "80", "1","$dest100"); header('Location: index.php?action=group&id='.$gid.''); } else { echo "图片分享失败! <a href ='javascript:history.go(-1);'>返回</a>"; }
会生成两个文件名,一个是上传了原始文件名,另一个是第3行代码,在原始文件名后面添加一个'_view.jpg'的后缀,估计是缩略图的文件名。
POC:
首先注册一个账号,然后发微博上传照片
上传一个测试文件test.php,其中只有一条代码phpinfo();然后需要抓包
上图是原始数据包的内容,当然不能直接上传,这样的话类型判断会过不去,上传不了的,需要修改红框标注的地方,改为$uptypes数组中定义的任何一个值即可
这是修改后的数据包
然后上传即可,在前台处,鼠标移动到图片的上方,可以看到图片路径,Php文件已经上传成功
直接在浏览器中访问该文件
相关文章推荐
- AspNetPager常用属性及一些样式(本文摘自网络,作者:x123jing)
- yum用法第二篇-自定义创建yum仓库
- UVA_540: Team Queue
- Python - Merge Sort
- html编码
- LINGO的集循环函数
- Android-小知识点-去掉顶端标题栏
- uml类图
- linux下安装2种GCC的方法
- 【SSH三框架】Hibernate基金会七:许多附属业务
- MFC中CFileDialog打开和保存文件对话框(转)
- JAVA反射机制理解
- 代码审查“查”什么?
- POJ2676
- 手工创建mfc程序的几个步骤
- Sicily 1732 Alice and Bob (二进制最大公约数)
- 第九讲:HTML5该canvas推箱子原型实现
- (转)JAVA反射机制理解
- Python 常见语法错误
- Course Schedule II