Zmień uprawnienia do pliku z pomocą mojego kota


56
root@system:~# less myfile
-bash: /bin/less: Input/output error

Główny system plików nie działa. Ale mój kot wciąż żyje (w mojej pamięci):

root@system:~# cat > /tmp/somefile
C^d
root@system:~#

Jest jednak trochę samotny, wszyscy jego przyjaciele odeszli:

root@system:~# mount
-bash: /bin/mount: Input/output error
root@system:~# dmesg
-bash: /bin/dmesg: Input/output error
root@system:~# less
-bash: /bin/less: Input/output error
root@system:~# chmod
-bash: /bin/chmod: Input/output error

System nadal działa i spełnia swój cel. Wiem, wiem, jedyną rozsądną odpowiedzią na to jest wyłączenie systemu i wymiana dysku głównego. Niestety nie jest to opcja, ponieważ kosztowałoby dużo czasu i pieniędzy. Zabiłoby to mojego kota, a to zasmuciłoby mnie.

Myślałem o przyniesieniu mu jego zwykłych przyjaciół od dawcy. Nie śmiem ich wczytać, na wypadek, gdyby ssh próbował je załadować i przeciął linię (plik binarny i tak zniknął). To brzmi jak praca dla kuzyna mojego kota:

root@system:~# netcat -l 1234 > /tmp/less
-bash: netcat: command not found

Niestety dawno go nie było.

Teraz mogę spróbować oszukać mojego kota, aby wykonał rytuał, aby go wskrzesić:

cat > netcat < /dev/tcp/localhost/9999

I to działało. On prawie żyje:

root@system:/tmp# /tmp/netcat
-bash: /tmp/netcat: Permission denied

On potrzebuje tylko małej iskry życia. Ta mała +xmagiczna inkantacja, której w tej chwili nie mogę recytować.

Czy możesz mi pomóc w przywróceniu przyjaciół mojego kota?


3
Czy potrafisz uruchomić /lib/ld-linux.so.2 ./netcat(lub ekwiwalent systemu) i zacząć działać?
Michael Homer

4
Ponadto: jaki to system operacyjny? Czy masz zainstalowany system plików vfat lub NTFS? Sieciowe systemy plików? Partycje, z których możesz usunąć zawartość? Czy dostępne pliki z uprawnieniami do wykonywania?
Michael Homer

3
„Zabiłoby to mojego kota, a mnie zasmuciło”. - Zawsze myślałem, że powiedzenie „Żadne dzieci nie ucierpiały podczas produkcji” było tylko powiedzeniem, ale cóż…
rugk

7
Absolutnie musiałem głosować za tymi wszystkimi analogiami kotów… 😂
rugk

2
biedny kot, mam nadzieję, że nic mu nie jest :(
kot

Odpowiedzi:


37

Istnieje kilka możliwości, wszystkie w zależności od dokładnych parametrów twojej sytuacji w tej chwili. Zamierzam założyć Linuksa w poniższych przykładach, w stosownych przypadkach, ale podobna funkcjonalność istnieje na innych platformach w większości przypadków.

  • Być może uda Ci się uzyskać moduł ładujący dynamiczny, który uruchomi dla Ciebie plik wykonywalny. Zakładając, że catjest dynamicznie połączony, odpowiednik Twojej platformy /lib/ld-linux.so.2prawdopodobnie również będzie w pamięci, a zatem będzie użyteczny do uruchomienia pliku binarnego:

    $ /lib64/ld-linux-x86-64.so.2 ./chmod
    chmod: missing operand
    

    Może być ich wiele (prawdopodobnie 32- i 64-bitowe) i może być dostępnych wiele kopii lub dowiązań symbolicznych wymagających rozwiązania. Jeden z nich może działać.

  • Jeśli masz zamontowany system plików vfat lub NTFS lub inny, który traktuje wszystkie pliki jako 777, możesz utworzyć tam plik wykonywalny.

    $ cat > /mnt/windows/chmod < /dev/tcp/localhost/9999
  • Jeśli masz zamontowany sieciowy system plików, nawet jeśli nie można go zapisywać lokalnie, możesz tworzyć pliki w systemie zdalnym i używać ich normalnie.
  • Jeśli istnieje zamontowana partycja, na której nie zależy ci zawartość, na dysku, który nadal w większości działa, możesz zastąpić zawartość nowym obrazem tego samego typu systemu plików, zawierającym pliki wykonywalne, które chcesz - catpowinno być dobrze w tym rolę, z której zwykle korzystają ludzie dd, i możesz udostępnić obraz przez sieć.

    $ cat > /dev/sdb1 < ...

    Ten jest prawdopodobny, ale ma wiele miejsc, w których nie można pracować, w zależności od tego, co dokładnie jest jeszcze w pamięci z tej partycji.

  • Jeśli istnieje jakikolwiek dostępny plik, który ma uprawnienia do wykonywania na dowolnym zapisywalnym systemie plików, możesz cat >w nim zastąpić zawartość wybranym przez ciebie plikiem binarnym.

    $ cat > ~/test.py < ...
  • Ponieważ Bash nadal działa, możesz dynamicznie ładować wtyczkę Bash do procesu, który wyświetla chmod. W szczególności możesz zainstalować i załadowaćctypes.sh , który zapewnia interfejs funkcji obcej dla Bash, a następnie dlcall chmod ./netcat 511.
  • Możesz przynieść dynamiczny plik biblioteki foo.soswojej konstrukcji, a następnie catzaładować go w swoim imieniu LD_PRELOAD, umożliwiając wykonanie dowolnego kodu.

    $ LD_PRELOAD=./hack.so cat /dev/null

    Jeśli przechwycisz na przykład open:

    int open(const char *path, int flags, ...) {
        chmod(path, 0755);
        return -1;
    }
    

    wtedy możesz zrobić wszystko, co musisz tam zrobić.

Moją sugestią byłoby wprowadzenie statycznie busyboxwykonywalnego pliku wykonywalnego jako pierwszego elementu (lub tak naprawdę, jedynego elementu), abyś miał pełny zakres dostępnych poleceń bez ponownego wykorzystywania jakiegokolwiek hacka, który doprowadził cię do tego stopnia, że ​​wyczerpał się.


3
Ponownie „statycznie powiązany busybox”: Uwaga, która sashzostała specjalnie zaprojektowana dla tego rodzaju przypadku użycia i może być łatwiej dostępna w mgnieniu oka (np. Można go zainstalować wcześniej i pozostawić gdzieś kopię, aby była w pamięci, gdy system przerwy ... albo możesz porzucić swoje zwierzaki i kupić kupę bydła, jak sądzę).
Kevin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.