occi23 Geschrieben 15. Oktober 2018 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.
occi23 Geschrieben 15. Oktober 2018 Autor Geschrieben 15. Oktober 2018 Scheinbar geht es so: os.execute("/home/pi/test " .. msg.text)
el_pollo_diablo Geschrieben 15. Oktober 2018 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)
occi23 Geschrieben 16. Oktober 2018 Autor 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
Whiz-zarD Geschrieben 16. Oktober 2018 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
dekmar Geschrieben 16. Oktober 2018 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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden