Podstawy skryptów shell #4
Napisał: Patryk Krawaczyński
30/08/2017 w Bezpieczeństwo Możliwość komentowania Podstawy skryptów shell #4 została wyłączona
W
kolejnej części naszej serii [ 1 ] [ 2 ] [ 3 ] zajmiemy się atakami związanymi z uwierzytelnianiem. Zaczniemy od tezy, że nie należy polegać na skryptach, aby ustalać, czy użytkownik ma lub nie ma uprawnień do danej czynności. Jest to możliwe, jednak istnieją dobre i złe strony takiego rozwiązania. Za przykład posłuży nam skrypt:
#!/bin/bash if [ $UID = 0 -a $USER = "root" ] ; then echo "Jesteś administratorem zapraszam do domu." echo $HOME fi
Kod ten zawiera trzy błędy bezpieczeństwa i wszystkie są spowodowane używaniem zmiennych. Mimo, że bash chroni przed modyfikacją zmienną $UID
to już $USER
jest niezabezpieczona. No i kto powiedział, że inne powłoki chronią zmienną $UID
?
root@darkstar:/home/agresor# ./test.sh Jesteś administratorem zapraszam do domu. /root root@darkstar:~#
Skrypt działa poprawnie dla konta administratora. Przeprowadźmy teraz atak za pomocą zwykłego użytkownika:
agresor@darkstar:~$ ./test.sh agresor@darkstar:~$ # Niestety nic z tego, ale... agresor@darkstar:~$ tcsh darkstar:~> setenv UID 0 darkstar:~> setenv USER root darkstar:~> setenv HOME /tmp darkstar:/home/agresor> /bin/bash test.sh Jesteś administratorem zapraszam do domu. /tmp
Jeśli ewentualnie chcemy pozyskać informacje o użytkowniku powinniśmy wykorzystać polecenie id:
# Prawdziwy UID USRUID="$(/usr/bin/id -u -r)" # Efektywny UID USEUID="$(/usr/bin/id -u)" # Nazwa użytkownika USNUID="$(/usr/bin/id -u -n)"
Na szczęście powyższy skrypt operował tylko wyświetlaniem komunikatów za pomocą echo
. W połączeniu z innym możliwym atakiem (wstrzykiwania) można te błędy wykorzystać w bardziej zły sposób.
Więcej informacji: TCSH / CSH Shell Set PATH Variable, Shell Script Security
Ostatni komentarz :