Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

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)
  • Autor

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

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.