文件上传漏洞

  • 用户上传一个可执行的脚本文件,获得了执行服务器端命令的能力
  • getshell最为常见、直接的方式
  • "文件上传"本事是一个正常的业务需求,问题在于如何安全的上传

一、触发条件

  1. 用户能够从Web网页访问到被上传的文件(直接或间接)
  2. 上传的文件被Web容器解释执行
  3. 用户上传的文件通常不能被网站程序压缩、修改内容

二、直接上传一句话

一句话木马是最基础的文件上传攻击

  • 很多上传点依赖于对访问上传页面的访问权限控制
  • 一旦上传页面暴露,直接就可以getshell

三、常见的文件上传防御

1.客户端JavaScript校验(前端校验)

  • 在浏览加载文件,但还未点击上传按钮时便弹出对话框
  • 内容如:只允许上传.jpg/.jpeg/.png后缀名的文件
  • 而此时并没有发送数据包

·抓包改包轻松绕过

2.检查MIME类型

浏览器在检查判断上传的文件类型后,在向服务器发送请求的包中添加MIME YTPE

服务器在接受文件时,看到的是想要的MIME类型,就会接受文件,否则不会

·同样抓包改包

3.随机文件名,随机文件地址

根据业务需求的限制

4.检查文件扩展名

  • 最直接有效的方法
  • web服务器根据文件扩展名来选择不同的方式解析
  • 可能使用白名单和黑名单

后端使用到黑名单过滤:

php 复制代码
<?php
$name = $_FILES['myfile']['name'];
$ext_name = substr($name,-4);
if($ext_name == ".php")
    die("NONONO");

上面的代码先是获取上传文件的名字,判断名字的后四位是否是.php,如果是则不允许上传

·绕过: 因为黑名单往往很难列举全情况

php3、php5、phtml、PHP、pHp、phtm 这些都是php的等价代换,使用替换后缀绕过黑名单

后端使用到白名单过滤:

绕过办法:

1.文件包含漏洞:

2.截断绕过:test.php%00.jpg

3.apache解析漏洞:

  • apache解析文件的规则是从右到左开始判断解析
  • 如果后缀名为不可识别文件解析,就再往左判断
  • 例如,test.php.owf.rar,如果白名单只允许上传rar文件,那么这个就可以利用apache解析漏洞上传php文件

4.nginx解析漏洞:

四、例题

1.只在前端使用js对上传文件类型进行控制

上传图片格式的木马

抓包将文件格式改回.php

.php文件成功上传到服务器

使用蚁剑 实现webshell

2.使用MIME type上传文件过滤

同样是抓包,之后更改文件后缀和Content-type为image/jpeg

3.使用黑名单,不允许上传.asp,.aspx,.php,.jsp后缀文件!

在抓包后改成.php5的后缀就能实现后面的绕过

相关推荐
会Tk矩阵群控的小木6 小时前
云控系统在TikTok多账号管理中的核心应用与技术实现
开发语言·php·开源软件·个人开发·tk矩阵
傻啦嘿哟7 小时前
降低首字延迟(TTFB):专线节点与TCP Fast Open的配置
开发语言·php
介一安全8 小时前
【漏洞学习】PHP+Windows环境通用文件上传漏洞深度剖析
windows·web安全·php·文件上传·安全性测试
郝学胜-神的一滴13 小时前
系统设计 013:高并发系统缓存:从原理到实践全解析
java·开发语言·python·缓存·系统架构·php·软件构建
程序二次开发16 小时前
wordpress 文章页,文章分类,单页,woocommerc 产品页,分类页添加.html后缀
大数据·前端·html·php
M1582276905517 小时前
工业级 CAN 转以太网网关|SG-CANET-210/410,打通 CAN 与以太网,工业通信无边界
单片机·嵌入式硬件·php
热爱Liunx的丘丘人17 小时前
搭建一个 Web + 数据库系统(Nginx+PHP+MySQL)
数据库·nginx·php
AC赳赳老秦17 小时前
OpenClaw多Agent分工协作:按工作模块拆分Agent,实现全流程自动化闭环
java·大数据·数据库·python·自动化·php·openclaw
handler0118 小时前
【Linux】五种IO模型详解
linux·运维·服务器·c语言·网络·笔记·php
xingyuzhisuan1 天前
网络 Token 常见故障原理,基础排查科普
运维·服务器·网络·php