Szybki pentest popularnej dystrybucji Linux
hejto.plSzybkie spojrzenie na błędy w popularnej dystrybucji Linux. Na tą chwilę tylko jeden mały skrypt, bo muszę iść zaraz spać. Pokaże Wam jak się przeprowadza pentesty, inni za to płacą a tu będzie darmowy pokaz.
Pod artykułem: https://www.hejto.pl/wpis/linux-mint-live-usb odpowiadałem na to dlaczego hejtuje ten system i uważam go za słaby. Spotkałem się z opinią, że tworzą go amatorzy i sam też tak uważam przykład będzie poniżej.
W systemach dystrybuowanym w dużej ilości egzemplarzy katalog na lokalne pliki powinien być pusty. W tym przypadku /usr/local/bin zawiera skrypty które przeprowadzającemu pentesty rzucą się w oczy ze względu na ich nazwy.

Patrząc po wielkości ciekawe mogą być apt i search. Ten pierwszy podszywa pod aplikacje systemową, drugi ma dziwną jak na linux nazwę, więc mu się przyjrzyjmy.
Kod programu
Kod znalazłem tutaj online: https://github.com/linuxmint/mintsystem/blob/master/usr/local/bin/search
Skopiuje go jakby miał zniknąć po tym co napisze poniżej:
#!/bin/bash
function usage
{
echo """
Usage:
To search for something simply use 'search for':
search for [keyword]
You can restrict the search to a particular path by adding 'in [path]':
search for [keyword] in [path]
The following options are also supported:
-c | --case-sensitive
-s | --show-filenames-only
Examples:
search for keyword in ./
search in ../ for Keyword --case-sensitive
search -s in ../ for keyword
"""
}
directory=.
case=i
verbose=H
while [ "$1" != "" ]; do
case $1 in
for | -f | --for )
shift
text=$1
;;
in | --in | -i )
shift
directory=$1
;;
-h | --help )
usage
exit
;;
-c | --case-sensitive )
case=
;;
-s | --show-filenames-only )
verbose=l
;;
* )
usage
exit 1
esac
shift
done
if [ "$directory" == "" -o "$text" == "" ]; then
usage
exit 1
fi
GREP_COLORS='fn=94' find $directory -type f -exec grep -$case$verbose "$text" --color=auto -n {} \;
Ostatnie zmiany miał 3 lata temu, a według dziennika zmian powstał w 2008 roku:
mintsystem (5.5) elyssa; urgency=low * Added /usr/local/bin/search * Added content and contains to apt * apt doesn't use sudo in root mode anymore -- Clement Lefebvre <[email protected]> Mon, 6 Oct 2008 0000 +0000
Czym ten skrypt jest? W obecnym rozumowaniu określiłbym go nie umiem w składnie grepa, ale czy ponad 17 lat temu czy też tak było? Nie pamiętam. Użyłem chatagpt do opisania kodu.
Analiza kodu według chata gpt
To jest skrypt Bash służący do wyszukiwania tekstu w plikach, działający jako prosty wrapper na find + grep, z bardziej „opisową” składnią w stylu języka naturalnego.
1. Do czego służy skrypt?
Skrypt:
-
przeszukuje pliki tekstowe w zadanym katalogu (rekurencyjnie),
-
szuka podanego słowa / frazy,
-
pozwala:
-
włączyć/wyłączyć czułość na wielkość liter,
-
wyświetlać tylko nazwy plików, a nie linie,
-
wskazać katalog, w którym ma być wykonane wyszukiwanie.
-
Czyli jest to „ładniejsza” wersja:
grep -R ...
2. Jak działa składnia wywołania?
Skrypt oczekuje poleceń w formie:
search for TEKST in KATALOG [opcje]
Przykłady:
search for keyword search for keyword in ./ search for Keyword in ../ --case-sensitive search -s in ../ for keyword
3. Funkcja usage
function usage { ... }
Wyświetla pomoc (instrukcję użycia), gdy:
-
podano błędne argumenty,
-
brakuje tekstu lub katalogu,
-
użyto -h lub --help.
4. Zmienne domyślne
directory=. case=i verbose=H
ZmiennaZnaczeniedirectory=.domyślnie szuka w bieżącym katalogucase=igrep -i → ignoruje wielkość liter verbose=Hgrep -H → pokazuje nazwę pliku
5. Parsowanie argumentów
Pętla:
while [ "$1" != "" ]; do
Analizuje parametry wywołania:
Obsługiwane argumenty:
ArgumentDziałaniefor, -f, --fortekst do wyszukaniain, -i, --inkatalog-c, --case-sensitivewłącza rozróżnianie wielkości liter-s, --show-filenames-onlypokazuje tylko nazwy plików-h, --helppokazuje pomoc
6. Sprawdzenie poprawności
if [ "$directory" == "" -o "$text" == "" ]; then
Jeśli:
-
nie podano tekstu do wyszukania
-
lub katalogu
→ skrypt kończy się z błędem i pokazuje pomoc.
7. Właściwe wyszukiwanie
find $directory -type f -exec grep -$case$verbose "$text" --color=auto -n {} \;
Co dokładnie się dzieje?
-
find $directory -type f
- znajduje wszystkie pliki w katalogu (rekurencyjnie)
-
grep:
-
-$case → -i lub brak (czułość na wielkość liter)
-
-$verbose → -H lub -l
-
"$text" → szukany tekst
-
-n → pokazuje numery linii
-
--color=auto → koloruje znalezione fragmenty
-
-
GREP_COLORS='fn=94'
- ustawia kolor nazw plików (jasnoniebieski)
8. Podsumowanie w jednym zdaniu
Tyle z opisu którego i tak nie będzie czytał.
Jak go można zastąpić?
Zatem co jest w nim złego? Można go zastąpić paroma aliasami w powłoce systemowej. Dokładniej to poniżej są odpowiedniki dla poszczególnych opcji skryptu
Case-sensitive (--case-sensitive)grep -Rn --color=auto "TEKST" KATALOG
Tylko nazwy plików (--show-filenames-only)
grep -Ril --color=auto "TEKST" KATALOG
(case-insensitive) lub case-sensitive:
grep -Rl --color=auto "TEKST" KATALOG
Gdzie całość można skrócić do
grep -Rin --color=auto "TEKST" DIR
Tak właściwie to można go skrócić do jednej komendy za 66 linii. Co w tym złego? Otóż nic, po prostu zbyt rozbudowana funkcjonalność.
Realna podatność
Skupmy się zatem na samym właściwym kodzie skryptu czyli ostatniej linii
GREP_COLORS='fn=94' find $directory -type f -exec grep -$case$verbose "$text" --color=auto -n {} \;
Osoby zajmujące się programowaniem w językach skryptowych powinny zauważyć trywialny błąd. Zmienna $directory nie została zamknięta (ograniczona). To jest często spotykane pytanie z kategorii co jest z nim nie tak na rozmowach rekrutacyjnych.
Aplikacja find posiada opcję usuwania plików, sprawdźmy zatem czy zadziała. Poszukajmy d⁎⁎y. Stworze 3 puste pliki i spróbuje je usunąć.

Jak widać powiodło się.
Spróbujmy może jeszcze bardziej hardkorowo, podnieśmy uprawnienia i zróbmy coś złego, nieświadomy użytkownik może to wykonać
W tym przypadku po restarcie systemu użytkownik ujrzy pusty grub #pdk
Oczywiście można się bawić dalej i np. uruchomić zły program
Widzicie jak to podobno najpopularniejsza dystrybucja na świecie serwuje głupi błąd przez przeszło 18 lat. Co można z tym zrobić, można poprawić skrypt a najlepiej go całkowicie usunąć bo jest zbędny. Istnieje lepsze rozwiązanie które podałem wyżej. Wychodzi na, że nikt nigdy tego systemu nie sprawdzał pod kątem bezpieczeństwa. Dlatego też uważam, że jest słaby.
#linux #linuxmint #pentesting #programowanie #programista15k

