Fórum Root.cz
Hlavní témata => Software => Téma založeno: Xjmeno363dcas 27. 09. 2011, 12:48:12
-
jednoduchá věc, jen mám zrovna mentální pauzu
píšu zkouškový skriptík co automaticky čekne asi 20 úkolů, co musel nastavit student na systému
jeden z úkolů je, aby nastavil správně heslo roota např na RAMPEPURDA
napadá někoho, jak to skriptem (sopuštěným jako root) ověřit?
něco jako:
cat /etc/shadow | grep root | grep "$1$cvsd56sf5VSDzcs2342GSDRF23" | wc -l >> vystup.txt
...problém je v tom, že tohle logicky nejde, protože se mění haš i když je tam stejné heslo
-
nebylo by jednodussi si misto studenta ktery ma neco nastavit (a ty to pak musis kontrolovat) si udelat skript student.sh, ktery to udela sam a spravne?
par takovych skriptu mame :D treba zdenecek.sh
-
Určitě existuje jednodušší řešení, ale mě napadá John the Ripper. Přidal bych mu do slovníku to jediné heslo a poštval ho na získaný shadow soubor. Slovníkovým útokem bude hned vědět, jestli to heslo sedí nebo ne.
-
ebylo by jednodussi si misto studenta ktery ma neco nastavit (a ty to pak musis kontrolovat) si udelat skript st....
---------------------------
ne ne ne ne....!!!!
nerozumíme si.
studenti prošli školením a teď budou mít test
a já to přeci nebudu kontrolovat ručně.
nejde o žádný hack nebo podobný ptákoviny. Prostě jenom ověřit, že student dokázal správně nastavit rootovi správné heslo
žádný slovníkový útoky a podobný ptákoviny.
teď zkouším skriptík, který se loginem pokusí přihlásit a po neúspěchu vrátí -1. Problém je jak donutit login pod už běžícím rootem. Asi mu ve skriptu vytvořím nového uživatele a z něj to pujde.
Je to ale podepření klackem, určitě existuje něco jednoduššího. To někoho z vás přeci musí napadnout.... ;)
-
Já jsem to samozřejmě pochopil, student dostane úkoly a stanovený čas. Pak se spustí skript, ten to za něj zkontroluje a přidělí mu body.
Ten John by měl být jednoduché řešení. Použije se sice slovníkový útok, ale ve slovníku bude jen to jedno heslo. A John buď vypíše, že našel heslo RAMPEPURDA nebo naopak, že slovníkový útok nepřinesl úspěch.
-
aha, teď chápu já. Dík. Ale to se mi zdá takový divný - nedeterministický. Je to jako vloupávat se do otevřenýho baráku oknem.
Do rána snad něco vymyslím.
něco ve smyslu:
heslo=rampepurda; su FRANTA << EOF; $heslo EOF; echo povedlose > flag.txt; logout; ls -laF flag.txt | wc -l
ještě to doladit
...ráno mi to bude myslet víc...
-
Celkom ma tento problem zaujal, tak som sa na to pozrel...
Ocakaval som, ze dokazem vyvolat su, login, bash, alebo ssh s parametrom "heslo". No nenasiel som, takze zostava tam nejak prepasovat to heslo z prikazovej riadky. Samozrejme ze
echo heslo | ssh root@localhostfungovat nebude, ale nasiel som toto: http://www.unix.com/shell-programming-scripting/28194-using-expect-script-shell-script.html (http://www.unix.com/shell-programming-scripting/28194-using-expect-script-shell-script.html)
Tento program umozni automatizaciu, napriklad aj zadavanie hesla a teda moze zadat heslo ku skusobnemu scriptu. Neskusal som, ale popis na stranke je jasny.
Najjednoduchsie je prihlasit sa cez ssh a vykonat prikaz:
ssh root@localhost "echo funguje > /tmp/heslo"Ak sa subor objavi, tak heslo bolo spravne. Alebo vykonat "su - obycajnyuser" a nasledne z neho sa pokusit o "sudo touch heslo".
Zacinam mat pocit, ze s bezpecnostou v linuxe je to celkom dobre, kedze mi nikde nedovoli zadat heslo k dolezitym aplikaciam z prikazovej riadky scriptom. A john the ripper sa aj mne zda ako jednoducha moznost.
Ak sa tieto moznosti zdaju prilis jednoduche, tak navrhujem napisat si vlastny program s vyuzitim PAM kniznice a priamo z kodu podhodit heslo. Ale to len ak sa citite ako Rambo a radi strielate na vrabce rotacnym kanonom.
-
Jednoduchy programek podle man crypt 3, ktery prijma 2 parametry, <plain text heslo> a <heslo v zahashovane forme>. Vraci jestli se shoduji.
zkompilovat lze pomoci: gcc -lcrypt -o crypt crypt.c
crypt.c:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <crypt.h>
int main(int argc, char **argv)
{
char *result;
int ok;
if(argc != 3){
printf("Usage: %s <plain> <encrypted>\n", argv[0]);
return -1;
}
result = crypt(argv[1], argv[2]);
ok = strcmp (result, argv[2]) == 0;
puts(ok ? "OK" : "ERROR");
return ok ? 0 : 1;
}
porovnani vuci /etc/shadow je pak jiz trivialni
# ./crypt HESLO `grep ^root: /etc/shadow | cut -d':' -f2`
OK
Mozna to jde jednoduseji, ale opravdu se jedna o dosti netradicni zalezitost.
-
Mimochodem uvedeny zdojovy kod je mirne upraveny priklad z http://www.gnu.org/s/hello/manual/libc/crypt.html tudiz by mel byt asi siren pod GNU/GPL licenci ... doufam, ze ji sem nemusim vypisovat ::)