首页 > 其他分享 >文件上传漏洞

文件上传漏洞

时间:2023-10-19 17:08:00浏览次数:34  
标签:文件 漏洞 绕过 php 上传 抓包 图片


多数的站点都存在文件上传功能,若未对用户上传的文件进行严格的过滤,则攻击者可能向后台数据库上传病毒、木马后门程序等恶意文件。如恶意用户上传一个可以执行的WebShell程序,则可以通过该程序获取系统后台Shell执行方法从而进一步获取整个系统的操作权限。

原理

文件上传漏洞主要是因为Web应用在设计和开发文件上传功能时,没有对用户上传的文件进行充分的检测及防御,导致恶意的可执行文件上传至Web服务器并造成损害

防护

(1)对上传文件扩展名进行严格过滤,设置白名单机制只允许特定扩展名文件上传,严格过滤扩展名为“.php、.asp、.bat”等可执行文件上传
(2)限制目录权限,对于文件上传目录设置可读、可写、不可执行权限,禁止用户上传的文件在后台执行。
(3)隐藏文件上传目录,用户上传文件的目标目录对用户隐藏。

绕过方式

前端js绕过

上传1.php文件时,前端阻止上传弹窗,说明存在前端验证文件。
修改前端js代码,利用f12可修改
把1.php改为1.jpg,再利用bp抓包,修改回1.php也可上传

黑白名单绕过

如果可以上传phtml 、php3 、php4 、php5 、Php 、php (空格) php、pphphp
如果上传成功,测试是否能够解析,不能解析则此方法不行。

针对文件类型绕过

程序对文件的类型content-type进行了判断
绕过:
1、上传1.php文件,进行bp抓包,
2、有的情况不仅仅判断content-type,还判断了内容,文件头
判断文件头:上传1.php抓包在文件内容增加GIF89a
判断文件内容:上传图片马1.jpg,再修改回1.php
常见文件头

路径截断绕过与普通截断绕过

上传图片马(可以在图片马头加GIF89a),发现有保存路径
成功的条件:php版本小于5.3.4
php的magic_quotes_gpc=off
可能为路径截断绕过
1、Get:在上传路劲处…/upload/1.php%00
2、Post:对…/upload/1.php后进行16进制hex修改为00
3、还有一种非路径截断,上传图片马(视情况加GIF89a)
抓包修改为:1.php;jpg或者1.php%00.jpg或者1.php/00.jpg

win系统解析漏洞绕过

1、上传1.php(或者图片马),抓包改为1.php.
2、上传1.php(或者图片马),抓包改为1.php::文件上传漏洞_phpDATA”会把::文件上传漏洞_上传_02DATA"之前的文件
3、上传1.php(或者图片马),抓包改为1.php:1.jpg
4、上传1.php(或者图片马),抓包改为1.php::$DATA…….

中间件解析漏洞绕过(apache)

利用了apache从右向左解析漏洞
1、上传图片马,bp抓包为1.php.xxxx.abc
2、上传.htaccess文件(内容:SetHandler application/x-httpd-php
)(如果允许上传),再上传图片马
Ps:如果能上传.htacess文件,但不能解析,可以试试下面
内容改为:
<FilesMatch “filename”>
SetHandler application/x-httpd-php

Filename 为你想要上传的文件后缀名。如jpg
然后再上传1.jpg图片马即可

中间件解析漏洞绕过(iis6.0 6.5 版本)

1、上传图片马,抓包修改为1.asp;.jpg或者%00 /00也可以(截断)
2、 上传图片马抓包,修改后缀为.asa、.cer和.cdx等,当然不检测内容和类型是直接上传也可以
3、上传图片马,抓包发现有保存图片的路径,如…/upload/image

4、修改路径为…/upload/image/1.asp

(然后就会存在…/upload/image/1.asp/目录,在这个目录下任何文件当作asp文件解析) iis7.0也存在这漏洞

中间件解析漏洞(nginx)

上传图片马,拿到图片马的路径,访问的时候加上/.php 就可作为php文件解析
如/upload/image/1.jpg/.php

条件竞争漏洞

文件上传进行验证的短暂时间内,服务器对传入的文件进行了临时保存,在这短暂时间内php是可以解析的,如果解析的速度够快
绕过:
上传1.php文件,利用bp抓包,设置多线程,不断发包。
浏览器访问连接我们上传的1.php文件。
不断刷新,会在某瞬间,执行1.php成功。

//连接脚本
import requests
url = "http://127.0.0.1/upload-labs/upload/shell.php.7z"
while True:
    html = requests.get(url)
    if html.status_code == 200:
        print("OK")
        break
    else:
	    print("NO")

二次渲染

上传图片加载后,会对图片进行二次渲养,改变大部分图片源码,绕过为:对照上传后的图片与原图片放在winhex中对比,查看图片哪个数据块没有被改变。将木马代码放在没有改变的一块中,在不损坏图片的前提下,即可绕过上传

标签:文件,漏洞,绕过,php,上传,抓包,图片
From: https://blog.51cto.com/u_16255631/7940637

相关文章

  • redis配置文件 配置文件启动 redis.conf
    #当配置中需要配置内存大小时,可以使用1k,5GB,4M等类似的格式,其转换方式如下(不区分大小写)##1k=>1000bytes#1kb=>1024bytes#1m=>1000000bytes#1mb=>1024*1024bytes#1g=>1000000000bytes#1gb=>1024*1024*1024bytes##内存配置大小写是一样......
  • 大文件上传的思路
    1.大文件上传的解决思路1.文件切片:把一个大文件转换成二进制内容,然后按照一个固定的大小对二进制内容进行切割,得到多个小文件,然后循环上传所有的小文件。在js中,文件File对象是Blob对象的子类,可以使用slice()方法完成对文件的切割;2.文件合并:当所有小文件上传完成,调用接口通知后端把......
  • js分片上传&断点续传
    原理js将大文件分成多分,全部上传成功之后,调用合并接口合成文件。如果传输中断,下次上传的时候过滤掉已经上传成功的分片,将剩余的分片上传,成功之后合并文件。前置条件获取uoloadId接口(用于标记分片)分片上传接口合成文件接口(后端自动合成则不需要)查询已上传的分片列表接口(断点......
  • CSV文件的读取与写入
    写入CSV文件save_path='/home/wp/st_detection/download_code/toy.csv'withopen(save_path,'w',newline='')ascsvfile:det_writer=csv.writer(csvfile,delimiter=',',quotechar='|',quoting=csv.QUOTE_MIN......
  • js实现文件切片上传,断点续传
    断点续传:顾名思义,继续上次断开的点,继续上传。思路整理:拿到文件,对文件进行fingerprint=md5(file),得到文件指纹。将指纹保存服务器。切割文件,分段上传,每次上传一段。服务器根据指纹进行索引判断文件上传进度,直到文件的全部片段上传完毕。以下文字没有完整的代码,只有基础......
  • react项目中预览pdf文件
    最近需求,要在b端展示上传的pdf文件。实现方式有很多,记录一下我们最常用的pdf.js//安装"pdfjs-dist":"2.0.402"//引入import*aspdfjsfrom'pdfjs-dist'import*aspdfjsWorkerfrom'pdfjs-dist/build/pdf.worker.entry'//定义初始值letpdfDoc=null;......
  • 使用SyncFavor进行文件同步
    SyncFavor是基于C#开发的免费文件同步工具,运行在windows上,下载链接:https://github.com/bsmith-zhao/sync同步管理界面:批量运行界面: 主从同步示例 下载压缩包解压,双击sync.exe启动同步管理器,可以看到空白的管理界面:点击工具栏的[添加工作区]创建工作区,工作区是一系列......
  • php动态生成海报图片、七牛云上传图片、七牛云打包文件
    场景描述具体业务中遇到了动态生成图片同时保存到七牛云上,然后打包提供下载的问题。常规方案一般保存到服务器上,然后打包下载后删除就可以了,为了节约带宽和服务器资源,算是另辟蹊径了。解决 1.动态生成图片逛了一逛github,最后使用了kkokk/poster的库,相当丝滑。 文档......
  • import { useRouter } from 'next/router'; 在非hooks 文件或组件中使用
    将 import{useRouter}from'next/router';改为 importRouterfrom"next/router";使用: Router.push('/');原来使用 import{useRouter}from'next/router';会导致报错如下  ......
  • WPF 编译出现大量系统文件
    .net版本号:.netframework4.6.1WPF编译后为什么会出现如下的系统文件,本身自带的框架应该是包含这些文件。查看这些DLL的版本都是隶属于4.6.2版本的 详细排查插件,发现某个插件最小支持4.6.2版本,本身是4.6.1,这才出现了许多DLL的原因。解决方法很简单:1.降插件的版本2.......