웹 페이지에서 클릭 이벤트시 쉘 명령 실행


11

브라우저에서 텍스트를 클릭 할 때 bash 명령을 실행하는 방법이 있습니까?

웹 페이지는 컴퓨터 A에 있고 브라우저는 컴퓨터 B에 있습니다. 예 hsetroot를 들어 이미지를 클릭 할 때 배경 화면을 변경하기 위해 컴퓨터 B에서 코드를 실행하고 싶습니다 .

답변:


5

아니, 아니 이것이 모든 보안 허점의 어머니입니다. 클라이언트 시스템에서 임의의 명령을 실행하는 웹 페이지를 설정할 수 있는지 묻습니다. 이 명령을 실행하는 웹 페이지를 설정하면 어떻게됩니까?

rm -rf ~/

의 모든 파일이 삭제됩니다 $HOME. 실제로 최근 에 이런 일이 일어날 수 있는 버그가 발견 되었을 때 소란 이있었습니다. 가능한 공격 경로 중 하나는 클라이언트 (귀하의 컴퓨터 B)가 bash 명령을 실행하도록 속이는 것입니다.

따라서 웹 브라우저를 통해 로컬 컴퓨터에서 임의의 코드를 실행할 수 없습니다. 어떻게 든 먼저 로그인하지 않아도됩니다. JavaScript 또는 유사한 언어 명령을 실행할 수 있지만 사용자 세션에 액세스 할 수 없습니다.


답을 주셔서 감사합니다, 나는 명백한 문제를 이해합니다. 나는 사용자 정의 브라우저로 그것을 달성하려고 노력하고있다 : stackoverflow.com/questions/30963508/…
bob dylan

@bobdylan 나는 그것이 가능하지 않다고 생각합니다. 나는 그것이 어쨌든 그렇지 않기를 바랍니다. 그건 그렇고 멋진 작은 프로그램입니다. 나는 그것이 그렇게 간단하다는 것을 몰랐다! 그러나 요점은 브라우저에서 로컬 셸 세션을 시작할 수 없다고 생각합니다.
terdon

내 OS에 연결된 일부 기능을 갖춘 하이브리드 웹 사이트 / 프로그램을 만들고 싶다고 가정 해 봅시다. 따라서 내 브라우저는 일반적인 "브라우저"가 아닙니다. 그래서 어떻게 불가능한지 모르겠습니다.
bob dylan

확실히 프로그램이 할 수 있습니다. FTP 클라이언트와 브라우저 (HTTP 클라이언트) 사이에는 원칙적으로 로컬 사용자 및 서버와 상호 작용하는 차이가 없습니다. FTP 클라이언트는 로컬 파일을 수정하고 (일부) 로컬 명령을 실행할 수 있습니다. 물론, 그것은 단지 사용자의 요청에 의한 것이지만, 그것은 진정한 제약이 아닙니다. 따라서 브라우저도 똑같이 할 수 있습니다 . 약 10 년 전, 일부 주요 브라우저에는 보안 설정이 너무 낮아서이를 허용했지만 자세한 내용은 기억 나지 않았으며 그 이후에는 상황이 강화되었을 수 있습니다.
G-Man, 'Reinstate

@ G-Man 클릭이 브라우저로 다시 전달되어 셸 세션이 시작될 수 있는지 모르겠습니다. FTP는 정의에 따라 세션을 시작하기 때문에 매우 다릅니다. 나는 그것이 100 % 불가능하다는 것을 말하지 않고, 정말로 모른다. 나는 그것이 불가능하다고 생각 하고 기존 브라우저로는 확실히 불가능하다.
terdon

3

일반적으로 그렇게 할 수는 없지만 클라이언트 시스템 B를 제어 할 수있는 정의 된 환경에서 시스템 B가 setroot 서비스를 실행하도록 제안 할 수 있습니다. 예를 들어 nodejs 또는 golang을 사용하여 직접 작성하여 대화 할 수 있습니다. 당신이 이벤트를받을 때 서비스. 그러나 어떤 경우에도 머신 B에 추가 서비스를 설치하지 않으면 기회가 없습니다 (또는 적어도 기회가 없어야 함).


이전에 NodeJ를 사용한 적이 없습니다. 당신은 내가 같은 간단한 자바 스크립트를 사용할 수 있음을 의미합니다 : run("whatever command on machine B");?
bob dylan

예, nodejs는 그러한 감소 된 요구에 사용하기가 매우 간단합니다.
ikrabbe

@ikrabbe : 500 명에 도달 한 것을 축하합니다. (그리고, BTW, 귀여운 그라바타. 내 고양이 근처에서 당신의 슈퍼 다람쥐를 풀어주지 마십시오! :-)
G-Man은 '복지 모니카'

3

nodeJS 서버를 사용하여 해결합니다. (깨끗한 / 최종 코드가 아니라 작동)

컴퓨터 A : (서버)

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

컴퓨터 B :로 server.js실행되는 ans 라는 (클라이언트) 파일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);

내 대답으로 당신이 사용하는 방법으로 인도 했으므로 요청 한대로 코드를 포함하여 내 대답에 대한 편집을 요청하고 쉘 명령을 실행하는 방법을 설명하는 것을 제외하고는 좋을 것입니다. 그리고 일반적인 접근 방식입니다. 클라이언트 시스템을위한 휴대용 서비스를 작성하면 많은 일을 할 수 있습니다. 내 대답에 투표하면 괜찮을 것입니다.
ikrabbe

2
@ikrabbe OP는 투표 할 수 없으며 담당자가 없습니다. 수락에 관해서는, 네 대답 (내가 투표 한 것)은 실제로 그들에게 포인터를 주었지만 nodejs를 사용할 수있는 방법 을 설명하지 않았 거나 예제를 제시하지 않았습니다. 귀하의 답변은 매우 유용했지만 OP의 문제를 실제로 해결하지는 못했으며 올바른 방향으로 만 지적했습니다. 자신의 답변을 게시하고 수락하는 것은 완벽합니다.
terdon

0

PHP는 예를 들어 /var/www/.../folder/mytextfie.txt와 같이 브라우저를 통해 텍스트 파일의 내용을 변경할 수 있습니다. 해당 파일에서 문자열을 가져와야합니다. .

텍스트 파일에 실행 파일이 있는지 확인하기 위해 cronjob을 실행할 수 있습니다.

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

해당 텍스트 파일의 컨텍스트 :

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

te while 루프를 사용하면 해당 텍스트 파일에서 명령을 실행할 수 있습니다.


0

네 .. neutralinojs 로 가능합니다 .

사용할 수 있습니다 Neutralino.os.runCommand(). 그러나 시나리오에서 Neutralino 클라우드 모드를 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.