huarui bio photo

小学期web题


ezz_rce


<?php
show_source(__FILE__);
error_reporting(0);
$a=$_GET['shell'];
$b=$_GET;
$c=$_POST['cmd'];
function waf($c){
    if(preg_match("/cat|flag/is",$c)) {
        exit('不是哥们');
    }}

if(isset($b) and isset($c)){
    waf($c);
    call_user_func($a,$b)($c);
}else{
exit('这是一个简单的传参?');} 这是一个简单的传参?

思路就是使得call_user_func($a,$b)变成system,最后的($c)就可以填入命令了

call_user_func($a,$b)($c);

用到一个特别的函数:

array_pop()

作用: 弹出数组最后一个元素。
用法:
php

$stack = ["orange", "banana", "apple", "raspberry"];
$fruit = array_pop($stack);
print_r($stack);
解释: array_pop() 函数删除数组的最后一个元素并返回该元素。

所以直接使得shell=system即可


ez_rce


这题的非预期解,仅限php7环境



<?php

$a = "这里改成函数或者命令";
echo urlencode(~$a);


这个会生成url加密的东西,拿去替换~(~函数)(~命令);


最终