jakubk64@home:~$

handy-shellcode (picoCTF2019)

Opis

useful image

Rozwiązanie

Po przejściu do wskazanej lokalizacji znajdujemy plik “flag.txt” zawierający nasz flagę, do którego odczytania nie mamy uprawnień. Dodatkowo znajdujemy pewien program oraz jego kod źródłowy w języku C:

useful image

Przejdźmy do analizy działania programu. Kod źródłowy programu jest bardzo prosty. Program po uruchomieniu oczekuje na wpisanie pewnych instrukcji używając funkcji vuln (nr.1, wywołanie w 27 linijce) a następnie próbuje wykonać wprowadzoną przez nas instrukcję (nr.2). Po wykonaniu program kończy swoje działanie.

useful image

useful image

Celem zadanie jest spowodowanie, aby program nie zakończył swojego działania po wykonaniu wprowadzonej przez nas instrukcji. W tym celu możemy wykorzystać gotowy shellcode, których wiele dostępnych jest w sieci. Musimy tylko poznać architekturę. W tym celu w konsoli (shellu na serwerze)używamy polecenia:

file vuln

3 interesujące nas parametry to 32 bitowy system, Linux, Intel:

useful image

Wpisanie gotowego kodu do programu bądź utworzenie potoku ze znalezionym kodem nie daje pozytywnego rezultatu. Kod jest poprawnie wykonywany, ale program po wykonaniu go kończy swoje działanie:

useful image

Rozwiązaniem tego problemu jest zapiwanie polecenia echo z kodem do pliku tekstowego za pomocą polecenia:

echo -e '[kod]' > [ścieżka pliku]

Następnie za pomocą potoku przekierowujemy odczytanie zawartości pliku na wejście programu za pomocą:

cat [ścieżka pliku] - | ./vuln

W ten sposób otrzymujemy oczekiwany rezultat, program nie zamyka się po wykonaniu wpisanego przez nas kodu. Mamy wiec swobodny dostęp do zawartości katalogu, w którym znajduje się program. Dla pewności sprawdzamy zawartość katalogu za pomocą:

ls -l

A następnie korzystając z tego, że program ma uprawnienia do odczytania pliku tekstowego z flagą odczytujemy z niego flagę:

cat flag.txt

useful image

picoCTF{h4ndY_d4ndY_sh311c0d3_0b440487}