并非抄袭,而是分析(帮朋友~)。
原文地址 : http://www.91ri.org/16663.html
第一处代码分析

1 | $post=array('ver'=>$metcms_v,'app'=>$applist); | 
2 | $result=curl_post($post,60); | 
3 | if(link_error($result)==1){ | 
4 | 	$results=explode('<Met>',$result); //下面会讲解 | 
5 |     file_put_contents('dlappfile.php',$results[1]); //下面会讲解 | 
6 |     file_put_contents('standard.php',$results[0].$results[1]); //下面会讲解 | 
第四行:
explode函数小案例:
1 | $str = 'iamfree1,iamfree2'; | 
2 | var_dump( explode(',', $str) ); | 

所以explode(',', $str)就是将$str中的,的内容分割为出来分别放到数组里。
第5-6行:
file_put_contents函数小案例:
1 | file_put_contents('2018-07-10.txt', 'iamfree'); // 会在当前脚本创建一个2018-07-10.txt文件,内容为iamfree | 

第二处代码分析:

我做了相应的注释,如下:
1 | function curl_post($post,$timeout){ | 
2 | |
3 |     global $met_weburl,$met_host,$met_file; | 
4 |      | 
5 |     $host=$met_host; | 
6 |     $file=$met_file; | 
7 |      | 
8 |     if(get_extension_funcs('curl')&&function_exists('curl_init')&&function_exists('curl_setopt')&&function_exists('curl_exec')&&function_exists('curl_close')) { | 
9 |      | 
10 |     	// 这个if判断是否可以用curl、curl_init、curl_setopt、curl_exec、ecurl_close,如果可用,就执行下面的操作 | 
11 |     	 | 
12 |     	$curlHandle=curl_init(); | 
13 |     	 | 
14 |     	curl_setopt($curlHandle,CURLOPT_URL,'http://'.$host.$file); // CURLOPT_URL:需要获取的URL地址,也可以在curl_init()函数中设置。 | 
15 |      | 
16 |     	curl_setopt($curlHandle,CURLOPT_REFERER,$met_weburl); //CURLOPT_REFERER:在HTTP请求头中"Referer: "的内容。 | 
17 |      | 
18 |     	curl_setopt($curlHandle,CURLOPT_RETURNTRANSFER,1);// CURLOPT_RETURNTRANSFER:在启用CURLOPT_RETURNTRANSFER的时候,返回原生的(Raw)输出。 | 
19 |      | 
20 |     	curl_setopt($curlHandle,CURLOPT_CONNECTTIMEOUT,$timeout); //CURLOPT_CONNECTTIMEOUT:在发起连接前等待的时间,如果设置为0,则无限等待。 | 
21 |      | 
22 |     	curl_setopt($curlHandle,CURLOPT_TIMEOUT,$timeout); //CURLOPT_TIMEOUT:设置cURL允许执行的最长秒数。 | 
23 |     	 | 
24 |     	curl_setopt($curlHandle,CURLOPT_POST, 1); // CURLOPT_POST:启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。 | 
25 |      | 
26 |     	curl_setopt($curlHandle,CURLOPT_POSTFIELDS, $post); // CURLOPT_POSTFIELDS:全部数据使用HTTP协议中的"POST"操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串类似'para1=val1¶2=val2&...'或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data | 
27 |      | 
28 |     	$result=curl_exec($curlHandle); // 执行 | 
29 |      | 
30 |     	var_dump($result); | 
31 |     	curl_close($curlHandle);  | 
32 |      | 
33 |     	} | 

standard.php文件的代码:

1 | metinfo | 
2 | |
3 | <Met> | 
4 | |
5 |  | 
6 | |
7 | echo "Joseph"; | 
8 | |
9 |  | 
10 | |
11 | <Met> | 
12 | |
13 |  | 
14 | |
15 | echo "<?php phpinfo();?>"; | 
16 | |
17 |  | 
疑问:
这里为什么要有<Met>呢?  我也不饶圈子了下面是解答
解答:

完成,下面的很简单了,不用再讲了(不要问我为什么不自己审计一个,而是去分析别人的,我是不会告诉你我审计不出漏洞的)~