Eine kleine Theorie, wie man unter Linux an das root-Passwort kommen könnte

Also Leute,

nehmen wir mal an, dass ihr Direktkontakt und ein normales Benutzerkonto an einem Linux-Rechner. Und ihr habt keinen Zugriff auf die "shadow"... Doch! Zumindest wenn meine Theorie stimmt:

Wenn man in der Shell den Befehl "su" ausführt und über das root-Passwort verfügt, kann man in dieser Shell root-Aktionen durchführen... Denken wir mal weiter. Um sich als root anzumelden muss ja irgendwoher das verschlüsselte root-Passwort kommen, denn es wird ja das verschlüsselte root-Passwort mit der verschlüsselten Version der Eingabe verglichen. Das hieße, dass der gewöhnliche Benutzer für einen kurzen Moment lesenden Zugriff auf die "shadow" bekommt.

Man könnte also ein Tool schreiben, welches solange wartet bis der Zugriff erfolgt, und dann "zuschlägt" indem es das verschlüsselte root-Passwort aus der "shadow" liest. Dieses ist dann jenachdem wie sicher es gewählt ist mit z.B. "John the Ripper" früher oder später geknackt.

Doch es gibt noch einen weiteren Teil meiner Theorie:

Man findet heraus, an welcher Speicheradresse das verschlüsselte root-Passwort abgelegt wird und schreibt ein Tool, welches folgende Aufgaben erfüllt:
-es führt "su" aus
-es gibt irgendeinen beliebigen Text als Passwort an "su" weiter
-sofort danach liest es was an eben genannter Speicheradresse steht
-dieses Ergebnis wird dann entweder auf dem Bildschirm ausgegeben, in eine Datei geschrieben oder beides

Punkt1 ist sehr wichtig, denn wenn man "su" manuell ausführt hat das Tool keinen Zugriff auf den Speicherbereich von "su".

Dieses Ergebnis lässt sich genauso mit "John the Ripper" knacken.

Einer der beiden Teile muss einfach funktionieren (evtl. auch beide), da es ansonsten keine anderen Möglichkeiten für jemanden der das root-Passwort kennt geben kann mit Hilfe von "su" root-Aktionen durchzuführen, ohne den aktuellen Benutzer ab- und den Benutzer root anzumelden.

Ich würde mich freuen, wenn jemand das im Text beschriebene Tool coden könnte (am besten beide Versionen), denn ich kann kein c++ *heul* habe aber vor es zu lernen.

ThX schon mal an alle die meine Theorie bestätigen bzw. wiederlegen können, und auch an den evtl. vorhandenen, der das Tool schreibt (aber bitte auch veröffentlicht, vorrausgesetzt ich habe diesen langen Text nicht umsonst geschrieben, denn dass würde heißen, dass meine Theorie ein Irrtum war, und somit das Tool nicht funktionieren kann)
 
wenn ich physischen zugriff auf den rechner haben, dan boote ich mit einer live distri und bekomme auf diese art und weise vollen lese und schreib zugriff auf die passwd und aud shadow!

ich kann mir natürlich die mühr machen, das passwort elendig lange zu entschlüsseln, oder ich deaktiviere in der passwd ganz einfach das passwort für root!

dazu kommt, das du dem aktuellen shell- user mit su nur root rechte einräumst, diese sind solage vorhanden bis du dich wieder auslogst. was du eventuell meinst mit "vorübergehende root-rechte" ist sudo.
 
Zwei Dinge:
1. Es ist unmöglich, aus einem Md5-Hash das PW zu ermitteln
2. Selbst wenn es möglich wäre, müsste der User, unter dem man das probiert, in der Gruppe wheel per Hand von root eingetragen werden, sonst darf er su so oder so nicht benutzen
 
du kannst immer solange bruteforcen, bis der richtige md5-hash rauskommt, aber du kannst nicht aus nem md5-hash das PW bestimmen. md5 ist ein one-way-hash..

einfaches beispiel eines one-way-hashes ist die quersumme: du kannst solange "bruteforcen", bis du eine zahl hast, die die richtige quersumme aufweist, aber du kannst aus der quersumme keine zahl eindeutig bestimmen.
 
Das ist doch genau das, was terrorbyte grad geschrieben hat (er bezog sich drauf, dass man zwar nicht das genaue Ursprungs-Passwort errechnen kann, aber trotzdem ein für den Hash-Algorithmus zufriedenstellendes Ergebnis kriegt).
Man kann aus einem MD5-Hash nicht den Ursprung zurückrechnen, genau so wie man aus der Quersumme 9 nicht schließen kann ob es jetzt 63 oder 36 oder 45 war, aus der die Zahl erzeugt wurde.
MD5 ist gebrochen, es lassen sich sehr schnell Kollisionen erzeugen, aber das ursprüngliche Passwort kriegt man trotzdem nicht.
Dies ist aber auch gar nicht nötig, wenn man lediglich Zugriff auf das System erlangen will und nur der endgültige Hash, nicht das Passwort von Bedeutung ist.
 
Nicht dass ich sonderlich viel Ahnung von systemnaher Programmierung unter *nix habe, aber wer behauptet denn, dass ein Programm, welches mit den Rechten eines bestimmten Users ausgeführt wird, überhaupt Zugriff auf alle Speicherbereiche bekommen kann? Wenn der Vergleich mit dem root-Passwort in einem geschützten Bereich erfolgt, dann bringt das tollste Programm nix ;)
 
das ganze funktioniert nicht, weil der prozess der das eingegebene passwort mit dem hash in der shadow datei vergleich mit root rechten laeuft. der "set user id" mechanismus sorgt dafuer, dass programme mit den rechten des besitzers der datei ausgefuehrt werden anstatt mit den rechten des benutzers der das programm ausfuehrt. das programm "passwd" mit dem man das eigene passwort aendern kann braucht natuerlich schreibrechte auf die datei /etc/shadow. genauso braucht das programm "login" und das programm "su" leserechte auf diese datei. fuer den benutzer der diese programme ausfuehrt ist es zu keiner zeit moeglich den inhalt der /etc/shadow datei einzusehen. wenn dem so waere koennte man sich den ganzen spass auch gleich schenken.

http://en.wikipedia.org/wiki/Password_shadowing
http://wiki.linuxquestions.org/wiki/Suid
 
Hallo.

Ich hab noch nicht ausprobiert, ob es wirklich umsetzbar ist, aber nehmen wir an, wir (als User) schreiben einfach ein Programm (nennen es "su") und wechseln in dessen Verzeichnis. Jetzt bitten wir den zuständigen Admin uns (wegen einem Problem, das wir angeblich nicht lösen können....) zu helfen.
Er gibt den Befehl "su" ein... ruft somit unser Programm auf... wird nach dem Passwort gefragt, und gibt dieses ein. Nachdem er sein Passwort mit Enter bestätigt, wird seine Eingabe in eine Datei gespeichert und eine Fehlermeldung (über das "falsch" eingetippte Passwort) wird ausgegeben. Nachdem das passiert ist, löscht sich unser Programm. Der Admin gibt erneut "su" ein, widerum sein Passwort, und ist nun als root angemeldet. Er löst das "Problem" und wir haben das unverschlüsselte Passwort in unsrer Datei.

Bessert mich aus, wenn ich falsch liege.

Mfg
Shining
 
dazu müsstest du nur den "root" dazu bewegen zu deinem rechner zu kommen.

da aber alle mir bekannten "root"s und systemleute eine angewohnheit haben, nämlich TOTAL faul zu sein (so wie ich :p ) werden diese unter normalen umständen nicht an der workstation sich selber su'en sondern da wir uns hier ja auf echten multiusersystemen befinden, immer von woanders zugreifen.

aber rein theoretisch ist das möglich mit dem eigenen programm (aber vorher muss dann noch der suchpfad angepasst werden, und noch was mehr ...)

mfg bikky
 
das funktioniert in 99% aller fälle leider nicht :)
grund hierfür ist, dass du fehlende schreibrechte für den ordner /bin hast, in den su drinne ist

ps.: du scheinst aber auch erst ein paar stunden alt zu sein, oder?
 
Hallo.

Ja wenn root "/bin/su" aufruft wäre meine Methode wirkungslos, wenn root das nicht tut, müsste es funktionieren.... vorrausgesetzt natürlich, er kommt tatsächlich persönlich zu unsrer Workstation ^^

ps: ja, gerade angemeldet.
 
su würde immer /bin/su aufrufen. Ansonsten müsste der Admin schon . su bzw ./su ausführen. Und wenn du schon Zugriff hast könntest du auch Keyghost oder soetwas verwenden bzw dem Admin einfach über die Schulter gucken :p Du könntest jedoch wenn du einmal root Zugriff hattest zb durch einen lokalen root Exploit einen Keylogger installieren oder auch /bin/su ersetzen bzw einfach chmod +s für deine User Shell machen.

1. Es ist unmöglich, aus einem Md5-Hash das PW zu ermitteln

Es ist durchaus möglich. Du kannst einen Hash nicht zurückberechnen das ist richtig, aber die Rainbowtables zb vergleichen den vorhanden Hash mit vorrausberechneten Hashes und dadurch kannst du auch an das Ursprungspasswort kommen. Und unmöglich ist sowieso nichts.
 
^^ sagen wir mal so, das was er zu begin wollte ist mal nicht möglich, aber eine gute idee wenn man länger drüber nachdenkt. afaik reicht da ein c compiler völlig aus.
 
Zurück
Oben