当前位置: 首页 > news >正文

文件上传漏洞案例

目录

1.案例一

1)案例源码

2)创建web.php文件

3)使用抓包软件

2.案例二 

1)案例代码

2) 案例分析

3)copy命令生成图片马

 4)上传图片马到服务器

5)解析 文件图片

3.案例三

1)案例代码

2)绕过方法

3)上传木马,然后抓包

 4)持续发包

5)直接访问 


1.案例一

1)案例源码

function checkFile() {var file = document.getElementsByName('upload_file')[0].value;if (file == null || file == "") {alert("请选择要上传的文件!");return false;}//定义允许上传的文件类型var allow_ext = ".jpg|.png|.gif";//提取上传文件的类型var ext_name = file.substring(file.lastIndexOf("."));//判断上传文件类型是否允许上传if (allow_ext.indexOf(ext_name + "|") == -1) {var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;alert(errMsg);return false;}
}

2)创建web.php文件

文件里面写入下面一行代码

<?php phpinfo(); ?>

然后上传该文件

就会发现格式不对,需要把后缀名改为.jpg。就会发现现在能上传文件,但是不能解析文件。

3)使用抓包软件

修改下面文件后缀为php就可以上传成功

2.案例二 

1)案例代码

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])){// 获得上传文件的基本信息,文件名,类型,大小,临时文件路径$filename = $_FILES['upload_file']['name'];$filetype = $_FILES['upload_file']['type'];$tmpname = $_FILES['upload_file']['tmp_name'];$target_path=UPLOAD_PATH.'/'.basename($filename);// 获得上传文件的扩展名$fileext= substr(strrchr($filename,"."),1);//判断文件后缀与类型,合法才进行上传操作if(($fileext == "jpg") && ($filetype=="image/jpeg")){if(move_uploaded_file($tmpname,$target_path)){//使用上传的图片生成新的图片$im = imagecreatefromjpeg($target_path);if($im == false){$msg = "该文件不是jpg格式的图片!";@unlink($target_path);}else{//给新图片指定文件名srand(time());$newfilename = strval(rand()).".jpg";//显示二次渲染后的图片(使用用户上传图片生成的新图片)$img_path = UPLOAD_PATH.'/'.$newfilename;imagejpeg($im,$img_path);@unlink($target_path);$is_upload = true;}} else {$msg = "上传出错!";}}else if(($fileext == "png") && ($filetype=="image/png")){if(move_uploaded_file($tmpname,$target_path)){//使用上传的图片生成新的图片$im = imagecreatefrompng($target_path);if($im == false){$msg = "该文件不是png格式的图片!";@unlink($target_path);}else{//给新图片指定文件名srand(time());$newfilename = strval(rand()).".png";//显示二次渲染后的图片(使用用户上传图片生成的新图片)$img_path = UPLOAD_PATH.'/'.$newfilename;imagepng($im,$img_path);@unlink($target_path);$is_upload = true;               }} else {$msg = "上传出错!";}}else if(($fileext == "gif") && ($filetype=="image/gif")){if(move_uploaded_file($tmpname,$target_path)){//使用上传的图片生成新的图片$im = imagecreatefromgif($target_path);if($im == false){$msg = "该文件不是gif格式的图片!";@unlink($target_path);}else{//给新图片指定文件名srand(time());$newfilename = strval(rand()).".gif";//显示二次渲染后的图片(使用用户上传图片生成的新图片)$img_path = UPLOAD_PATH.'/'.$newfilename;imagegif($im,$img_path);@unlink($target_path);$is_upload = true;}} else {$msg = "上传出错!";}}else{$msg = "只允许上传后缀为.jpg|.png|.gif的图片文件!";}
}

2) 案例分析

exif_imagetype()读取一个图像的第一个字节并检查其后缀名。
返回值与getimage()函数返回的索引2相同,但是速度比getimage快得多。需要开启php_exif模块。

3)copy命令生成图片马

 4)上传图片马到服务器

5)解析 文件图片

3.案例三

1)案例代码

$is_upload = false;
$msg = null;if(isset($_POST['submit'])){$ext_arr = array('jpg','png','gif');$file_name = $_FILES['upload_file']['name'];$temp_file = $_FILES['upload_file']['tmp_name'];$file_ext = substr($file_name,strrpos($file_name,".")+1);$upload_file = UPLOAD_PATH . '/' . $file_name;if(move_uploaded_file($temp_file, $upload_file)){if(in_array($file_ext,$ext_arr)){$img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;rename($upload_file, $img_path);$is_upload = true;}else{$msg = "只允许上传.jpg|.png|.gif类型文件!";unlink($upload_file);}}else{$msg = '上传出错!';}
}

2)绕过方法

测试图片的渲染后没有修改的位置,将一句话木马添加进去,这样就可以利用文件包含去执行php一句话木马了

对于GIF 的上传,只需要判断没有修改的位置,然后将php一句话木马添加即可

对于PNG的上传,需要修改PLTE数据块或者修改IDAT数据块,

这里可以利用别人写好的脚本,将php一句话 <?=$_GET[0]($_POST[1])?>,一句话利用了php短开标签

3)上传木马,然后抓包

 4)持续发包

<?php fputs(fopen('../shell.php','w'),'<?php phpinfo();?>');?> 

5)直接访问 

http://www.lryc.cn/news/161598.html

相关文章:

  • Office365 Excel中使用宏将汉字转拼音
  • baichuan2(百川2)本地部署的实战方案
  • PostgreSQL配置主从备份(docker)
  • qt作业day4
  • js如何实现字符串反转?
  • Nmap 7.94 发布:新功能!
  • 【深入解析spring cloud gateway】08 Reactor 知识扫盲
  • 常用ADB指令
  • 【HTML5高级第二篇】WebWorker多线程、EventSource事件推送、History历史操作
  • CentOS云服务器部署配置
  • 深入解析Java中的数组复制:System.arraycopy、Arrays.copyOf和Arrays.copyOfRange
  • libc和glibc有什么区别
  • 基于SSM的在线云音乐系统
  • 构建高效的BFF(Backend for Frontend):优化前端与后端协作
  • 喜报 | 实力亮相2023服贸会,擎创科技斩获领军人物奖创新案例奖
  • 科技革新自动驾驶:拓世AI智能助理携手跟您一起点亮未来之旅
  • 【HCIE】01.IGP高级特性
  • 知识大杂烩(uniapp)
  • Jmeter压测监控体系搭建Docker+Influxdb+Grafana
  • TDesign 点击高亮显示=》点击切换class类名
  • 容器编排学习(二)镜像制作和私有仓库介绍
  • tcp记录
  • IDEA中使用Java连接MySQL数据库的配置和使用方法
  • android——服务JobService
  • 一文讲清楚redis的线程池jedis
  • 备战面试每日一题
  • 【嵌入式数据库之sqlite3】
  • Android 9.0 pms中关于启动app时获取app的ActivityInfo信息相关源码分析
  • 华为数通方向HCIP-DataCom H12-821题库(单选题:321-340)
  • 《TCP/IP网络编程》阅读笔记--基于TCP的服务器端/客户端