[MRCTF2020]套娃

查看源码发现第一关的相关
补充:
substr_count函数
计算字符串出现的次数。%5f就是”_”的十六进制。
也就是,不能出现下划线的同时,我们要上传23333的同时不能上传23333
你在干什么?,
所以我们使用url编码代替下划线(%20)
再通过%0a构造23333%0a去绕过preg
tips:preg函数忽略行尾的%0a,但是%0a仍然可以发挥效果。
?b%20u%20p%20t=23333%0a  | 

好耶!
那就前往这个网址吧!!

不能进入,要使用本地,我第一个想法就是xff
抓包试试

但是吧,还有一个
Client-Ip:127.0.0.1  | 
试试
有反应了,但不多,我们也可以看到在回显的底下有一串奇奇怪怪的东西

啊?
这是啥?
去查一下
是js代码!!!
震惊!!!!
所以找一个跑js代码的网站试试

所以还要传一个merak上去?
试试

OK了老铁!!!

这里也就是一个绕过,一个是2333,一个是file
首先先看2333
读取文件,对比文件中是否含有那串字符串?
所以这里要使用data伪协议读取file
2333=data://text/plain,todat+is+a+happy+day  | 
之后就是file
主要是前面的change函数,将每个字符都加上i*2
所以,我们直接就是写一个脚本
//逆向代码  | 
先把它就是先减一个i*2就行了
flag=ZmpdYSZmXGI=  | 
将这两个一起使用get传上去就好了
但是要注意一点,就是说,要把之前传的post删掉或者直接关掉,否则程序会直接停止。
拿到flag