Stack Shellcode
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Stack shellcode to technika używana w binary exploitation, w której atakujący zapisuje shellcode na stosie podatnego programu, a następnie modyfikuje Instruction Pointer (IP) lub Extended Instruction Pointer (EIP), aby wskazywał na lokalizację tego shellcode, co powoduje jego wykonanie. Jest to klasyczna metoda używana do uzyskania nieautoryzowanego dostępu lub wykonania dowolnych poleceń na docelowym systemie. Oto podział procesu, w tym prosty przykład w C oraz sposób, w jaki można napisać odpowiadający exploit w Pythonie z użyciem pwntools.
Zacznijmy od prostego przykładu podatnego programu w C:
Ten program jest podatny na przepełnienie bufora z powodu użycia funkcji gets()
.
Aby skompilować ten program, wyłączając różne zabezpieczenia (aby zasymulować podatne środowisko), możesz użyć następującego polecenia:
-fno-stack-protector
: Wyłącza ochronę stosu.
-z execstack
: Umożliwia wykonanie kodu na stosie, co jest konieczne do uruchomienia shellcode przechowywanego na stosie.
-no-pie
: Wyłącza niezależny od pozycji plik wykonywalny, co ułatwia przewidywanie adresu pamięci, w którym będzie znajdować się nasz shellcode.
-m32
: Kompiluje program jako 32-bitowy plik wykonywalny, często używany dla uproszczenia w rozwoju exploitów.
Oto jak można napisać exploit w Pythonie używając pwntools do przeprowadzenia ataku ret2shellcode:
Ten skrypt konstruuje ładunek składający się z NOP slide, shellcode i następnie nadpisuje EIP adresem wskazującym na NOP slide, zapewniając, że shellcode zostanie wykonany.
NOP slide (asm('nop')
) jest używane, aby zwiększyć szansę, że wykonanie "zsunie się" do naszego shellcode niezależnie od dokładnego adresu. Dostosuj argument p32()
do początkowego adresu twojego bufora plus offset, aby wylądować w NOP slide.
ASLR powinno być wyłączone, aby adres był wiarygodny w różnych wykonaniach, w przeciwnym razie adres, w którym funkcja będzie przechowywana, nie zawsze będzie taki sam i potrzebowałbyś jakiegoś leak, aby dowiedzieć się, gdzie załadowana jest funkcja win.
Stack Canaries również powinny być wyłączone, w przeciwnym razie skompromitowany adres zwrotu EIP nigdy nie będzie śledzony.
Ochrona stack NX uniemożliwi wykonanie shellcode wewnątrz stosu, ponieważ ten obszar nie będzie wykonywalny.
64bit, ASLR z leak adresu stosu, zapisz shellcode i przeskocz do niego
32 bit, ASLR z leak stosu, zapisz shellcode i przeskocz do niego
32 bit, ASLR z leak stosu, porównanie, aby zapobiec wywołaniu exit(), nadpisz zmienną wartością i zapisz shellcode oraz przeskocz do niego
arm64, brak ASLR, gadżet ROP, aby uczynić stos wykonywalnym i przeskoczyć do shellcode w stosie
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)