index

















Dawid Gołuński
Restrykcyjne powłoki
jak je obejść?

Spis treści

1. Wstęp

2. Utworzenie środowiska restrykcyjnego za pomocą skryptu create_restrictions.sh

3. Zapoznanie się ze środowiskiem z punktu widzenia użytkownika ruser

4. Sprawdzenie jakie programy zewnętrzne, zostały nam przyznane przez administratora

5. Wykorzystanie powłoki (shell escape) i programu telnet do uruchomienia nieprzyznanych nam programów

6. Korzystanie z niedostępnych programów za pomocą ładowania zewnętrznych bibliotek przez systemowy linker/loader
ld.so





1. Wstęp
W tym tutorialu postaramy się wydostać z restrykcyjnego środowiska, utworzonego za pomocą powłoki rbash. Skorzystamy z metod, opisanych w numerze 8/2006 hakin9.


2. Utworzenie środowiska restrykcyjnego

Pierwszym krokiem będzie utworzenie takiego środowiska za pomocą przygotowanego skryptu create_restrictions.sh
Otwieramy terminal, przełączamy się na użytkownika root
$ su
oraz uruchamiamy skrypt bez żadnych parametrów:
# create_restrictions.sh
Zostaniemy zapytani o hasło, jakie chcemy nadać użytkownikowi ruser. Po (dwukrotnym) podaniu hasła powinniśmy otrzymać komunikat:
Restrykcyjne srodowisko dla uzytkownika ruser zostalo utworzone.
wraz z i informacjami o utworzonym przed chwilą koncie. I to wszystko, od tej chwili powinniśmy być w stanie zalogować się do systemu jako użytkownik ruser za pomocą ssh.
# ssh -lruser localhost
-rbash-3.1$
Jak widać, po zalogowaniu otrzymaliśmy restrykcyjną powłokę
rbash. Aby się przekonać, wydajemy kilka zakazanych komend:
-rbash-3.1$ cd /etc
-rbash: cd: restricted
-rbash-3.1$ export PATH=/bin
-rbash: PATH: readonly variable
-rbash-3.1$ cd ..
-rbash: cd: restricted
-rbash-3.1$ /bin/ls
-rbash: /bin/ls: restricted: cannot specify `/' in command names
-rbash-3.1$ echo test >.bash_profile
-rbash: .bash_profile: restricted: cannot redirect output
-rbash-3.1$





3. Zapoznanie się ze środowiskiem


Spróbujmy trochę lepiej poznać środowisko w jakim się znaleźliśmy
z punktu widzenia użytkownika ruser. Jaki katalog został nam przydzielony? Wydajemy (wewnętrzną) komendę pwd:
-rbash-3.1$ pwd
-rbash: pwd: command not found
Jak widać, została ona wyłączona. Zamiast polecenia pwd możemy użyć zmiennych środowiskowych PWD oraz HOME:

-rbash-3.1$ echo $HOME
/home/ruser
-rbash-3.1$ echo $PWD
/home/ruser





4. Programy zewnętrzne



Wiemy już w jakim katalogu się znaleźliśmy. Sprawdźmy teraz, jakie programy zewnętrzne, zostały nam przyznane przez administratora.

-rbash-3.1$ echo $PATH
/usr/local/rbin
-rbash-3.1$ ls -l /usr/local/rbin
-rbash: ls: command not found
Nasz katalog przeszukiwania aplikacji (PATH) zawężony został do katalogu /usr/local/rbin. Możemy wykonywać jedynie programy w nim zawarte (nie licząc poleceń wewnętrznych powłoki). W jaki sposób wylistować ten katalog
skoro nie posiadamy dostępu do komendy ls ? Tutaj również z pomocą przychodzi poleceniem echo:
-rbash-3.1$ echo /usr/local/rbin/*
/usr/local/rbin/cal /usr/local/rbin/telnet
Jak widzimy, jedyne programy jakie zostały nam przyznane to cal oraz telnet. Niewiele, ale nawet taka ilość programów może okazać się wystarczająca do wyjścia z pułapki.




5. Wykorzystanie powłoki


Próba pierwszaWiemy, że niektóre aplikacje pozwalają odwołać się do powłoki (shell escape). Program telnet oferuje taką możliwość. Dlatego spróbujemy uruchomić z jego poziomu kilka (nie przyznanych nam) programów. Uruchamiamy program telnet bez parametrów:
Następnie próbujemy uruchomić aplikacje ls i bash używając instrukcji ! (shell escape):

telnet> ! /bin/ls
rbash: /bin/ls: restricted: cannot specify `/' in command names
telnet> ! /bin/bash
rbash: /bin/bash: restricted: cannot specify `/' in command names

Nic z tego. Telnet uruchamia nasze polecenia w oparciu o powłokę rbash, która zdefiniowana jest w zmiennej SHELL. Co możemy potwierdzić pisząc:
telnet> ! echo $SHELL
/bin/rbash
Czy możemy w jakiś sposób temu zaradzić? A dokładniej, nadpisać zmienną SHELL ścieżką do powłoki bash, tak by telnet wykonał nasze komendy w oparciu o nią?
Możemy spróbować utworzyć plik environmnet (zawierający definicję zmiennej SHELL) w podkatalogu .ssh (katalogu domowego). Z drugiego (nieograniczonego) konta piszemy:
# echo 'SHELL=/bin/bash' >environment
W bieżącym katalogu otrzymujemy plik environment zawierający interesujące nas przypisanie. Pozostaje wgrać ten plik na konto ruser. Z powodu tego, że w pliku /etc/shells nie znajduje się wpis /bin/rbash
użytkownik ruser, nie posiada możliwości zalogowania się poprzez FTP. Dlatego do transferu pliku wykorzystamy scp:
# scp environment ruser@localhost:.ssh/environment
ruser@localhost's password:
scp: .ssh/environment: Permission denied
#

Wyszukiwarka

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

więcej podobnych podstron