🧪 Jak uruchomi膰 shellcode?
IT Security & Ethical hacking


Agent_Smith
00:18 23-05-2020
0 ×
Zobacz profil
 Napisane 3 dni temu (23 maja 2020 o godz. 00:25:44) przez Agent_Smith
Rozumiem, 偶e kod nazywany jako shellcode to ci膮g bajt贸w w kt贸rych zakodowane s膮 instrukcje procesora.
Zak艂adaj膮c, 偶e posiadam shellcode w postaci bajt贸w (hex) to:

  • W jaki spos贸b mog臋 go uruchomi膰 w celach zbadania?
  • Jak odtworzy膰 kod Asemblera z bajt贸w shellcode?
  • Jak zakodowa膰 instrukcje Asemblera, aby powsta艂 shellcode?

Pozdrawiam, Agent_Smith.

Dave
13:02 26-05-2020
4 ×
Zobacz profil
 Napisane ponad 8 godzin temu (26 maja 2020 o godz. 13:38:40) przez Dave

W jaki spos贸b mog臋 uruchomi膰 shellcode w celach zbadania?

Gdy mamy zakodowany ci膮g instrukcji procesora mo偶emy wstawi膰 go do tablicy bajt贸w np. w programie stworzonym w Visual C++ i wywo艂a膰 tak jakby to by艂a funkcja. Dzia艂anie poni偶szego kodu polega w skr贸cie na ustawieniu tablicy bajt贸w atrybutu, kt贸ry pozwala na wykonywanie (funkcja VirtualProtect). Nale偶y to zrobi膰 z powodu zabezpieczenia, kt贸re nazywa si臋 Data Execution Prevention, czyli zapobieganie wykonywaniu danych. Nast臋pnie jest rzutowanie ci膮gu bajt贸w na wska藕nik na funkcj臋 i wywo艂anie. Oczywi艣cie przedstawiony dla przyk艂adu shellcode nie robi nic konkretnego. S膮 to cztery instrukcje NOP (skr贸t od No Operation) oraz instrukcja powrotu RET (skr贸t od Return). Warto艣膰 0x90 jest tutaj kodem operacyjnym (w skr贸cie opkod) dla instrukcji NOP. A warto艣膰 0xC3 jest opkodem instrukcji RET. Ka偶dy rozkaz procesora ma odpowiednie kodowanie. Reprezentacja tekstowa rozkazu (okre艣lana jako mnemonik) taka jak np. NOP jest kodowana jako okre艣lona warto艣膰, tutaj 0x90.
#include <Windows.h>

BYTE shellcode[] = { 0x90, 0x90, 0x90, 0x90, 0xC3 };

int main()
{
    SIZE_T dwSize = sizeof shellcode;
    DWORD dwOldProtect = NULL;

    VirtualProtect(shellcode, dwSize, PAGE_EXECUTE_READWRITE, &dwOldProtect);
    VOID(*RunMyShellcode)() = (VOID(*)()) &shellcode;

    RunMyShellcode();

    return EXIT_SUCCESS;
}
W celu zbadania jak i czy poprawnie wykonywany jest zdefiniowany shellcode nale偶y powy偶szy kod uruchomi膰 pod narz臋dziem typu debugger.

Jak odtworzy膰 kod Asemblera z bajt贸w shellcode?

Jednym ze sposob贸w mo偶e by膰 uruchomienie shellcode pod debuggerem. Poni偶ej przyk艂ad dla debuggera x64dbg.



Jak zakodowa膰 instrukcje Asemblera, aby powsta艂 shellcode?

Nale偶y napisa膰 odpowiedni kod w j臋zyku Asembler, a nast臋pnie zbudowa膰 go, aby powsta艂 plik wykonywalny *.exe. Otwieraj膮c powsta艂y plik w edytorze szesnastkowym (heksadecymalnym, ang. hex editor) mo偶emy wyodr臋bni膰 bajty, kt贸re potrzebujemy.

Ten wpis jest warto艣ciowy dla 1 i wi臋cej u偶ytkownik贸w

Pozdrawiam, Dave.

© 2020 by haker.com.pl. Wszelkie prawa zastrze偶one.

Wszystkie tre艣ci umieszczone na tej witrynie s膮 chronione prawem autorskim. Surowo zabronione jest kopiowanie i rozpowszechnianie zawarto艣ci tej witryny bez zgody autora. Wszelkie opublikowane tutaj tre艣ci (w tym kody 藕r贸d艂owe i inne) s艂u偶膮 wy艂膮cznie celom informacyjnym oraz edukacyjnym. W艂a艣ciciele tej witryny nie ponosz膮 odpowiedzialno艣ci za ewentualne niezgodne z prawem wykorzystanie zasob贸w dost臋pnych w witrynie. U偶ytkownik tej witryny o艣wiadcza, 偶e z zamieszczonych tutaj danych korzysta na w艂asn膮 odpowiedzialno艣膰. Wszelkie znaki towarowe i nazwy zastrze偶one zosta艂y u偶yte jedynie w celach informacyjnych i nale偶膮 wy艂膮cznie do ich prawnych w艂a艣cicieli. Korzystaj膮c z zasob贸w witryny haker.com.pl o艣wiadczasz, 偶e akceptujesz powy偶sze warunki oraz polityk臋 prywatno艣ci.