Для новичков
Иногда, когда нет шела, нам, скрипт-кидисам, приходиться перловые сплоиты запускать со своего компа. Это довольно палевно и далеко не в каждом сплоите есть поддержка прокси. Но это поправимо!
Я попробую показать как добавить в сплоит использующий
LWP::UserAgent поддежку прокси. На примере.
Возьмем к примеру скрипт EST Alienа, который показывает пароль любого юзера mailgate.ru, у которого не установлен вопрос/ответ.
В самом начале строка
LWP -
LWP - The World-Wide Web library for Perl).
LWP::UserAgent это интерфейс между перловым скриптом скриптом и сетью.
теперь посмотрим 32 строку, там такой код:
Код:
$browser = LWP::UserAgent->new;
$res=$browser->get($url);
ага, тут создаеися методом new() обьект
LWP::UserAgent $browser, и отправляется запрос GET, запрашивающий предоставление ресурса с сервера-источника (у нас - $url). Т.е. этот кусок кода делает тоже самое, что и браузер в строке которого введено значение переменной url. Очень просто мы можем направить наш запрос через прокси, просто определив свовйство $browser вот так (для http прокси):
Код:
$browser->proxy(['http']=>"http://".$proxy_addr."/");
$proxy_addr это наша прокся IP_адресс:порт
перед ней указан нужный нам протокол, или несколько. Естественно нам нужен только http.
ПОСЛЕ этого определения все действия совершаемые через $browser, будут направлены через проксик. Да, чуть не забыл, в http запросе (любом) есть поле Agent, определяет браузер клиента. В перле по умолчанию свойство $browser->agent = "libwww-perl/5.803" можно поменять на чтонибуть покрасивее:
Код:
#$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_адресс:порт прокси-сервера.
Код:
use LWP::UserAgent;
&header();
if((@ARGV<1) or (@ARGV>2)){&usage;}
$url=$ARGV[0];
if(!$ARGV[1]){print "\n[!] NOT using proxy";} #определяем задан ли прокси-сервер
else {$proxy_addr=$ARGV[1];}
print "\n[~] Trying get page from ".$ARGV[0]."\n";
$ua=LWP::UserAgent->new or die; #создаем новый объект LWP::userAgent (браузер)
$ua->agent("Any funny text here :=|"); #определяем свойства
if($proxy_addr){ #если в параметрах задан проксик,..
$ua->proxy('http',"http://".$proxy_addr."/"); # ..используем его
print "[~] Using proxy ".$ARGV[1]."\n";
}
$res = $ua->get($url) or die ; #направляем запрос..
#..результат выпонения - в переменную $res
$page=$res->content; #получаем html код странички..
print "\n-------------------------------------------------\n";
open(TMP,">1.html");
print TMP $page; #..и сохраняем ф файл 1.html
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
#да, это локальный прокси у меня Naviscope.
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 обьекта, перед обращению к методам объекта:
Код:
$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