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 Position Independent Executable, 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żywany, 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 trafić 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ś leaku, 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 NX stack** uniemożliwi wykonanie shellcode wewnątrz stosu, ponieważ ten obszar nie będzie wykonywalny.
64bit, ASLR z wyciekiem adresu stosu, zapisz shellcode i przeskocz do niego
32 bit, ASLR z wyciekiem stosu, zapisz shellcode i przeskocz do niego
32 bit, ASLR z wyciekiem 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)