Авторские статьи Поддержка прокси в сплоитах на Perl LWP::UserAgent

Discussion in 'Статьи' started by 3er0, 8 Jun 2006.

  1. 3er0

    3er0 Banned

    Joined:
    31 Mar 2006
    Messages:
    29
    Likes Received:
    2
    Reputations:
    -2
    Для новичков

    Иногда, когда нет шела, нам, скрипт-кидисам, приходиться перловые сплоиты запускать со своего компа. Это довольно палевно и далеко не в каждом сплоите есть поддержка прокси. Но это поправимо!
    Я попробую показать как добавить в сплоит использующий LWP::UserAgent поддежку прокси. На примере.
    Возьмем к примеру скрипт EST Alienа, который показывает пароль любого юзера mailgate.ru, у которого не установлен вопрос/ответ.
    В самом начале строка
    Code:
    use LWP::UserAgent;
    
    LWP - LWP - The World-Wide Web library for Perl).
    LWP::UserAgent это интерфейс между перловым скриптом скриптом и сетью.
    теперь посмотрим 32 строку, там такой код:

    Code:
      $browser = LWP::UserAgent->new;
      $res=$browser->get($url); 
    
    ага, тут создаеися методом new() обьект LWP::UserAgent $browser, и отправляется запрос GET, запрашивающий предоставление ресурса с сервера-источника (у нас - $url). Т.е. этот кусок кода делает тоже самое, что и браузер в строке которого введено значение переменной url. Очень просто мы можем направить наш запрос через прокси, просто определив свовйство $browser вот так (для http прокси):

    Code:
    $browser->proxy(['http']=>"http://".$proxy_addr."/"); 
    
    $proxy_addr это наша прокся IP_адресс:порт
    перед ней указан нужный нам протокол, или несколько. Естественно нам нужен только http.
    ПОСЛЕ этого определения все действия совершаемые через $browser, будут направлены через проксик. Да, чуть не забыл, в http запросе (любом) есть поле Agent, определяет браузер клиента. В перле по умолчанию свойство $browser->agent = "libwww-perl/5.803" можно поменять на чтонибуть покрасивее:

    Code:
    #$ua->agent("Mozilla/5.0 (Windows; U; Windows NT 10.3; ru; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.4 Beta");
    
    А что? прикольно.
    Ну попробуем запустить. Работает? Должно. Если проксик жыв.. Но всеравно как-то стремно. Может случился мистический глюк и запрос не направляется через проки? Или прокси выдает нас с потрохами? Надо проверить...

    Напишем простенький скрипт, который будет сохранять на винт произвольную вэб-страница, URL которой мы скажем скрипту. Пусть этой страницей будет http://ip.xss.ru/header.php. Естественно получать страничку мы будем через прокси. А что сложного? срипт будет принимать 2 параметра: адрес запрашиваемого ресурса (URL) и IP_адресс:порт прокси-сервера.
    Code:
    use LWP::UserAgent;
    &header();
    
    if((@ARGV<1) or (@ARGV>2)){&usage;}
    $url=$ARGV[0];
    if(!$ARGV[1]){print "\n[!] NOT using proxy";}  [B]#определяем задан ли прокси-сервер[/B]
    else {$proxy_addr=$ARGV[1];}
    
    print "\n[~] Trying get page from ".$ARGV[0]."\n";
    
    $ua=LWP::UserAgent->new or die;		[B]#создаем новый объект LWP::userAgent (браузер)[/B]
    $ua->agent("Any funny text here :=|");	[B]#определяем свойства[/B]
    if($proxy_addr){			[B]#если в параметрах задан проксик,..[/B]
    	$ua->proxy('http',"http://".$proxy_addr."/"); [B]# ..используем его[/B]
    	print "[~] Using proxy ".$ARGV[1]."\n";   
    }
    
    $res = $ua->get($url) or die ;	[B]#направляем запрос..[/B]
    				[B]#..результат выпонения - в переменную $res[/B]
    
    $page=$res->content;	[B]#получаем html код странички..[/B]
    print "\n-------------------------------------------------\n";
    open(TMP,">1.html");
    print TMP $page;	[B]#..и сохраняем ф файл 1.html[/B]
    
    print $page;
    close(TMP);	
    
    sub header(){
    print q(
    -------------------------------------------------
    LWP::UserAgent get demo                  by 3eer0
    -------------------------------------------------)
    }
    sub usage(){
    print q(
    usage:
    	perl script.pl <url> <proxy>
    
    ex:	perl 1.pl http://ip.xss.ru/header.php 127.0.0.1:81 
    	[B]#да, это локальный прокси у меня Naviscope.[/B]
    or:	perl 1.pl http://ip.xss.ru/header.php - without proxy);
    exit(-1);
    }
    
    Выполняем. Теперь в нанем файле (1.html) страница сгенерированная сктиптом http://ip.xss.ru/header.php, к которому мы обратились через LWP::UserAgent, открываем 1.html Фаерфоксом (ну или еще чем-то) и видим результат проверки на анонимность нашей прокси. Если нигде не светится красным ;-) то все нормально, проксик боевой, иначе - ищи другой...
    Независимо от степени анонимности, используемого прокси, используя LWP::UserAgent не получится скрыть его(прокси) присутствие, т.к. Connection: TE, close , что значит наличие прокси. Connection: keep-alive- отсутствие прокси. Но наш адресс нигде не светится. Наверно этого достаточно для сплоета. Но не всегда...
    Если юзать локальный прокси, и тогда в исходниук сплоита достаточно добавить всего 1 строку после создания UserAgent обьекта, перед обращению к методам объекта:
    Code:
    $ua = LWP::UserAgent->new;
    $ua->proxy([http]=>"http://217.0.0.1:81/"); 
    $ua = $browser->get($url); 
    
    естественно в настойках локальной прокси уже вами установлен адресс анонимного прокси сервера.

    Вобщем нагрузил я вас, а мог бы всего эти две строчки строчки написать ;-)

    На этом я заканчиваю. Дальше - сами.

    Скрипты упомянутые в статье:
    скрипт EST Aliena
    скрипт EST Aliena с поддержкой прокси

    Совсем совсем новичкам:
    Perl с нуля. Часть первая. by Trampled_clover
     
    1 person likes this.
  2. [none]

    [none] Banned

    Joined:
    22 Nov 2009
    Messages:
    83
    Likes Received:
    26
    Reputations:
    -6
    спасибо :)
     
  3. shellz[21h]

    shellz[21h] Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    311
    Likes Received:
    68
    Reputations:
    6
    а не проще юзать proxifier? либо его аналоги.
    на лине:
    ]$ proxychains bash
     
  4. [none]

    [none] Banned

    Joined:
    22 Nov 2009
    Messages:
    83
    Likes Received:
    26
    Reputations:
    -6
    да проще (для тех кто перл плохо знает) :)