On Tue, 9 Apr 2002 17:14:09 +0300
"Konrad Neitzel"
Bernd Obermayr
schrieb: Der User gibt also einmal blablabla ein, klickt auf senden und sieht den POST-String wie er an den Server gesendet wird. Nun braucht er nur nochmal das Formular aufrufen, diesmal gibt er aber direkt die URL ein, bzw aendert die vorherige:
Nachdem das CGI ja als root laeuft... schoene Kacke.
Wo ist denn da das genaue Problem? Ein Aufruf von script.cgi mit Parametern ";" nächster Befehl ist IMHO immer gleichbedeutend, unabhängig, ob das script suid-root ist oder nicht!
Hmmm, bin mir nicht sicher, aber Du hast schon verstanden was ich geschrieben habe? ---schnipp--- ... und verarbeitest die Usereingabe indem Du den Inhalt von input direkt an ein anderes script pipest. ---schnapp--- Also nicht script.cgi verarbeitet input, sondern script.cgi ruft ein weiteres script mit dem Parameter blablabla;rm -rf / auf. Dieses zweite script sieht aber nur blablabla Das rm -rf / wird direkt von der Shell ausgefeuhrt Probiers aus. In entschaerfter Form ;) echo blablabla;ls
Was passiert bei "command1 ; command2"?
command1 wird ausgeführt command2 wird ausgeführt.
Wenn command1 suid ist, dann ändert sich der User trotzdem nicht für command2!
Nicht command 1 oder 2 ist suid sondern schon das cgi-script, somit geschieht auch jeder Aufruf einer Subshell als root.
(Wäre ja schön, denn dann könnte ich ja immer "mount irgendwas ; command2" machen :) )
siehe oben
Und es ist egal, ob dieses Kommando nun via Webserver aufgerufen wird oder irgend wie anders.
Das stimmt.
Dies zeigt aber die generelle Problematik bei CGI und PHP und sonstwas Scripten. Diese können von überall jederzeit aufgerufen werden. Es ist trivial, z.B. ein Webfrontend zu umgehen (Wie es Bernd schön aufgezeigt hatte!). Ein Grund, warum man die Anzahl der Scripte so gering wie möglich halten sollte und man durchaus die Scripte gut checken sollte!
Sach ich doch ;) -- so long... bernd ------------------------------------------------------------------------