GNU/Linux >> Znalost Linux >  >> Linux

Vynechání příkazu/skriptu zadaného v /etc/passwd

Předpokládejme, že existuje (pravděpodobně neúmyslná) zadní vrátka.

Výchozí /etc/passwd na pracovních stanicích Sun z počátku 90. let obsahoval záznam něco takového:

games::0:0:games:/nopath:/bin/false

Jinými slovy, účet s názvem 'hry' bez hesla. Génius, který s tímto nápadem přišel, zřejmě neměl žádnou představivost a přiřadil mu uid a gid nula (tj. kořen a kolo). Obecně to bylo v pořádku, protože domovský adresář byl bezvýznamný a shell byl nastaven na program, který vždy skončil se selháním. Kromě toho byla výchozí nastavení pro jakýkoli přístup přes síť – telnet, rlogin, rcp, ftp – nastavena tak, aby zabránila přístupu libovolnému nulovému uid. Pro root existovala samostatná položka passwd se správně nastaveným heslem, domovským adresářem a shellem.

To znamenalo, že pokud se pokusíte přihlásit jako hry, stane se následující:

  • Přihlášení jako hry na konzoli by nejprve uspělo, ale pak by se objevilo /bin/false shell, který by okamžitě opustil.
  • Použití telnetu nebo rlogin by přímo odmítlo přihlášení. I kdyby se to podařilo, /bin/false shell by okamžitě skončil.
  • FTP a scp nepoužívají shelly, ale byly nakonfigurovány tak, aby odmítaly přístup k uid zero, takže jste se nemohli přihlásit tímto způsobem.
  • Přihlášení do GUI by spustilo výchozí služby GUI, včetně správce oken, klienta hodin a terminálu. Ten by okamžitě skončil, protože by jeho podřízený shell okamžitě skončil. Takže byste dostali prázdnou obrazovku kromě hodin. (Více o tom níže...)
  • Pokud jste skutečně měli Chcete-li se přihlásit jako root, musíte to udělat buď z konzoly, nebo nejprve rlogin/telnet jako jiný uživatel na tomto počítači a poté su root . V obou případech se používá kořenový adresář passwd vstup spíše než hry passwd vstup, a tedy funguje tak, jak by měl fungovat root.

Zdálo se tedy, že herní účet vždy selže, pokud jste se nepřihlásili pomocí GUI. V tom případě se objevily jen hodiny. Můžete však kliknout pravým tlačítkem na pozadí a získat kořenovou nabídku s továrním seznamem programů, které by si uživatelé normálně přizpůsobili pro sebe. (Přizpůsobení nabídky u herního účtu nefungovalo; přesně si nepamatuji proč.) Mohli byste zkusit vyvolat více oken terminálu, což by selhalo. Byla tam logická hra (která mohla být impulsem pro účet na prvním místě). Další možností bylo odhlásit se. A pak tu byl grafický nástroj pro ladění dbxtool .

dbxtool byl grafickým rozhraním pro dbx symbolický debugger, podobný dnešnímu gdb . Vzhledem k tomu, že jste uid zero, mohli jste se připojit a ovládat jakýkoli proces v systému, i když to nebylo užitečné, protože programy poskytované společností Sun byly kompilovány bez symbolů. Můžete spustit shell, ale toto by použilo vaše SHELL proměnná prostředí, která byla /bin/false . Můžete však také změnit proměnné prostředí! To znamenalo, že byste mohli získat root shell následujícím způsobem:

  1. Přihlaste se přes GUI jako hry, bez hesla.
  2. Kliknutím pravým tlačítkem zobrazte kořenovou nabídku.
  3. Začněte dbxtool .
  4. setenv SHELL /bin/sh
  5. (Volitelné) setenv HOME /
  6. Spusťte prostředí pomocí !
  7. Protože terminál není nastaven, proveďte stty sane

Voila, root shell bez hesla!

Nepředpokládejte tedy, že uživatel nemůže uniknout z neplatného shellu.


Spouštění skriptu nelze obejít. Toto je váš přihlašovací shell a spustí se pokaždé, když se přihlásíte. A jako přihlašovací shell , vás odhlásí pokaždé, když skončí. K útěku však můžete použít vtípky, chyby a nekonzistence v přihlašovacím shellu.

Jedna věc, kterou můžete udělat, je uniknout do shellu pomocí libovolné možnosti v nabídce. Pokud vám nabídka umožňuje spustit vim , less , more nebo nějaké další příkazy, můžete se teoreticky osvobodit. Pokud má sysadmin zkušenosti, tyto příkazy budou používat své omezené verze a nebudou fungovat.


Vzpomínám si na wargame challenge, kde byl podobný případ – shell ukazoval na něco, co jednoduše vytisklo nějaký výstup pomocí více příkaz a poté relaci ukončil. Nicméně, protože více obsahuje vestavěný textový editor (v tomto konkrétním případě to bylo vi), stačilo změnit velikost okna terminálu, ze kterého jste se připojovali, aby se aktivovalo více, a poté jej použít k opuštění shellu.

Odpověď tedy závisí na tom, co váš skript dělá. Zkontrolujte muže stránky pro každý z příkazů, které spouštíte, abyste se vyhnuli zranitelnosti.


Linux
  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. Rozdíl mezi ~/.profile, ~/.bashrc, ~/.bash_profile, ~/.gnomerc, /etc/bash_bashrc, /etc/screenrc …?

  3. Jak napsat automaticky generovaný skript Shell do /etc/profile?

  1. Při vytváření prvního skriptu Bash nelze příkaz Cd „přilepit“?

  2. CentOS / RHEL :Jak obnovit ze smazaného souboru /etc/passwd

  3. Co dělá řádek '!/bin/sh -e'?

  1. Přidávání uživatelů do sudoers pomocí skriptu shellu

  2. /etc/passwd zobrazuje uživatele ve skupině, ale /etc/group nikoli

  3. Jak nastavit /etc/issues, aby zobrazoval IP adresu pro eth0