攻防世界 ics-07

攻防世界 ics-07

点击之后发现有个项目管理能进,点进去,点击看到源码,如下三段

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

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

大概思路是在id满足第三段代码的情况下,使$_SESSION['admin'] = True。然后在以POST方式提供con和file,当file满足条件时,会将con的内容写入uploaded /backup /filename中。在在第一段中包含此文件,可以得到flag.php

先在view-source.php?page=flag.php页面,如下图,输入1' or '9'='9,满足了第三段代码的条件

构造以下请求

在/uploaded/backup/aaa.txt确实存在,证明攻击奏效,下面主要是如何绕过第二段代码。

img

最终代码如下

然后菜刀链接,找到flag页面,完毕

posted @ 2020-06-25 22:50  iloveacm  阅读(782)  评论(0编辑  收藏  举报