Chciałbym wypróbować niektóre kody powłoki i chcę wyłączyć zabezpieczenia linux.
Wiem, że mogłem skompilować przy użyciu flag, ale wiem, że istnieje inny sposób na wyłączenie tych zabezpieczeń, których po prostu nie pamiętam. Możesz mi pomóc?
Ochrona stosu jest wykonywana przez kompilator (dodaj dodatkowe dane do stosu i ukryj niektóre podczas połączenia, sprawdź zdrowie psychiczne po powrocie). Nie można tego wyłączyć bez ponownej kompilacji. To część tego, naprawdę ...
Aby rozwinąć to, co powiedział vonbrand (poprawnie +1), ochrona stosu Linuksa składa się z dwóch części.
Układaj kanarki
Kanarki stosowe to wymuszona przez kompilator funkcja, o której mówi vonbrand. Nie można ich wyłączyć bez ponownej kompilacji.
Aby to sobie udowodnić i zobaczyć, jak działają, pobierz następujący kod:
Teraz skompiluj to (
gcc -fstack-protector -masm=intel -S test.c
) w coś gnu, co chętnie skompletuje i przeczyta wynik. Ważną kwestią jest to, że przy wyjściu zmybadfunction
funkcji jest ten mały fragment kodu:Jak można się domyślić, bierze się plik cookie stosu
[ebp-12]
i porównuje go z wartością atgs:20
. Nie pasuje Następnie wywołuje funkcję__stack_chk_fail
w glibc, która zabija twój program właśnie tam.Istnieją sposoby na obejście tego w zakresie pisania exploitów, ale najłatwiejszym sposobem na zbudowanie testowego kodu powłoki jest kompilacja programu
-fno-stack-protector
.Strony niewykonywalne
Istnieje kilka innych uwag na temat nowoczesnych systemów Linux. Jeśli weźmiesz zwykły kod testowy powłoki:
nowoczesny GCC / Linux zamapuje
.rodata
sekcję pliku PE tylko do odczytu bez uprawnień do wykonywania. Musisz to wyłączyć, co można zrobić za pomocą próbki kodu z tego postu na blogu . Podstawowy pomysł:mprotect
dodajesz odpowiednie uprawnienia do stron, na których znajdują się dane kodu powłoki.Niewykonalne stosy
Jeśli zamierzasz przetestować tradycyjny scenariusz wykorzystania, np. Mój zły kod powyżej, z twoim kodem powłoki, musisz także upewnić się, że stos jest wykonywalny dla prostych przypadków. Format pliku PE zawiera pole do określania, czy stos jest wykonywalny - możesz to sprawdzać i kontrolować za pomocą execstack . Aby włączyć plik wykonywalny, uruchom
To może być wykonane na dowolnych programów bez konieczności ponownej kompilacji, ale nie będzie się automatycznie wyłączać kanarki stos jak te są pieczone w na kompilacji.
Dodano bonus: aslr:
Aby to wyłączyć,
echo 0 > /proc/sys/kernel/randomize_va_space
.Czy właśnie powiedziałeś komuś, jak wykorzystać mojego cennego pingwina?
Nie. Każdy exploit musi obejść kanary stosów (bardzo mało trywialne) i albo znaleźć program z
execstack
setem, albo ustawić go (co oznacza, że i tak może już wykonywać dowolne polecenia), albo użyć trudniejszych technik, takich jak powrót do libc / return programowanie zorientowane.źródło
Za pomocą tych opcji można wyłączyć niektóre zabezpieczenia (wykrywanie zniszczenia stosu i uczynienie stosu wykonywalnym).
Możesz także wyłączyć ASLR (randomizacja układu przestrzeni adresowej) za pomocą Bash za pomocą polecenia:
źródło