代码执行、命令执行的函数有哪些

PHP

在 PHP 中,有很多函数可以执行系统命令或代码。它们是 PHP 漏洞利用中最常见的攻击入口

命令执行函数

  • exec(): 执行一个外部程序,不返回输出结果,通常需要使用参数获取

    exec('whoami', $output);
    print_r($output);
    
  • passthru(): 直接将命令的输出传递到浏览器

    passthru('ls -la');
    
  • shell_exec(): 通过 shell 执行命令,并将整个输出结果作为字符串返回

    $output = shell_exec('id');
    echo $output;
    
  • system(): 执行外部程序并显示输出

    system('netstat -an');
    
  • popen()proc_open(): 都可以打开一个进程文件指针,允许对进程进行双向 I/O 操作

    $handle = popen('ls', 'r');
    
  • pcntl_exec(): 在 PHP CLI 环境中,用新的程序替换当前进程

代码执行函数

  • eval(): 将字符串作为 PHP 代码来执行。这是最常见的代码执行漏洞函数

    $code = $_GET['code'];
    eval($code);
    
  • assert(): 在 PHP 7.2 之前,assert() 函数可以执行字符串参数

    assert($_POST['pass']);
    
  • create_function(): 用于创建一个匿名函数

    $func = create_function('', 'return ' . $_GET['pass'] . ';');
    $func();
    
  • call_user_func()call_user_func_array(): 调用一个用户函数,如果参数是用户可控的,可以用来执行任意函数

  • array_map(): 将回调函数作用到给定数组的每个元素上

  • unserialize(): 反序列化函数,如果序列化数据中包含一个恶意对象,可以导致对象注入,从而触发魔术方法(如 __destruct()),最终实现代码执行

Python

Python 的 Web 应用中也经常出现类似的问题

命令执行函数

  • os.system(): 执行 shell 命令

  • os.popen(): 执行 shell 命令,并返回一个文件对象

  • subprocess 模块: 这是更安全、更现代的模块,但如果参数处理不当,同样会造成命令注入

    import subprocess
    cmd = 'ls ' + user_input
    subprocess.call(cmd, shell=True) # 当 shell=True 时,可能存在命令注入
    

代码执行函数

  • eval(): 将字符串作为表达式来执行

    result = eval('1 + 1')
    
  • exec(): 执行动态代码

  • pickle.loads(): 反序列化模块,如果反序列化恶意数据,可能导致代码执行

Java

在 Java 中,直接执行系统命令的函数相对较少,但依然存在

命令执行函数

  • Runtime.getRuntime().exec(): 在单独的进程中执行指定的字符串命令

    Runtime.getRuntime().exec("ls -la");
    
  • java.lang.ProcessBuilder: 创建一个操作系统进程

    new ProcessBuilder("ls", "-la").start();
    

代码执行

  • ScriptEngine:Java 脚本引擎,可以执行 JavaScript 等脚本语言
  • 反序列化:Java 的反序列化漏洞通常是由于 readObject() 方法处理不当,结合 Commons-Collections 等库中的链式调用,最终实现命令执行
Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2025-09-25 03:12:54

results matching ""

    No results matching ""