occi23 Geschrieben 15. Oktober 2018 Teilen Geschrieben 15. Oktober 2018 Hallo, ich versuche gerade Telegram CLI auf meinem Pi aufzusetzen. Man hat da die Möglichkeit über den Android-Clienten Nachrichten an sich selbst zu senden und darüber dann auf dem Pi bestimmte Aktionen auszulösen. Dafür wird Lua genutzt, wovon ich aber wenig Ahnung habe. Das hier läuft erstmal problemlos: function on_msg_receive (msg) if msg.out then return end if (string.find(msg.text, 'text')) then os.execute('/home/pi/test') end end Wenn eine Nachricht den Text 'text' enthält wird ein Script gestartet. Ich möchte nun die gesendeten Text an das Script anhängen und an das Script übergeben. Mit folgender Zeile kann ich mir einfach nochmal den gleichen Text den ich gesendet hab zusenden lassen: send_msg (msg.from.print_name, msg.text , ok_cb, false) Der entscheidende Teil ist hier 'msg.text'. Wenn ich aber einfach 'msg.text' hinten an das Script anhänge, verweigert Telegram CLI den Start mit dem Lua-Script. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
occi23 Geschrieben 15. Oktober 2018 Autor Teilen Geschrieben 15. Oktober 2018 Scheinbar geht es so: os.execute("/home/pi/test " .. msg.text) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
el_pollo_diablo Geschrieben 15. Oktober 2018 Teilen Geschrieben 15. Oktober 2018 Nennt sich auch "string concatenation", also das Zusammenfügen von Strings (siehe z.B. https://www.lua.org/pil/3.4.html ). Was Du allerdings vermutlich noch unbedingt überprüfen solltest: Wurde os.execute überlagert? (es ist je nach LUA-Integration möglich, bestimmte Funktionen und anderes zu überschreiben, um damit z.B. kritische Aktionen zu verhindern) Ist es möglich mit os.execute mehrere Befehle nacheinander auszuführen (wie auf der normalen Shell)? Damit kann dann unter Umständen, ähnlich zu einer fortgeschrittenen SQL-Injection, schädlicher Code ausgeführt werden (siehe z.B. https://www.owasp.org/index.php/Command_Injection ) Kann man auch die Verzeichnisstruktur verlassen und zum Beispiel Dateien in anderen Ordnern ausführen oder läuft das Ganze bereits in einer Sandbox ab? Welcher Benutzer wird für die Ausführung verwendet? (wegen Rechten und Zugriff auf sensible Dateien) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
occi23 Geschrieben 16. Oktober 2018 Autor Teilen Geschrieben 16. Oktober 2018 (bearbeitet) Ich bin derzeit noch dabei das ganze überhaupt zum laufen zu bringen. Wenn das geschafft ist, geh ich ans Feintuning. Ist es möglich auch Platzhalter als String anzugeben? Bei if (string.find(msg.text, 'text')) then wird das Skript ja ausgeführt, wenn 'text' enthalten ist. Könnte man das so abändern, dass es ausgeführt wird wenn 'text' am Ende steht, also so wie '*text'? Also irgendetwas davor kommen kann (aber nicht muss), aber nichts danach kommen darf? Hab das mal mit Regex versucht if msg.text=='[0-9]text') then und als Text '1text' gesendet. Wurde NICHT gefunden. Bearbeitet 16. Oktober 2018 von occi23 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Whiz-zarD Geschrieben 16. Oktober 2018 Teilen Geschrieben 16. Oktober 2018 Wie auch? Du prüfst, ob der String gleich "[0-9]text" ist. Reguläre Ausdrücke funktionieren hier nicht. Schau Mal hier nach, ob das ist, was du suchst. http://lua-users.org/wiki/PatternsTutorial Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dekmar Geschrieben 16. Oktober 2018 Teilen Geschrieben 16. Oktober 2018 Scheinbar geht es so:os.execute("/home/pi/test " .. msg.text) Bitte prüf noch ob os.execute 0 zurück gibt, solange dein pi/test auch irgendwelche Statuscodes zurück gibt. Dann weisst du ob was fehlerhaftes passiert ist Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.