Führen Sie einen Shell-Befehl bei einem Klickereignis auf einer Webseite aus

10

Gibt es eine Möglichkeit, einen Bash-Befehl auszuführen, wenn ich in einem Browser auf einen Text klicke?

Die Webseite befindet sich auf Computer A, der Browser befindet sich auf Computer B: Ich möchte den Code auf Computer B ausführen, z. B. hsetrootum das Hintergrundbild beim Klicken auf ein Bild zu ändern.

Bob Dylan
quelle

Antworten:

5

Nicht wirklich, nein. Das ist die Mutter aller Sicherheitslücken. Sie fragen, ob Sie eine Webseite einrichten können, die beliebige Befehle auf dem Client-Computer ausführt. Was ist, wenn ich eine Webseite einrichte, auf der dieser Befehl ausgeführt wird:

rm -rf ~/

Das würde alle Dateien in Ihrem löschen $HOME. Tatsächlich gab es kürzlich einen Aufruhr, als ein Fehler entdeckt wurde , der dies ermöglichte. Einer der möglichen Angriffsmethoden bestand darin, den Client (in Ihrem Fall Computer B) dazu zu bringen, einen Bash-Befehl auszuführen.

Nein, Sie können keinen beliebigen Code auf Ihrem lokalen Computer über einen Webbrowser ausführen. Nicht ohne sich vorher irgendwie einzuloggen. Sie können JavaScript- oder ähnliche Sprachbefehle ausführen, diese haben jedoch keinen Zugriff auf die Sitzung Ihres Benutzers.

terdon
quelle
Vielen Dank für die Antwort, ich verstehe das offensichtliche Problem dort. Ich versuche das mit einem benutzerdefinierten Browser zu erreichen: stackoverflow.com/questions/30963508/…
Bob Dylan
@ Bobdylan Ich denke nicht, dass das möglich ist. Ich hoffe es ist sowieso nicht so. Das ist übrigens ein cooles kleines Programm. Ich hatte keine Ahnung, dass es so einfach ist! Der Punkt ist jedoch, dass ich nicht denke, dass es möglich ist, eine lokale Shell-Sitzung über den Browser zu initiieren.
Terdon
Nehmen wir an, ich möchte eine hybride Website / ein Hybridprogramm mit einigen Funktionen erstellen, die mit meinem Betriebssystem verknüpft sind. Mein Browser ist also kein normaler "Browser". Ich sehe also nicht, wie es nicht möglich ist.
Bob Dylan
Sicher ist es möglich, dass ein Programm dies tut. Bedenken Sie: Es gibt im Prinzip keinen Unterschied zwischen einem FTP-Client und einem Browser (einem HTTP-Client) - beide interagieren mit einem lokalen Benutzer und mit einem Server. Trivialerweise kann der FTP-Client lokale Dateien ändern und (einige) lokale Befehle ausführen. Sicher, es ist nur auf Anfrage des Benutzers, aber das ist keine wirkliche Einschränkung. Ein Browser kann also dasselbe tun. Ich habe vor ungefähr zehn Jahren gehört, dass einige der wichtigsten Browser eine so niedrige Sicherheitseinstellung hatten, dass sie dies zuließen, aber ich erinnere mich nicht an Details, und die Dinge wurden wahrscheinlich seitdem verschärft.
G-Man sagt "Reinstate Monica"
@ G-Man Ich weiß nicht, ob es möglich ist, dass ein Klick an den Browser zurückgegeben wird und eine Shell-Sitzung startet. FTP ist sehr unterschiedlich, da dies per Definition eine Sitzung initiiert. Ich sage nicht, dass es 100% unmöglich ist, ich weiß es nicht wirklich, ich denke nur, dass es unmöglich ist und es mit vorhandenen Browsern sicherlich nicht möglich ist.
Terdon
3

Sie können dies im Allgemeinen nicht tun, aber in einer definierten Umgebung, in der Sie den Client-Computer B steuern können, können Sie vorschlagen, dass Computer B einen Setroot-Dienst ausführt. Sie können beispielsweise einfach selbst mit NodeJS oder Golang schreiben und mit diesem sprechen Service, wenn Sie die Veranstaltung erhalten. Aber auf jeden Fall haben Sie keine Chance (oder zumindest sollten Sie nie eine Chance haben), wenn Sie keinen zusätzlichen Service auf Maschine B installieren.

ikrabbe
quelle
Ich habe noch nie NodeJs verwendet. Du meinst, ich kann ein einfaches Javascript verwenden wie : run("whatever command on machine B");?
Bob Dylan
Ja, NodeJS ist sehr einfach für solche reduzierten Anforderungen zu verwenden.
Ikrabbe
@ikrabbe: Herzlichen Glückwunsch zum Erreichen von 500 Ruf. (Und übrigens, süßer Gravatar. Lass dein Super-Eichhörnchen nur nicht in der Nähe meiner Katzen los! :-)
G-Man sagt 'Reinstate Monica'
3

Ich löse es mit einem NodeJS-Server. (kein sauberer / endgültiger Code, aber er funktioniert)

Computer A: (Server)

function change_wallpaper(image){
    var objReq = new XMLHttpRequest();
    objReq.open("GET", "http://localhost:8888" + "?image=" + image, false);
    objReq.send(null);
}
<img src="./img/1.jpeg" onclick="change_wallpaper(this.src);" />
<img src="./img/2.jpeg" onclick="change_wallpaper(this.src);" />

Computer B: (Client-) Datei namens server.jsans ausgeführt mitnodejs server.js

var http = require("http");
var sys = require('sys')
var exec = require('child_process').exec;
var url = require("url");

function onRequest(request, response) {
    var params = url.parse(request.url,true).query;
    function puts(error, stdout, stderr) {sys.puts(stdout)}
    exec("/usr/bin/feh --bg-center " + params.image, puts);
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Wallpaper');
}

http.createServer(onRequest).listen(8888);
Bob Dylan
quelle
Als meine Antwort Sie zu der Methode führte, nach der Sie gefragt haben, wäre es schön gewesen, nur nach einer Bearbeitung für meine Antwort zu fragen, einschließlich Ihres Codes, und es sei denn, ich beschreibe eine Methode zum Ausführen eines Shell-Befehls, wie Sie gefragt haben für und es ist ein allgemeiner Ansatz. Das Schreiben von tragbaren Diensten für Client-Computer kann viele, viele Dinge tun. Wenn Sie für meine Antwort stimmen würden, wäre das auch in Ordnung.
Ikrabbe
1
@ikrabbe das OP kann nicht wählen, sie haben nicht den Repräsentanten. Ja, Ihre Antwort (die ich positiv bewertet habe) hat ihnen zwar einen Hinweis gegeben, aber Sie haben weder erklärt, wie sie nodejs verwenden können, noch haben Sie ein Beispiel gegeben. Ihre Antwort war sehr nützlich, hat aber das Problem des OP nicht wirklich gelöst, sondern nur in die richtige Richtung gelenkt. Ihre eigene Antwort zu posten und zu akzeptieren ist vollkommen in Ordnung.
Terdon
0

PHP kann den Inhalt von Textdateien im Browser ändern, z. B. in /var/www/.../folder/mytextfie.txt. Sie müssen nur die Zeichenfolge aus dieser Datei abrufen. Dies kann ein Befehl oder sogar ein Befehl zum Starten einer Skriptdatei sein .

Ein Cronjob kann ausgeführt werden, um zu überprüfen, ob die Textdatei eine ausführbare Datei enthält.

#!/usr/bin/env bash
echo $(cat /var/www/.../folder/commandsperline.txt)
#or 
while read line
    do
    echo "$(${line})"
done< "/var/www/.../folder/commandsperline.txt"

Kontext dieser Textdatei:

#!/bin bash
#you need to declare absolute path
# chmod 755 /home/user/*.sh -to make executabble all scripts there
/home/user/backup.sh
/home/user/anyscript.sh

Mit der while while-Schleife ist es möglich, Befehle aus dieser Textdatei auszuführen.

stefansson
quelle
0

Ja .. es ist mit neutralinojs möglich .

Sie können verwenden Neutralino.os.runCommand(). In Ihrem Szenario kann jedoch der Neutralino-Cloud-Modus verwendet werden.

Shalitha Suranga
quelle