Wykonaj polecenie powłoki po zdarzeniu kliknięcia na stronie internetowej


11

Czy istnieje sposób na wykonanie polecenia bash po kliknięciu tekstu w przeglądarce?

Strona internetowa znajduje się na komputerze A, przeglądarka jest na komputerze B: Chcę wykonać kod na komputerze B, np. hsetrootZmienić tapetę po kliknięciu obrazu.

Odpowiedzi:


5

Nie, naprawdę nie. To jest matka wszystkich luk bezpieczeństwa. Pytasz, czy możesz skonfigurować stronę internetową, która wykonuje dowolne polecenia na komputerze klienta. Co się stanie, jeśli skonfiguruję stronę internetową, na której działa to polecenie:

rm -rf ~/

Spowoduje to usunięcie wszystkich plików w twoim $HOME. W rzeczywistości ostatnio pojawiło się zamieszanie, gdy wykryto błąd, który pozwolił na to. Jednym z możliwych wektorów ataku było nakłonienie klienta (w twoim przypadku do komputera B) do uruchomienia polecenia bash.

Więc nie, nie można wykonać dowolnego kodu na komputerze lokalnym za pomocą przeglądarki internetowej. Nie bez pierwszego logowania. Możesz uruchamiać komendy JavaScript lub podobnego języka, ale nie będą one miały dostępu do sesji użytkownika.


Dziękuję za odpowiedź, rozumiem oczywisty problem. Próbuję to osiągnąć za pomocą niestandardowej przeglądarki: stackoverflow.com/questions/30963508/...
bob dylan

@ Bobdylan Nie sądzę, że to możliwe. Z pewnością mam nadzieję, że tak nie jest. Nawiasem mówiąc, to fajny mały program. Nie miałem pojęcia, że ​​to takie proste! Chodzi jednak o to, że nie sądzę, aby można było zainicjować lokalną sesję powłoki z przeglądarki.
terdon

Powiedzmy, że chcę stworzyć hybrydową stronę internetową / program z pewną funkcjonalnością powiązaną z moim systemem operacyjnym. Więc moja przeglądarka nie będzie zwykłą „przeglądarką”. Więc nie rozumiem, jak to niemożliwe.
Bob Dylan

Z pewnością program może to zrobić. Zastanów się: w zasadzie nie ma różnicy między klientem FTP a przeglądarką (klientem HTTP) - zarówno interakcja z użytkownikiem lokalnym, jak i serwerem. Trywialnie klient FTP może modyfikować lokalne pliki i wykonywać (niektóre) lokalne polecenia. Jasne, to tylko na żądanie użytkownika, ale to nie jest prawdziwe ograniczenie. Przeglądarka może zrobić to samo. Słyszałem, około dziesięć lat temu, że niektóre z głównych przeglądarek mają tak niskie ustawienia zabezpieczeń, że na to pozwalają, ale nie pamiętam szczegółów, a od tego czasu prawdopodobnie wszystko zostało zaostrzone.
G-Man mówi „Reinstate Monica”

@ G-Man Nie wiem, czy jest możliwe, aby kliknięcie zostało zwrócone z powrotem do przeglądarki i spowodowało rozpoczęcie sesji powłoki. FTP różni się bardzo, ponieważ z definicji inicjuje sesję. Nie twierdzę, że to w 100% niemożliwe, tak naprawdę nie wiem, po prostu myślę, że to niemożliwe i na pewno nie jest możliwe w istniejących przeglądarkach.
terdon

3

Zasadniczo nie można tego zrobić, ale w zdefiniowanym środowisku, w którym można sterować maszyną kliencką B, można zaproponować, aby maszyna B uruchomiła usługę setroot, można po prostu napisać samodzielnie, na przykład za pomocą nodejs lub golang, i porozmawiać z tym usługa po otrzymaniu wydarzenia. Ale w każdym razie nie masz szansy (a przynajmniej nigdy nie powinieneś mieć szansy), jeśli nie zainstalujesz dodatkowych usług na komputerze B.


Nigdy wcześniej nie korzystałem z NodeJs. To znaczy, że można użyć prostego javascript, takich jak: run("whatever command on machine B");?
Bob Dylan,

tak, nodejs jest bardzo prosty w użyciu dla tak ograniczonych potrzeb.
ikrabbe

@ikrabbe: Gratulujemy zdobycia 500 reputacji. (I, BTW, słodki gravatar. Po prostu nie pozwól swojej super-wiewiórki luźno przy moich kotach! :-)
G-Man mówi „Przywróć Monikę”

3

Rozwiązuję go za pomocą serwera nodeJS. (nie czysty / końcowy kod, ale działa)

Komputer A: (serwer)

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);" />

Komputer B: plik (klienta) o nazwie server.jsans wykonany za pomocąnodejs 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);

ponieważ moja odpowiedź zaprowadziła cię do metody, o którą prosiłeś, byłoby miło poprosić o edycję mojej odpowiedzi, w tym kodu i oprócz tego, ponieważ opisuję metodę wykonania polecenia powłoki, tak jak prosiłeś i jego ogólne podejście. Pisanie przenośnych usług dla komputerów klienckich może zrobić wiele, wiele rzeczy. Jeśli zagłosowałbyś na moją odpowiedź, to też byłoby w porządku.
ikrabbe

2
@ikrabbe OP nie może głosować, nie ma przedstawiciela. Jeśli chodzi o akceptację, tak, twoja odpowiedź (którą poparłem) rzeczywiście dała im wskaźnik, ale nie wyjaśniłeś, w jaki sposób mogą używać nodejs, ani nie podałeś przykładu. Twoja odpowiedź była bardzo przydatna, ale tak naprawdę nie rozwiązała problemu PO, tylko skierowała ich we właściwym kierunku. Opublikowanie własnej odpowiedzi i zaakceptowanie jej jest całkowicie OK.
terdon

0

PHP może zmieniać zawartość plików tekstowych w przeglądarce, na przykład w /var/www/.../folder/mytextfie.txt Musisz tylko pobrać ciąg z tego pliku, który może być poleceniem lub nawet poleceniem, aby uruchomić plik skryptu .

cronjob może uruchomić, aby sprawdzić, czy plik tekstowy zawiera dowolny plik wykonywalny.

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

kontekst tego pliku tekstowego:

#!/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

Za pomocą te while loop można wykonywać polecenia z tego pliku tekstowego.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.