前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >攻防世界web进阶区ics-07详解

攻防世界web进阶区ics-07详解

作者头像
wuming
发布2021-01-21 16:00:12
1.2K0
发布2021-01-21 16:00:12
举报
文章被收录于专栏:wuming_CTFwuming_CTF
  1. 1. 题目
    1. 1.1. 详解
      1. 1.1.1. floatval
      2. 1.1.2. substr

题目

在这里插入图片描述
在这里插入图片描述

当然又是熟悉的界面,熟悉的ics题目,熟悉的只能点击一个页面

详解

在这里插入图片描述
在这里插入图片描述

这里进来有一个view-source 点击看看

在这里插入图片描述
在这里插入图片描述

是一堆代码。我们进行尝试审计

代码语言:javascript
复制
<?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不能为空,同时,他的值不能等于index.php这样,就会包含flag.php文件 否则重定向到flag.php这个文件

代码语言:javascript
复制
<?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,然后获取到一些值, 匹配.php3457,pht,phtml 如果匹配到,那么就结束 如果没有匹配到,那么就写入文件

代码语言:javascript
复制
<?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这里用的!==,所以类型也要比较,后变为字符串string,前面为数值float,所以肯定不相等。 substr用来返回子串 然后进行数据库的查询,并且进行了转义

  • 第一段是个简单重定向,get参数page不为index.php即可
  • 第二段 需要得到一个admin的session,之后可以post传入con与file两个参数 File参数是自定义的文件名字,之后会处理为backup/文件名 这里对文件名进行了过滤,防止后缀名是php的文件。 上传成功后,会切换到uploaded目录,创建文件,并将con的内容写入, 那么实际文件的路径就是:uploaded/backup/xxx.xxx
  • 第三段代码是对get参数id进行校验,如果id的浮点数不是1,且最后一位是9那么,实行查询语句,如果查询正确,会得到一个admin的session

因此我们这里就需要满足所有需求

在这里插入图片描述
在这里插入图片描述

我们查询id的时候,发现有了admin的session ?page=flag.php&id=1xx9 这里因为只要他的最后一位是9即可进行绕过 这里同时利用了php的弱类型相等,因此可以进行查询语句

在这里插入图片描述
在这里插入图片描述

我们就可以进行上传木马了 因为他过滤很严格,我们只能进行解析漏洞 00截断啊,之类的

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我们发现这里上传的并没有存进来,必须通过网页来上传,因为那里有者session

在这里插入图片描述
在这里插入图片描述

apache2.x的解析漏洞 1.php.xxx会被当作php来解析,那么我当时上传的时候,并没有能够成功, 我们换另一种上传方式 其中 .. 代表当前目录的父目录 , .代表当前目录,所以这里的c.php/b.php/..也就是访问b.php的父目录,也就是 c.php

在这里插入图片描述
在这里插入图片描述

但是我这里死活连不上,

在这里插入图片描述
在这里插入图片描述

只能这样来表示可以了吧

在这里插入图片描述
在这里插入图片描述

我们上传可以往父级目录上传,我估计他可能父级目录可以进行操作

floatval

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

他只留下了数字

substr

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
    • 详解
      • floatval
      • substr
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档