文件上传总结

一、原理

通过界面上的上传功能上传了一个可执行的脚本文件,而WEB端的系统并未对其进行检测或者检测的逻辑做的不够好,使得恶意用户可以通过文件中上传的一句话木马获得操控权

二、绕过方法

1>前端绕过

1.删除前端校验函数

checkFile()

2.禁用js代码
3.bp修改数据包

上传符合要求的后缀名,用bp抓包,修改为木马后缀名即可

2>黑名单绕过
1.等价扩展名绕过
等价扩展名
aspasa,cer,cdx
aspxashx,asmx,ascx
phpphp2,php5,phtml,phps
jspjspx,jspf
2.上传.htaccess文件

<FilesMatch "1.jpg">
SetHandler application/x-httpd-php
</FilesMatch> 

大概意思为,.htaccess文件可以将1.jpg文件当作php文件解析执行。

3.大写绕过(仅Windows)

修改php文件的后缀为1.PHp,然后上传此文件即可

4.空格绕过(仅Windows)

利用bp抓包,在文件扩展名后加空格即可(没有trim函数)

5.点号绕过(仅Windows)

扩展名后加点即可

6.::$DATA绕过限制(仅Windows)

Windows系统在保存1.php::$DATA一类的文件时会自动去除文件后的::$DATA字符串,保存的文件名为1.php。

7.空格+点号绕过

例如1.php . .

8.双写绕过(str_ireplace函数)

程序中的str_ireplace函数会将黑名单中的后缀替换为空,但是只替换了一次,因此我们可以使用双写绕过此函数

9.00截断(move_uploaded_file函数)

move_uploaded_file()函数本身存在逻辑漏洞缺陷,可以实现00截断绕过。也可以在php文件名后添加任意字符,只要不在黑名单限制内都可成功上传文件

10.php其他标签绕过

    <?php @eval($_POST['cmd']); ?>            //正常写法
    <? @eval($_POST['cmd']); ?>                //短标签,适合过滤php
    <% @eval($_POST['cmd']); %>                //asp风格
    <script language='php'>@eval($_POST['cmd']);</script>            //<script>风格,适合过滤<?

11.文件头检测绕过

可以通过php截断后,添加GIF89a进行绕过

12..user.ini

数据包修改为名为.user.ini

类型为image/png

内容为“GIF89a auto_prepend_file=1.png”

三.白名单绕过

1.MIME绕过

抓包将content-type字段的类型修改为image/jpeg,即可绕过检测

2.GET型00截断(仅Windows)

windows系统识别到文件名中00的时候将不再向后识别

仅适用于

php版本小于5.3.4
php的配置文件php.ini中的magic_quotes_gpc 的值需要修改为Off

3.POST型00截断

在1.php文件后添加00

4.二次渲染

在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),生成一个新的图片保存至服务器中。我们可以将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。

图片马上传后,重新下载,将图片马与下载后的图片在010中进行十六进制比较。找到两个文件数据相同块,在下载后的图片数据相同处插入php恶意语句保存即可。

也可以通过 imagecreatefromgif函数直接转换与原图片进行对比

<?php
$demo = imagecreatefromgif('file');
imagegif($demo,"outfile");
?>

5.条件竞争时间差

当文件上传后,服务器会首先保存然后重命名,最后再把源文件删除。在文件删除之前,如果线程过大可能导致服务器处理数据变慢,从而使黑客有时间对上传的webshell进行访问。此过程只会删除上传的文件,但是不会删除生成的文件,因此可以使用如下的php代码获取shell。

6.apache的addhandler配置解析漏洞

阿帕奇对于解析的文件扩展名会从右往左开始解析,当最右边后缀无法解析时,会往左识别,直到识别合法才进行解析

7.白名单配合文件包含漏洞

文件包含漏洞会将任意类型的文件当作php文件进行解析,如果文件中包含了php代码,则其中的php代码将会执行。

    <?php
       $a=$_GET['inc'];
       include($a);
    ?>

 上传一个图片马,通过文件包含包含此文件

参考博客:http://t.csdnimg.cn/oBT7b

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

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

相关文章

华为Ascend C算子开发(中级)考试

华为Ascend C算子开发&#xff08;中级&#xff09;考试题 提示&#xff1a;这个是河北廊坊Ascend C算子开发考试题和答案&#xff0c;仅供参考&#xff0c;因为不确定其他城市的考试题是否也是一样 文章目录 华为Ascend C算子开发&#xff08;中级&#xff09;考试题一、op_ho…

捉虫笔记(1)之 WinDbg符号配置

WinDbg符号配置 1、WinDbg简单介绍 WinDbg 是微软的一款强大的调试工具&#xff0c;用于 Windows 平台的内核和用户模式调试。它提供了一系列强大的功能&#xff0c;包括内存和寄存器的查看、断点设置、堆栈跟踪、性能分析等。 WinDbg 的历史可以追溯到微软早期的调试工具&a…

最新风车IM即时聊天源码及完整视频教程2024年7月版

堡塔面板 试验性Centos/Ubuntu/Debian安装命令 独立运行环境&#xff08;py3.7&#xff09; 可能存在少量兼容性问题 不断优化中 curl -sSO http://io.bt.sy/install/install_panel.sh && bash install_panel.sh 1.宝塔环境如下: Nginx 1.20 Tomcat 8 MySQL 8.0 R…

从0到1搭建一个组件库

最近我开启了一个新项目&#xff0c;基于echarts进行二次封装&#xff0c;希望能为Vue3项目量身打造一套高效、易用的图表组件库&#xff0c;取名为 v-echarts。 目前雏形已经搭建完成&#xff0c;先把整个搭建过程做一个记录。后续再持续迭代、完善该图表组件库。 v-echarts 文…

RustDesk远程控屏软件使用教学

RustDesk自建服务器使用教学RustDesk远程控屏软件使用教学 下载软件后 右键管理员运行 点击右上角设置按钮 管理员运行 保证启动服务 点击左侧导航栏网络按钮 复制域名或者ip地址到 ID服务器 输入框 然后点击应用即可

移动式气象站:科技赋能,精准预报的新篇章

在这个气候多变、极端天气频发的时代&#xff0c;气象信息的准确性与及时性成为了社会各界关注的焦点。从农业生产到城市规划&#xff0c;从航空航海到日常生活&#xff0c;气象服务无处不在&#xff0c;其重要性不言而喻。而在这场气象科技的变革中&#xff0c;移动式气象站以…

友思特应用 | 硅片上的光影贴合:UV-LED曝光系统在晶圆边缘曝光中的高效应用

导读 晶圆边缘曝光是帮助减少晶圆涂布过程中多余的光刻胶对电子器件影响的重要步骤。友思特 ALE/1 和 ALE/3 UV-LED 高性能点光源&#xff0c;作为唯一可用于宽带晶圆边缘曝光的 i、h 和 g 线的 LED 解决方案&#xff0c;可高效实现WEE系统设计和曝光需求。 晶圆边缘曝光及处…

The Llama 3 Herd of Models.Llama 3 模型论文全文

现代人工智能(AI)系统是由基础模型驱动的。本文提出了一套新的基础模型,称为Llama 3。它是一组语言模型,支持多语言、编码、推理和工具使用。我们最大的模型是一个密集的Transformer,具有405B个参数和多达128K个tokens的上下文窗口。本文对Llama 3进行了广泛的实证评价。我们…

day06 1.算法的相关概念2.排序算法3.查找算法

一、算法的相关概念 程序 数据结构 算法 算法是程序设计的灵魂&#xff0c;结构是程序设计的肉体 算法&#xff1a;计算机解决问题的方法或步骤 1.1 算法的特性 1> 确定性&#xff1a;算法中每一条语句都有确定的含义&#xff0c;不能模棱两可 2> 有穷性&#xff1a;…

【Linux】从零开始认识多线程 --- 线程ID

在这个浮躁的时代 只有自律的人才能脱颖而出 -- 《觉醒年代》 1 前言 上一篇文章中讲解了线程控制的基本接口&#xff1a; 线程创建pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);: pthread_t *thread :输出…

使用API有效率地管理Dynadot域名,设置过期域名抢注请求

简介 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

深入理解SQL中的INNER JOIN操作

本文介绍了INNER JOIN的定义、使用场景、计算方法及与其他JOIN的比较。INNER JOIN是关系数据库中常用的操作&#xff0c;用于返回两个表中匹配的行&#xff0c;只有在连接条件满足时才返回数据。本文详细解释了INNER JOIN的语法及其在一对多、多对多关系中的应用&#xff0c;通…

【github】使用KeepassXC 解决github Enable two-factor authentication (2FA) 第二因子认证

下载 https://github.com/keepassxreboot/keepassxc/releases/download/2.7.9/KeePassXC-2.7.9-Win64.msi 代理地址 https://dgithub.xyz/keepassxreboot/keepassxc/releases/download/2.7.9/KeePassXC-2.7.9-Win64.msi 由于该软件不允许截图&#xff0c;以下操作参考官网 …

如何检查代理IP地址是否被占用

使用代理IP时&#xff0c;有时候会发现IP仍然不可用&#xff0c;可能是因为已经被其他用户或者网络占用了。为了检测代理IP是否被占用&#xff0c;我们可以采用一些方法进行验证测试&#xff0c;以保证代理IP的有效性和稳定性。 1.ARP缓存方法 ARP缓存法是一种简单有效的检测代…

【Python面试题收录】Python编程基础练习题①(数据类型+函数+文件操作)

本文所有代码打包在Gitee仓库中https://gitee.com/wx114/Python-Interview-Questions 一、数据类型 第一题&#xff08;str&#xff09; 请编写一个Python程序&#xff0c;完成以下任务&#xff1a; 去除字符串开头和结尾的空格。使用逗号&#xff08;","&#…

kotlin示例

以下代码是我写的练习程序&#xff0c;更好的代码可以从这里查看&#xff1a;代码 生日卡片 package com.example.happybirthdayimport android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity…

使用echo写入多行文字到文件时换行的处理

目标 想使用echo写入如下内容到文件program.c里 #include<stdio.h> int main(){printf("hello!\n"); } 需要处理 1、如何处理行换 2、代码中的换行如何处理 实际例子 创建文件夹 mkdir test cd test chmod 777 . 创建文件写入内容 查看 cat -n program.c…

Flink入门(更新中)

目录 一、Flink 1.1 基本概念 1.1.1 flink简介 1.2 flink编程模版 1.3 常用概念 1.2.1 datastream 1.2.2 算子、Task 1.2.3 多流操作 1.2.6 时间语义 二、Flink编程实战(Java) 2.1 wordcount 一、Flink 1.1 基本概念 1.1.1 flink简介 1.图片介绍 性能&#xff1a…

[练习]如何使用递归算法?

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;算法(Java)&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 1. 递归概述 2.汉诺塔问题 题目描述​编辑 题解 代码实现 3…

package.json中对peerDependencies的理解

peerDependencies只要是用来限制依赖的&#xff0c;最近在开发的时候有遇到这样的问题&#xff0c;所以研究了一下 "peerDependencies": {"vue/composition-api": "^1.0.5","vue/runtime-core": "^3.0.0","echarts&q…