Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Хакерский прокси на php и perl + ssl

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> Хакерский прокси на php и perl + ssl
Имя
Сообщение << Старые топики   Новые топики >>
Хакерский прокси на php и perl + ssl - 2011-03-10 13:11:38.740000   
codeGold

Сообщений: 6
Оценки: 0
Присоединился: 2010-12-18 14:14:17.593333
Привет всем!

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

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

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

&lt;?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; } ?&gt;
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" =&gt; \$pproxy, "bp=s" =&gt; \$bindport, "tpx=s" =&gt; \$tunnel, "pwd=s" =&gt; \$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-&gt;new( LocalPort =&gt; $bindport, LocalAddr =&gt; 'localhost', Reuse=&gt;1) || die "Can't start server ($@)"; &MainProc($slave) while $slave = $master-&gt;accept; sub MainProc { my $conn = shift; #Прием HTTP-запроса my $request = $conn-&gt;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 -&gt; remove_header('Proxy-Connection'); $request -&gt; remove_header('Keep-Alive'); $request -&gt; header(Connection=&gt;'close'); my $host = $request -&gt; header('Host'); my $http = $request -&gt; 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-&gt;new(Proto=&gt;'tcp',PeerAddr=&gt;$destaddr,PeerPort=&gt;$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)&gt;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 протакол ???
Post #: 1
RE: Хакерский прокси на php и perl + ssl - 2011-03-11 04:56:27.980000   
codeGold

Сообщений: 6
Оценки: 0
Присоединился: 2010-12-18 14:14:17.593333
что то тут я не понимаю

я запрашиваю страницу 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: https://security.webmoney.ru/asp/default.asp Content-Length: 165 Content-Type: text/HТМL Cache-control: private
но связи не получилось!!!

я так понял ошибка в том что я не правильно возвращаю ответ от php…
Post #: 2
RE: Хакерский прокси на php и perl + ssl - 2011-03-15 11:28:00.386666   
codeGold

Сообщений: 6
Оценки: 0
Присоединился: 2010-12-18 14:14:17.593333
up
Post #: 3
Страниц:  [1]
Все форумы >> [Веб-программинг] >> Хакерский прокси на php и perl + ssl







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.