当前位置: 首页 > article >正文

php文件上传

文章目录

  • 文件上传机制
  • 文件上传脚本
  • 文件上传绕过
    • php后缀替换为空
    • web服务器的解析漏洞绕过
      • nginx
      • iis
      • apache
  • 高级文件上传
    • nginx自定义配置文件(默认三分钟刷新一次)
    • 服务端内容检测
    • 结合伪协议使用
    • 配合日志包含
    • 只允许图片上传
  • 上传实战训练

文件上传机制

文件上传本质上是对服务器端的一个写操作
向服务器端上传的php文件会被放到\tmp\php???临时文件夹下,在脚本执行完后,临时文件夹中的文件会被销毁

文件上传脚本

脚本为html文件

<form action="index.php" enctype="multipart/form-data" method="post">
    <input name="file" type="file" />
    <input type="submit" value="upload"/>
</form>

在这里插入图片描述

文件上传绕过

php后缀替换为空

  • 采用双写绕过:pphphp

web服务器的解析漏洞绕过

nginx

基于错误的nginx和php=fpm配置,当我们访问\shell.txt\1.php时,如果1.php不存在,服务器端就会按照php去解析shell.txt。利用这个特性,可以先上传shell.txt,再访问一个不存在的php文件

iis

如果iis版本为6.0,目录的后缀是a.php,那么目录中的文件就会按照php解析去执行

apache

上传多后缀时,apache会从后向前解析,直到自己能解析的后缀,比如test.php.lally,会被解析成test.php

高级文件上传

nginx自定义配置文件(默认三分钟刷新一次)

.user.ini
在配置文件使用auto_apppend_file=1.txt使所有文件包含1.txt,执行里面的php代码
任意找一个php文件,利用1.txt里的一句话木马执行php代码即可

服务端内容检测

如果服务端进行eval,$_POST,php等关键词的检测,首先使用二分法(删除部分内容)确定黑名单,再结合.user.ini和绕过策略进行绕过,如base64编码,使用$_REQUEST,$_COOKIE等超全局变量进行绕过在这里插入图片描述

结合伪协议使用

auto_prepend_file=php://input

这样就可以在首页的php文件里使用伪协议了

配合日志包含

  • 日志包含,就是通过将恶意代码通过user-agent等方式传入日志中,再包含日志,就会执行其中的php代码

日志文件默认路径
\var\log\nginx\access.log在这里插入图片描述
注意代码一定不要写错,否则报错了就只能重置环境

只允许图片上传

通过XBM格式图片的特性绕过getimagesize函数检测

在配置文件中加入
#define hight100
#define width 100

就会把这个文件当成图片来处理,并且图片的高度和宽带为100,即完成了绕过,在语句后加入其他代码可正常执行

上传实战训练

在这里插入图片描述
显然只允许上传图片,用xmp的方法试一下,发现对后缀名有限制,必须是.png
那怎么办呢?看到提示,前台校验不可靠,意思就是说,在我们上传的时候,前端会做一个后缀名检测,如果是.png,才会发出数据包,在发出数据包后,将包拦截下来,后缀改回.php即可在这里插入图片描述
成功绕过,接下来找flag即可


如果在后端加入了判断png后缀的逻辑,仅凭抓包更改后缀是绕不过去的,但是如果后端判断的逻辑不够严密(如采用黑名单只校验几个后缀),我们就可以把.user.ini这样的配置文件偷渡过去,在.user.ini里使用文件包含

抓包改后缀绕过前端检测
在这里插入图片描述

auto_prepend_file=1.png
配置文件中写入
在1.png中写入一句话木马,接着上传即可


我们继续看,如果后端的检测机制更厉害一点,能够检测到一句话木马中的一些关键词并过滤怎么办呢在这里插入图片描述
先分析一下一句话木马

<?php eval($_POST[1]);?>

php是大概率被检测到的,可以换成短标记<?=或script标签在这里插入图片描述
3和4需要php配置开启一些项,所以不一定能用

POST的替换策略在上文有详细说明

那么如果一句话木马在上传中被禁到用不了(比如把<禁用了),又该怎么办呢?答案是日志包含

\var\log\nginx\access.log

通过user-agent传入恶意代码并执行


http://www.kler.cn/a/558251.html

相关文章:

  • _vm.xxxxxx is not a function“ vue2错误
  • 贪心算法
  • 基于 DeepSeek LLM 本地知识库搭建开源方案(AnythingLLM、Cherry、Ragflow、Dify)认知
  • 使用Java爬虫获取1688 item_search_factory 接口的工厂搜索数据
  • 网页请求腾讯云环境的云函数
  • [Android]如何让APP快速被系统杀掉
  • 在 Mac ARM 架构的 macOS 系统上启用 F1 键作为 Snipaste 的截屏快捷键
  • 文本分类与情感分析算法
  • 图解【提示工程 VS 微调 VS RAG、全量微调 VS LoRA微调、TopK VS TopP】截图笔记
  • IGBT的损耗性分析
  • deepseek自动化代码生成
  • 知识图谱-学习计划
  • C语言 / C#改造冒泡排序函数bubble_sort()
  • 【练习】【回溯No.1】力扣 77. 组合
  • Windows 上编译 mebedtls 的鸿蒙库
  • 毕业项目推荐:基于yolov8/yolo11的水稻叶片病害检测识别系统(python+卷积神经网络)
  • HTML Application(hta)入门教程
  • SpringBoot 整合 JPA
  • Redis-线程模型
  • SMT贴片治具关键设计要素与制造工艺探析