Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хакерский прокси на php и perl + ssl 
:(
    Опции темы
Igor22
Дата 10.3.2011, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 27.2.2008

Репутация: нет
Всего: нет



Привет всем! 

вообщем использую такой проксик http://www.xakep.ru/post/50594/

но он что то не обрабатывает протокол https (ssl)

вот оригиналы для наглядности 

Код


<?php

//$secret = 'pproxypass'; 

if(isset($_POST['query']) && isset($_POST['host'])) 

    if(isset($secret) && ($_POST['secret'] != $secret))exit; 
    header('Content-type: application/octet-stream'); 
    @set_time_limit(0); 
    $query = bаse 64_decode(str_replace(' ', '+', $_POST['query'])); 
    list($host, $port) = explode(':', bаse 64_decode($_POST['host'])); 
    if(!$port)$port = 80; 
    $ip = gethostbyname($host); 
    if($fp = @fsockopen($ip, $port, $errno, $errstr, 20))
    {
        fwrite($fp, $query);
        while(!feof($fp))
        {
            $answer = fread($fp, 1024);
            echo $answer;
        }
        fclose($fp);
    }
    exit; 
}
?>


Код

use HTTP::Daemon;
use MIME::bаse 64 ();
use Getopt::Long;
use POSIX ":sys_wait_h";
use strict;

my $user_agent = 'Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4';

my $errheader = "HTTP/1.1 200 OK\x0D\x0AContent-Type: text/plain\x0D\x0A\x0D\x0A";
my $errmsg1 = $errheader . 'Could not connect to server';
my $errmsg2 = $errheader . 'Could not connect to pproxy';

my ($pproxyhost, $pproxyport, $pproxyurl);
my ($tunnelhost, $tunnelport);
my ($pproxy, $bindport, $tunnel, $secret);
my ($destaddr, $destport, $desturl);

#Вывод справки
Usage() if @ARGV==0;

#Задание опций
GetOptions(
         "px=s"        => \$pproxy,
         "bp=s"    => \$bindport,
         "tpx=s"    => \$tunnel,
         "pwd=s"    => \$secret
     );
die "need pproxy.php url" unless $pproxy;


#Получение параметров
$pproxy =~ /http:\/\/([\w\.\-]+)(:\d*)?\/(.+)/;
$pproxyhost = $1; $pproxyport = substr($2, 1); $pproxyurl = '/' . $3;

defined($pproxyport) || ($pproxyport = 80);
defined($bindport) || ($bindport = 8008);

if(defined($tunnel))
{
    $tunnel =~ /http:\/\/([\w\.\-]+):(\d*)?/;
    $tunnelhost = $1; $tunnelport = $2;

    $destaddr = $tunnelhost;
    $destport = $tunnelport;
    $desturl = $pproxy;

    print "# tunnelhost = $tunnelhost\n";
    print "# tunnelport = $tunnelport\n";
}else{
    $destaddr = $pproxyhost;
    $destport = $pproxyport;
    $desturl = $pproxyurl;
}

print "# pproxyhost = $pproxyhost\n";
print "# pproxyport = $pproxyport\n";
print "# pproxyurl = $pproxyurl\n";
print "# bindport = $bindport\n\n";

$|=1;
my %children;
my $slave;

#Прием подключений
my $master = HTTP::Daemon->new(    LocalPort => $bindport,
                LocalAddr => 'localhost', 
                Reuse=>1)
|| die "Can't start server ($@)";
&MainProc($slave) while $slave = $master->accept;

sub MainProc
{
        my $conn = shift;

        #Прием HTTP-запроса
        my $request = $conn->get_request();
        
        #Ответвление процесса(потока)
        my $pid = fork();
        unless(defined($pid))
        {
            print "# Erorr couldn't fork\n";
            close $conn;
            return;
        }

        if($pid)
        {
            close $conn;
            $children{$pid}++;
            foreach(keys %children )
            {
                my $kid = waitpid($_, &WNOHANG);
                delete $children{$_} if($kid == -1 || $kid == $_);
            }
            return;
        }

        #Преобразование HTTP заголовка
        $request -> remove_header('Proxy-Connection');
        $request -> remove_header('Keep-Alive');
        $request -> header(Connection=>'close');
        my $host = $request -> header('Host');
        my $http = $request -> as_string();
        my $head_end = index ($http, "\x0A\x0A") + 2;
        my $head = substr ($http, 0, $head_end);
        my $post = substr ($http, $head_end);
        $head =~ s/\x0A/\x0D\x0A/g;
        $http = $head . $post;
        $http =~ s/http:\/\/$host//;
        my $time_start = time;
        
        #Отправка запроса прокси и прием результата
        SendToPProxy(    MIME::bаse 64::encode($host),
                MIME::bаse 64::encode($http),
                $conn
                    );

        my $time_end = time;
        
        #Лог
        print &TranslateTimeHour($time_end), "   ", $host,
            " (", &TranslateTime($time_end - $time_start),
            ")\n";

        close $conn;
        exit;
}

sub SendToPProxy
{
    my $dest_host = shift;
    my $query_content = shift;
    my $clientsock = shift;
    
    my $proxysock = IO::Socket::INET->new(Proto=>'tcp',PeerAddr=>$destaddr,PeerPort=>$destport);
    unless($proxysock)
    {
        syswrite($clientsock, $errmsg2, length($errmsg2));
        return; 
    }
    
    my $post_query;
    $post_query = 'secret=' . $secret . '&' if defined($secret);
    $post_query .= 'host=' . $dest_host . '&query=' . $query_content;
    my $postlen = length($post_query);

    my $request = "POST $desturl HTTP/1.0\x0D\x0A".
            "Host: $pproxyhost:$pproxyport\x0D\x0A".
            "Accept: */*\x0D\x0A".
            "Content-Type: application/x-www-form-urlencoded\x0D\x0A".
            "Content-Length: $postlen\x0D\x0A".
            "User-Agent: $user_agent\x0D\x0A".
            "Connection: close\x0D\x0A\x0D\x0A" . $post_query;

    syswrite($proxysock, $request, length($request));
    my ($result, $buffer, $response);
    my $contentstart = -1;
    my $count = 0;
    while(1)
    {
        $result = sysread($proxysock, $buffer, 1024);
        last if !defined($result) || !$result;

        if($contentstart == -1)
        {
            $response .= $buffer;
            last if length($response)>65535;
            $contentstart = index($response,"\x0D\x0A\x0D\x0A");
            next if $contentstart == -1;
            $buffer = substr($response, $contentstart+4);
        }
        $count += length($buffer);
        syswrite($clientsock, $buffer, length($buffer));
    }
    syswrite($clientsock, $errmsg1, length($errmsg1)) if $count == 0;
    close $proxysock;
}

sub TranslateTime
{
    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(shift);
    return sprintf "%02u:%02u", $min, $sec;
}

sub TranslateTimeHour
{
    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(shift);
    return sprintf "%02u:%02u:%02u", $hour, $min, $sec;
}

sub Usage
{
    print "Usage: $0 -px proxy_url [-bp bindport] [-tpx tunnel_proxy] [-pwd secret]\n";
    print "Example: $0 -px http://site.com/proxy/proxy.php -bp 8080\n";
    print "         $0 -px http://site.com/proxy/proxy.php -pwd pproxypass\n";
    print "         $0 -px http://site.com/proxy/proxy.php -tpx http://localhost:8118\n";
    print "\nDefault bind port - 8008\n";
    exit;
}



как сделать что бы он обрабатывал и https протакол ???
PM MAIL   Вверх
Igor22
Дата 11.3.2011, 04:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 27.2.2008

Репутация: нет
Всего: нет



что то тут я не понимаю

я запрашиваю страницу  https://security.webmoney.ru/

браузер создает заголовок :

Код

CONNECT http://security.webmoney.ru:443 HTTP/1.0
Connection: close
Host: security.webmoney.ru:443
User-Agent: Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.7.62 Version/11.01


-> и отрпавляет его проксику -> проксик отправлят его php скрипту

я вообщем сделал что бы проксик скачаивал страницу 
подставив туда вот так ssl:// : ssl://security.webmoney.ru/

возвращается страница 

Код

HTTP/1.1 302 Object moved
Connection: close
Date: Fri, 11 Mar 2011 01:43:58 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Location: [URL=https://security.webmoney.ru/asp/default.asp]https://security.webmoney.ru/asp/default.asp[/URL]
Content-Length: 165
Content-Type: text/html
Cache-control: private


но связи не получилось!!!

я так понял ошибка в том что я не правильно возвращаю ответ от php...


Это сообщение отредактировал(а) Igor22 - 11.3.2011, 04:55
PM MAIL   Вверх
Igor22
Дата 15.3.2011, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 27.2.2008

Репутация: нет
Всего: нет



up
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.1121 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.