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

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传入恶意代码并执行

相关文章:

  • Git版本控制系统---本地操作(万字详解!)
  • Linux练级宝典->Linux进程状态详解,孤儿进程,僵尸进程
  • 侯捷 C++ 课程学习笔记:类的声明与构造函数
  • 更换 Git 项目的远程仓库地址(五种方法)
  • Oracle备库srvctl start丢失某个原有的service_names的案例
  • 计算机毕业设计SpringBoot+Vue.jst在线文档管理系统(源码+LW文档+PPT+讲解)
  • Maven环境搭建
  • Java中的注解是什么?如何使用注解?
  • hugging face---transformers包
  • 面向长文本的多模型协作摘要架构:多LLM文本摘要方法
  • 项目8:信用违约预测-集成学习
  • JSONassert:JSON测试的体验高效工具
  • C++初阶——简单实现list
  • 计算机毕业设计SpringBoot+Vue.js服装商城 服装购物系统(源码+LW文档+PPT+讲解+开题报告)
  • 5. Go 方法(结构体的方法成员)
  • w225政府管理系统设计与实现
  • 【计算机网络】传输层TCP协议
  • dockerfile构建haproxy
  • jetson nano 开机自启动python文件
  • HBase安装
  • 怎么做网站倒计时/竞价外包推广
  • 网站开发怎么做账/最好的bt种子搜索神器
  • 绍兴网站设计/色盲测试
  • 定制高端网站/电商具体是做什么的
  • 自己怎么样做游戏网站/游戏推广员怎么做
  • 专业服务网站开发/抖音自动推广引流app