Zum Inhalt springen

Lua-Script bei Telegram CLI: Gesendeten Text an Script übergeben


Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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)
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von occi23
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...