[MRCTF2020]套娃 学到很多
第一个套:
$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中?
之后的字符串,不是让你在报文里伪造一个,不能出现_及其url编码,但是还要get传参b_u_p_t,这里可以用空格代替_,因为空格到了后端就变成了_
正则/^23333$/,可以传参?b u p t=23333%0a,%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'])); } ?>
就是要做一个逆向的decode过程,需要编写脚本的能力