[ Pobierz całość w formacie PDF ]

zostać wyrównana wartość zmiennej odpowiadającej specyfikatorowi definiowana
jest parametrem wywołania (funkcja odczytuje długość wypełnienia ze stosu).
Parametr ten musi być liczbą całkowitą. Każda gwiazdka powoduje więc  połknięcie
4 kolejnych bajtów stosu. Ostateczna długość interpretowanej wartości może być
jednak zastąpiona przez liczbę określoną bezpośrednio przed właściwym
specyfikatorem. Przykładowo, specyfikator spowoduje wyświetlenie
przez funkcję wartości zmiennej całkowitej, reprezentowanej za pomocą dziesięciu
znakach. Jednakże wartość tej zmiennej zostanie odczytana spod adresu
przesuniętego o 32 bajty. Pierwsze zastosowanie tej techniki przypisuje się
niejakiemu lorianowi.
Odwoływać się bezpośrednio do parametrów  możliwe jest zmuszenie funkcji
do odwoływania się wyłącznie do określonych parametrów. Służą
do tego specyfikatory formatujÄ…ce postaci , gdzie jest numerem parametru
(licząc od 1). Technikę tę można stosować jedynie na platformach wyposażonych
w bibliotekę C obsługującą ciągi formatujące z bezpośrednim dostępem
do parametrów.
Jeżeli nawet za pomocą omówionych wyżej trików nie uda się  dosięgnąć adresu  za-
szytego w ciągu formatującym, atakujący powinien przeanalizować kod procesu w ce-
lu określenia, czy gdziekolwiek w pamięci znajduje się obszar stosu, w którym można
by umieścić adres. Należy bowiem pamiętać, że adres niekoniecznie musi być osadzony
w ciągu formatującym, choć jest to wygodne, gdy ciąg ten alokowany jest w odpowied-
nim obszarze stosu. Atakujący może przecież przekazać na wejście programu nie tylko
ciąg formatujący. W przypadku wspomnianego programu Screen atakujący miał na przy-
kład dostęp do zmiennej konstruowanej na podstawie zmiennej środowiskowej .
Ciąg ten był przechowywany na stosie w łatwiej dostępnym miejscu.
308 Hack Proofing Your Network. Edycja polska
W tym przykÅ‚adzie klient odczytaÅ‚ jedno, dwa, trzy a nast¹pnie cztery sÅ‚owa pami¹ci
stosu. Wydruk wynikowy zostaÅ‚ sformatowany tak, że nadaje si¹ do automatycznej anali-
zy przez program atakujący. Prawidłowo skonstruowany program atakujący może wy-
korzystać odpowiedzi serwera do rekonstrukcji pełnej zawartości stosu procesu serwera.
Program taki mógÅ‚by odczytywać zawartość pami¹ci stosu aż do momentu napotkania
na stosie samego ciągu formatującego i na tej podstawie obliczyć pożądaną lokaliza-
cj¹ specyfikatora w ciÄ…gu formatujÄ…cym.
W tym przykÅ‚adzie klient zmusiÅ‚ funkcj¹ do przeszukania dużego obszaru sto-
su tak, aby atakujący mógł określić położenie na stosie ciągu formatującego. Wytłusz-
czone znaki to pierwsze znaki przekazanego do serwera ciÄ…gu formatujÄ…cego,
zawierajÄ…cego przetworzone przez funkcj¹ specyfikatory formatu. Jeżeli ata-
kujący osadzi na początku ciągu formatującego adres, może, wstawiając w miejsce spe-
cyfikatorów element , wymusić zapis pod adresem pami¹ci przekazanym w ciÄ…gu
formatujÄ…cym.
Atak z użyciem ciągu formatującego
Jesteśmy już gotowi do przeprowadzenia ataku wykorzystującego ciąg formatujący.
W przypadku takiego programu jak rwhoisd celem włamywacza jest wymuszenie wy-
konania przez zdalny komputer podsuni¹tego przez siebie kodu. Kod ten powinien dać
atakujÄ…cemu dost¹p do atakowanego komputera.
Prezentowany tu exploit zostanie napisany dla demona rwhoisd 1.5.7.1 kompilowanego
na platformie Linux i386. Program ten badany był w poprzednich punktach. Jak już
wspomniano, aby wykonać podstawiony kod, exploit musi nadpisać wartość, do której
atakowany proces odwoÅ‚uje si¹ pózniej jako do adresu kolejnej instrukcji do wykonania.
W prezentowanym exploicie adres powrotny funkcji nadpisywany b¹dzie adresem  prze-
myconego kodu. Kod ten b¹dzie realizowaÅ‚ wywoÅ‚anie , co spowoduje
udost¹pnienie klientowi powÅ‚oki w atakowanym systemie.
Najpierw program atakujący powinien nawiązać połączenie z usługą i spróbować
okreÅ›lić lokalizacj¹ ciÄ…gu formatujÄ…cego na stosie. Program atakujÄ…cy zrealizuje to
poprzez nawiązanie wielokrotnie połączenia z usługą i przekazanie do niej ciągu for-
matującego zwracającego kolejne słowa stosu procesu zdalnego. Funkcja realizująca
Rozdział 9. f& Ciągi formatujące 309
ten fragment programu nosić b¹dzie nazw¹ . Funkcja ta b¹dzie wysyÅ‚ać
do serwera ciÄ…gi formatujÄ…ce powodujÄ…ce zwracanie przez serwer coraz wi¹kszych
obszarów pami¹ci stosu. Nast¹pnie każde pozyskane sÅ‚owo stosu b¹dzie porównywa- [ Pobierz caÅ‚ość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • skierniewice.pev.pl
  •