文件上传漏洞防御图片写马的剔除.docx

文件上传漏洞防御图片写马的剔除.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
文件上传漏洞防御图片写马的剔除

文件上传漏洞防御——图片写马的剔除  最近回顾了一下CasperKid大牛在2011年11月发布的Upload Attack Framework,非常有感触,写得非常好,想深入了解这个漏洞的都推荐看看。 AD: 2013大数据全球技术峰会低价抢票中 最近回顾了一下CasperKid大牛在2011年11月发布的Upload Attack Framework,非常有感触,写得非常好,想深入了解这个漏洞的都推荐看看。 上传功能常见于图片的上传,例如博客头像设置,广告位图片上传等。 上传检测方法在paper中也写的比较明朗,这里总结一下: 1. 客户端使用JS对上传图片做检测,例如文件大小,文件扩展名,文件类型 2. 服务端检测,例如文件大小(免得拒绝服务),文件路径(避免0x00截断,目录遍历),文件扩展名(避免服务器以非图片的文件格式解析文件),文件类型(避免修改Content-Type为image/jpeg等),文件内容(避免图片写马) 上传检测绕过的方法,也总结一下: 1.客户端检测,相当于没有检测,可以使用HTTP代理例如burp绕过 2.服务端检测,一般采用白名单+黑名单的方式,但也极有可能出纰漏。例如大小写,不在名单内的特例,操作系统bt特性(windows系统会自动去掉文件名最后面的点和空格),0x00截断,服务器文件解析漏洞,最后还有图片写马绕过类型检测 本篇博客重点讲讲图片写马的检测。 我们知道PHP中文件类型的检测可以使用 1.$_FILES[uploaded][type]; 2.getimagesize 两种方式来判断是否是正常图片,其实只要在不破坏图片文件格式的情况下,就可以绕过检测 例如使用以下命令,将正常图片与一句话php木马绑定在一起生成一个新的文件的方式 copy /b tangwei.jpg+yijuhua.php tangweiyijuhua.jpg 我们查看新生图片的内容,在图片底端可以看到一句话木马写入,如下图所示 strings tangweiyijuhua.jpg  接下来我们演示这张图片是否能正常上传。 试验用到了两个脚本 1.upload.html 上传客户端 Choose an image to upload 2. upload.php 上传文件处理 这个脚本会检测文件后缀与文件类型,符合白名单jpeg格式的才允许上传,并打印出上传文件的基本信息及显示图片。 注意:红色字体部分可以先注释掉,下一步演示中会使用到 if (isset($_POST[upload])){ // 获得上传文件的基本信息,文件名,类型,大小,临时文件路径 $filename = $_FILES[uploaded][name]; $filetype = $_FILES[uploaded][type]; $filesize = $_FILES[uploaded][size]; print  File name : $filename ; print  File type : $filetype ; print  File size : $filesize ; $tmpname = $_FILES[uploaded][tmp_name]; print  Temp File path : $tmpname ; $uploaddir=/var/www/upload/; $target_path=$uploaddir.basename($filename); // 获得上传文件的扩展名 $fileext= substr(strrchr($filename,.),1); print  File extension : $fileext ; $serverip = $_SERVER[SERVER_ADDR]; //判断文件后缀与类型,合法才进行上传操作 if(($fileext == jpg) ($filetype==image/jpeg)){ if(move_uploaded_file($tmpname,$target_path)){ print $target_path. successfully uploaded ! ; //显示上传的图片 print Origin image ; //使用上传的图片生成新的图片 $im = imagecreatefromjpeg($target_path); //给新图片指定文件名 srand(time()); $newfilename = strval(rand())..jpg; print  new file name $newfilename ; $newimagepath = $uploaddir.$newfilename; imagejpeg($im,$newimagep

文档评论(0)

vaxlv2 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档