AdminMod.de
https://www.adminmod.de/

Kein admin_command in exec()
https://www.adminmod.de/viewtopic.php?t=2390
Seite 2 von 3

Autor:  Sir Drink a lot [ 15.04.2002, 21:12 ]
Betreff des Beitrags: 

das gut und schlecht sehe ich ein.

ich will/(wollte) aber mit dem Taskplaner erreichen, jegliches installiertes Plugin mit all seinen Befehlen und Parametern anzusprechen.
(hm...das ist grammatisch nicht so schön ausgedrückt :-))

das csay war jetzt nur ein Beispiel.
Es sollen z.B. 2 Csay kommen, dann ein vote, dann 2 RestartRound und am schluss wieder ein csay und ein speakall (aus dem Plugin speech) kommen.
Es kommt eben drauf an, was der User in das Textfile an Befehlen auflistet.

Ach egal. Die Taskplaner-Idee kam mir nur, weil Clanmod sowas hat. Braucht wahrscheinlich sowieso kein Mensch.

Aber das plugin_exec funktioniert im Code von dem Mr.Spoocy so nicht. Da muss man doch ein execclient benutzen.

Ach komm, ist egal. Mir fehlt zu sehr das Grundwissen....

Autor:  daRope [ 15.04.2002, 22:42 ]
Betreff des Beitrags: 

Zitat:
ich will/(wollte) aber mit dem Taskplaner erreichen, jegliches installiertes Plugin mit all seinen Befehlen und Parametern anzusprechen.
Dann haben wir allerdings ein Problem. Ich muss ehrlich zugeben, dass mir die Idee, das Rechtesystem von AM einfach so umgehen zu koennen nicht zusagt. Das waere kein Problem, wenn die Skripter darauf achten wuerden und sich ueberlegen was sie machen. Aber das ist ja nun mal Utopie. Man muss sich ja nur die im Umlauf befindlichen Skripte ansehen.... Ich weiss noch nicht, wie eine zufriedenstellende Loesung aussehen soll. Was Du brauchst, ist ja tatsaechlich ein Weg, das Rechtesystem einfach zu umschiffen. Hmm, das kann ich so zwar nicht akzeptieren, aber mal sehen....
Zitat:
Aber das plugin_exec funktioniert im Code von dem Mr.Spoocy so nicht. Da muss man doch ein execclient benutzen.
Ach komm schon, SDal, execclient() hat damit genau gar nichts zu tun und bringt ueberhaupt nix. Das weisste doch, denk mal nach. :)

Autor:  Sir Drink a lot [ 15.04.2002, 23:00 ]
Betreff des Beitrags: 

mist...klar ist execclient in dem Zusammenhang von der Befehlsstruktur unlogisch :-)

execclient(User,admin_gag User 2) :-)
Aber es funktioniert !
(Hm...ich habe nur listenserver....:-) )

Aber warum geht es bei mir nicht mit plugin_exec ?
Dein Code, den Du Mr.Spoocy gepostet hast, funktioniert so nicht und ist doch von Spoocy gar nicht so gewollt.

Meine Logs schreiben beim Ausführen des Plugins mit der Chateingabe von Lamer, "xy has no proper access".

Ich will doch auch gar nicht, dass xy den Befehl ausführt, sondern das der Befehl an xy angewandt wird.

Wir reden hier irgendwie aneinander vorbei. Oder haben wir verschiedene Adminmod Versionen oder andere include Dateien ?

Deine Intention mit dem plugin_exec ist auch voll verständlich. Aber wenn man Plugin-Befehle ausführen möchte, hinter denen kein User steht, muss man die Befehle komplett neuschreiben, da man kein plugin_exec benutzen kann. Bei csay ist es wirklich kein Problem. Aber bei anderen Befehlen ?

Autor:  SN8P [ 15.04.2002, 23:06 ]
Betreff des Beitrags: 

Jetzt wirds interessant!!!

Autor:  daRope [ 16.04.2002, 10:48 ]
Betreff des Beitrags: 

Zitat:
execclient(User,admin_gag User 2) :-)
Aber es funktioniert !
(Hm...ich habe nur listenserver....:-) )

Aber warum geht es bei mir nicht mit plugin_exec ?
Das wundert mich nun allerdings. Ueberpruefe mal, ob das wirklich stimmt. Es gibt nur zwei Situationen. Entweder Du hast die Rechte, um von der Konsole admin_gag auszufuehren, oder nicht. Wenn ja, dann tut auch execclient(). Wenn nein, dann sollte auch execclient() nicht tun. Denn das laeuft ja auf dasselbe hinaus.

Und das ist daselbe fuer plugin_exec(). Das bewirkt in diesem Fall das gleiche wie execclient(), spart aber den Umweg ueber den Client.
Zitat:
Dein Code, den Du Mr.Spoocy gepostet hast, funktioniert so nicht und ist doch von Spoocy gar nicht so gewollt.
Ich weiss, aber ich kann ihm ja nun nicht jeden Scheiss vorbeten. Ich sag nur, dass ein exec("admin_command...") nicht tun wird. Wie er nun plugin_exec() richtig einsetzt, muss er halt nachschauen.
Zitat:
Meine Logs schreiben beim Ausführen des Plugins mit der Chateingabe von Lamer, "xy has no proper access".
Korrekt.
Zitat:
Ich will doch auch gar nicht, dass xy den Befehl ausführt, sondern das der Befehl an xy angewandt wird.
Nein, Du willst dass xy diesen Befehl (auf sich selber) anwendet. xy sagt was im Chat und daraufhin wird *von xy* eine AM Funktion aufgerufen. Wenn diese Funktion jetzt eine andere Funktion aufruft, dann ist immernoch xy der Aufrufer.
Zitat:
Oder haben wir verschiedene Adminmod Versionen oder andere include Dateien ?
Das mit Sicherheit. ;) Hat damit aber nix zu tun.
Zitat:
Aber wenn man Plugin-Befehle ausführen möchte, hinter denen kein User steht, muss man die Befehle komplett neuschreiben, da man kein plugin_exec benutzen kann. Bei csay ist es wirklich kein Problem. Aber bei anderen Befehlen ?
Es gibt keine Befehle, hinter denen kein User steht. Fuer jeden Befehl gibt es einen ausfuehrenden User. Auch fuer Befehle, die ueber admin_command ausgefuehrt werden gibt es einen ausfuehrenden User, naemlich die Serverkonsole. Nur ist die eben kenierlei Beschraenkungen unterworfen.
Das ist ja eben. Zusaetzlich dazu, dass mit exec() die Befehle ueber die Serverkonsole laufen und somit zu unerwuenschten Effekten fuehren koennen. Wie gesagt, wenn die Skripter aufpassen wuerden und sich der Gefahren bewusst waeren, dann wuerde auch weniger passieren. Aber so.... Die Verwednung von exec() wird auch nocht andersweitig eingeschraenkt, es geht ja nicht nur um admin_command. Das admin_command nicht mehr mit exec() erlaubt ist, ist zu einem nicht unwesentlichen Teil eine erzieherische Massnahme, damit die Leute das nicht mehr so gedankenlos fuer alles einsetzen. Du kannst z.B. keine Befehlsfolgen mehr mit exec() verwenden. Dass muessen dann schon zwei Aufrufe sein, etwo so:
statt exec("mp_timelimit 10; sv_restart1");
nun exec("mp_timelimit 10"); exec("sv_restart 1");

Aber Du hast mich da auf eine Idee gebracht. :)

Autor:  MrSpoocy [ 18.04.2002, 22:54 ]
Betreff des Beitrags: 

Zitat:
Ich weiss, aber ich kann ihm ja nun nicht jeden Scheiss vorbeten. Ich sag nur, dass ein exec("admin_command...") nicht tun wird. Wie er nun plugin_exec() richtig einsetzt, muss er halt nachschauen.
also ich weis net bitte poste mal meinen code so das es geht.
genau das is es, mit exec(""); geht es , das script leuft seit 1 woche auf unserm server und hat mehrfach seinen erfolg gezeigt.

Beim versucht das mit dem neuen befel zu nutzen:

snprintf(Text, MAX_TEXT_LENGTH, "^"%s^" 5", User);
plugin_exec("admin_gag", Text);

ist esjdoch gescheitet ,also ich mag den neuen befehl nicht *grummel*

Autor:  Sir Drink a lot [ 19.04.2002, 02:52 ]
Betreff des Beitrags: 

wenn man den Befehl plugin_exec jetzt ein wenig erweiter, dass man dem User xy vielleicht kurzfristig die Rechte erteilt und direkt danach wieder entzieht, wäre es vielleicht einfacher....

hm....graue Theorie und kann wahrscheinlich auch wieder missbraucht werden....

Autor:  [WING] Black Knight [ 19.04.2002, 07:52 ]
Betreff des Beitrags: 

daRope, ich hab ihm mal unseren PM-Wechsel geschickt. Damit sollte seine Frage beantwortet sein.

Autor:  Sir Drink a lot [ 19.04.2002, 12:40 ]
Betreff des Beitrags: 

ist angekommen....damit ist einiges geklärt. Ok. Ich habe es mir auch schon verher gedacht, was mich allerdings wirklich nicht so sehr zu frieden stimmt :-)

aber was kann man den schlimmstenfalls mit exec() zerstören oder missbrauchen ?

Ich habe mir leider wirklich wenig Gedanken zu dem exec() gemacht, da ich die Gefahr noch nicht erkannt habe.

Wenn die Antwort auf meine Frage zu heikel ist, um sie hier öffentlich zu diskutieren, bitte schreib eine PM oder wir können es ja im Internen diskutieren :-)

Meinen Taskplaner, der automatisch plugin Befehle nach einer gewissen Zeit aufruft, kann ich aber somit vergessen :-(

Gruß,
SDal

Autor:  daRope [ 19.04.2002, 16:07 ]
Betreff des Beitrags: 

Zitat:
genau das is es, mit exec(""); geht es , das script leuft seit 1 woche auf unserm server und hat mehrfach seinen erfolg gezeigt.
Das bezweifel ich nicht. Ich sag nur, dass es mit der naechsten Version eben nicht mehr geht.

Autor:  daRope [ 19.04.2002, 16:08 ]
Betreff des Beitrags: 

Zitat:
wenn man den Befehl plugin_exec jetzt ein wenig erweiter, dass man dem User xy vielleicht kurzfristig die Rechte erteilt und direkt danach wieder entzieht, wäre es vielleicht einfacher....
Das ist weniger graue Theorie als nicht durchdacht.

Autor:  daRope [ 19.04.2002, 16:12 ]
Betreff des Beitrags: 

Zitat:
Meinen Taskplaner, der automatisch plugin Befehle nach einer gewissen Zeit aufruft, kann ich aber somit vergessen
Abwarten. Mir sind dazu ein paar Ideen gekommen. Momentan denke ich darueber nach, ob man Funktionen, die entweder als Resultat einer Abstimmung (fuer die Netzgeschaedigten: vote) oder aber in plugin_init() aufgerufen werden, grundsaetzlich mit Serverechten ausfuehren laesst. Das waeren Anwendungen, wo es vielleicht Sinn machen wuerde.

Autor:  Sir Drink a lot [ 19.04.2002, 17:23 ]
Betreff des Beitrags: 

das wäre gut. :-)

Den Taskplaner kann man ihm Spiel demnächst nur noch mit dem höchsten Recht "manuell" nutzen, damit man Zugriff auf alle Plugins hat und sie somit auch nutzen darf. Dann baue ich die Befehlabarbeitung mal mit plugin_exec...

Schaun wir mal...

Autor:  MrSpoocy [ 19.04.2002, 17:27 ]
Betreff des Beitrags: 

dann sag mir doh bitte wie es mit der nästen geht , die du sicher bemerkt ahst haben auch adneren nicht kapiert wie das mit meinem befehl geht.

Autor:  [WING] Black Knight [ 19.04.2002, 18:52 ]
Betreff des Beitrags: 

OK,
vielleicht tut es mal Not zu erklären, warum das eine Sicherheitslücke ist. Am besten erkläre ich das anhand von Sir Drink a Lot's Taskplaner.
Wie die meisten wissen, kann man mit dem Taskplaner beliebige Befehle via einer task.cfg zu bestimmten Zeitpunkten auf dem Server ausführen lassen. Bislang hat er das bequem über exec("admin_command ...") gemacht. Nur das ist eine Sicherheitslücke.

Warum?
Nehmen wir einmal an, der Taskplaner würde einem bestimmten Userrecht zugesprochen (z.B. 256). Und nehmen wir an, ich hätte die Userrechte 65535 (also alles außer admin_rcon admin_execclient etc.). Ich habe damit auch keine Zugangsrechte auf admin_command. Aber ich darf den Taskplaner ausführen. Ich bin jetzt in der Lage über den Taskplaner via exec("admin_command admin_execclient") einen Befehl aufzurufen, zu dem ich eigentlich keinen Zugang haben darf, da mir das Recht 65536 fehlt.
Das könnte der Plugin-Programmierer zwar verhindern, in dem er die Rechte für das Plugin anpasst, aber was, wenn nicht? Viele laden sich nur die AMX-Datei runter. Und in Null Komma Nichts entpuppt sich ein tolles Plugin evtl. als Server-Trojaner! Und somit ist diese Entscheidung mehr als verständlich.

Was mache ich jetzt als Skripter?
Man verwendet plugin_exec(cmd, args). Diese Funktion überprüft, ob der Ausführende des Plugins auch das Recht für die auzuführende Funktion hat. In "cmd" braucht Ihr hier nur den Befehl einzutragen ohne admin_command und in args kommen die Argumente zum Befehl. Also Beispiel: "admin_map de_dust", "admin_map" ist cmd und "de_dust" gehört zu den args. Eigentlich ganz einfach.

Die exec-Funktion wird dann zu der Funktion, die sie schon immer sein sollte, nämlich das Setzen von Servervariablen.

Was aber wenn kein User das Plugin ausführt, sondern es nach einem Timer oder einem Event (LogD) aktiv wird?
Dann ist der User die Serverconsole und hat somit alle Rechte (131071). Das entspricht der admin_command Funktion, wenn sie direkt in der Serverconsole (für alle Gameserver-Providergeschädigten: Man kann direkt Befehle auf den Server schreiben) geschrieben wird (s. auch HLSW).

Somit bleibt eigentlich nur übrig, dass Pluginprogrammierer ein wenig mehr bei der Programmierung aufpassen sollten. Und ich begrüße diesen Schritt, da ich kein zweites Windows haben möchte. ;) Better save than sorry!

Autor:  MrSpoocy [ 19.04.2002, 21:53 ]
Betreff des Beitrags: 

Hat sich mal einer überlegt das wenn jemand die "task.cfg" beareiten will auch zugang zum FTP haben muß ? Also wenn er zugang zum ftp hat kann er sich auch einfach die rechte geben , oder liegt die task.cfg auf dem rechner des users ? ich kenne das script nicht , daher meine verwunderung.

Autor:  Sir Drink a lot [ 20.04.2002, 02:13 ]
Betreff des Beitrags: 

ja das stimmt schon. die task.cfg liegt auf dem Server und man muss Zugang über FTP oder sonstwas haben, um diese zu ändern.

Autor:  MrSpoocy [ 20.04.2002, 02:24 ]
Betreff des Beitrags: 

also dann versteh ich es absolut nicht. Wenn ich ftp zugriff hab dann geb ich mir halt adminrechte die ich will. Also erlich gesagt find ich es doof das der befehl abgeschaft wird, zu der aussage das viele nur die AMX datei saugen, naja ihr stellt die scripte doch online ? Und ich denk mal ihr prüft die auch, und wenn nicht könnte man sich einmal den aufwand machen, und dann ist es so das auf adminmod.de nur scripte sind die kein sicherheitslag darstellen. Und alle neuen scripte prüfen is ja dann nicht schwer. Man sollte mal einen vote starten, ob der befehl nicht bleiben soll und die user sich dem eigenen rieseko aussetzen das wenn sie scripte nur saugen eventuel eine sicherheitslücke darstellt. Wobei das doch auch sinlos is , weil jeder coder kann sich doch eh nee hintertür offen lassen, dann würde der user doch auch die amx datei saugen oder ? In so ferhn nützt nicht die abschaltung des befehles was sondern einfach jedes script durch zu gehen was bei adminmod.de online gestellt wird. Das ist meiner meinung nach das einzigste.

Autor:  Sir Drink a lot [ 20.04.2002, 03:05 ]
Betreff des Beitrags: 

eigentlich auch wieder war.
Man muss sich als Coder eben Gedanken machen, welches Sicherheitsleck man eröffnet und es schliesst.

daRope ?

Autor:  MrSpoocy [ 20.04.2002, 03:11 ]
Betreff des Beitrags: 

wie , du hast auf anhieb meinen text verstanden ? Hab ich endlich mal einen text so geschrieben das ihn andere verstehen ? *mich mal selbt lob :-)))*

Seite 2 von 3 Alle Zeiten sind UTC+01:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/