Portál AbcLinuxu, 5. května 2025 09:04
if
'???
/etc/passwd
, to všichni pořád dokola opisují z nějaké 15 let staré knihy nebo je to nějaká epidemie? Zkusil si autor opravdu na nějaké (aspoň trochu) současné distribuci přidat do /etc/passwd
řádek, který uvádí, a poté se přihlásit jako uživatel r00t
bez hesla? A fungovalo mu to?
r00t
? Používá ta distribuce standardní pam_unix.so
nebo nějakou specialitu?
#%PAM-1.0 auth required pam_env.so auth sufficient pam_unix.so try_first_pass likeauth nullok auth required pam_deny.so account required pam_unix.so password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 try_first_pass retry=3 password sufficient pam_unix.so try_first_pass use_authtok nullok md5 shadow password required pam_deny.so session required pam_limits.so session required pam_unix.soStandardní rootovský záznam v /etc/passwd je potom takovýto:
root:x:0:0:root:/root:/bin/bash
V každém případě - není to jedno? Pokud by někdo zvládnul zapsat do /etc/passwd, zvládne i zápis do /etc/shadow, ne?
V každém případě - není to jedno? Pokud by někdo zvládnul zapsat do /etc/passwd, zvládne i zápis do /etc/shadow, ne?Tak to vůbec není tak jisté. Třeba proto, že shadow má svůj SELinux kontext.
Co máte pořád všichni s tím /etc/passwd
, to všichni pořád dokola opisují z nějaké 15 let staré knihy nebo je to nějaká epidemie?
Co je na /etc/passwd
, špatného nebo snad 15 let starého?
Zkusil si autor opravdu na nějaké (aspoň trochu) současné distribuci přidat doA proč by to nemělo fungovat? Dokonce znam distribuci ve které byla hesla uvedena v tomto souboru./etc/passwd
řádek, který uvádí, a poté se přihlásit jako uživatelr00t
bez hesla? A fungovalo mu to?
/etc/shadow
by měla být pro pam_unix.so
dostatečným důvodem, aby přihlášení zamítl. Rozhodně by neměl umožnit přihlášení bez hesla na základě toho, co je (nebo není) ve druhé položce v /etc/passwd
. A to nemluvím o tom, že mnohé distribuce vám přihlášení bez hesla neumožní ani v případě, že bude prázdná druhá položka v /etc/shadow
. Pokud na nějaké distribuce uvedená finta projde v té podobě, v jaké je popsaná v článku, je to podle mne zralé na bugreport.
/etc/shadow
? Nebo proč, když už si vybere /etc/passwd
, raději nepoužije jako ukázku něco, co by opravdu fungovalo? Protože to buď všichni opisují už patnáct let jeden od druhého nebo jsou posedlí tím tajemně zavádějícím názvem. Těžko říct, co je horší.
Tento jev je nazýván přetečení zásobníku (stack-based overflow).Není to spíš přetečení bufferu na zásobníku? Pod přetečením zásobníku si představím Stack overflow, což je něco jiného.
Vlákno bylo přesunuto do samostatné diskuse. Máte-li pocit, že je ještě potřeba do flamu přispět, přidávejte prosím komentáře do osamostatněné diskuze, nikoliv sem pod článek, se kterým to nesouvisí. Děkuji.
char buffer[20];
Ve funkci byl vytvořen buffer o velikosti 20 znaků, to je námi očekávaná hodnota. Do tohoto bufferu však vložíme 128 znaků. Z důvodu přetečení paměti program selže....neni pravda.
Když se funkce pokusí zapsat 128 bajtů dat do 20 bajtového bufferu, dojde k zapsání 20 bajtů do bufferu a zbylých 108 bajtů přepíše návratovou adresu, ukazatel na rámec a argument funkce....je zavadejici, protoze 20bajtovy buffer se definuje jako
char buffer[19];
.char buffer[20];
Vytvoří pole 20 charů, čili 20 B. To, že se indexuje od nuly znamená, že nejvyšší index tohoto pole bude 19. Prvků v něm ale bude 20.
20 B bude pořád 20 B. Možná Vám někde řekli, že pokud do pole char pole[20] můžete dát jen 19 hodnot typu char, čili 1 B hodnot a do posledního znak '\0', kdybyste to chtěl vypsat knihovní funkcí jako řetězec.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.