对网页中的单击事件执行shell命令


11

当我在浏览器中单击文本时,是否可以执行bash命令?

网页位于计算机A上,浏览器位于计算机B上:我想在计算机B上执行代码,例如hsetroot,单击图像时更改墙纸。

Answers:


5

不是,不是 那是所有安全漏洞的根源。您正在询问是否可以设置一个网页,以在客户端计算机上执行任意命令。如果我设置一个运行此命令的网页怎么办:

rm -rf ~/

这将删除您的中的所有文件$HOME。实际上,最近发现一个允许这种情况发生的错误引起轩然大波。一种可能的攻击手段是欺骗客户端(在您的情况下为计算机B)运行bash命令。

因此,不能,您无法通过Web浏览器在本地计算机上执行任意代码。并非没有某种方式首先登录。您可以运行JavaScript或类似语言的命令,但它们将无权访问您的用户会话。


感谢您的回答,我了解那里的明显问题。我试图实现与定制的浏览器:stackoverflow.com/questions/30963508/...
鲍勃·迪伦

@bobdylan我认为不可能。我当然希望不是这样。顺便说一句,这是一个很棒的小程序。我不知道这是那么简单!但是,要点是我认为无法从浏览器启动本地shell会话。
terdon

好吧,假设我要制作一个具有与我的操作系统链接的功能的混合网站/程序。因此,我的浏览器将不再是普通的“浏览器”。所以我看不到这是不可能的。
鲍勃·迪伦2015年

当然,程序可以执行此操作。考虑:FTP客户端和浏览器(HTTP客户端)在原理上没有区别-两者都与本地用户和服务器交互。通常,FTP客户端可以修改本地文件并执行(某些)本地命令。当然,这只是应用户的要求,但这并不是真正的约束。因此,浏览器可以执行相同的操作。大约十年前,我听说某些主要的浏览器的安全性设置太低,以至于他们允许这样做,但是我不记得详细信息,从那时起事情可能已经收紧了。
G-Man说'恢复莫妮卡'

@ G-Man我不知道是否有可能将单击传递回浏览器并导致Shell会话开始。FTP是非常不同的,因为它按照定义启动了会话。我并不是说这100%不可能,我真的不知道,我只是认为这是不可能的,并且对于现有的浏览器当然是不可能的。
terdon

3

通常,您无法执行此操作,但是在可以控制客户端计算机B的定义环境中,您可以建议计算机B运行setroot服务,例如,您可以简单地使用nodejs或golang自己编写并与之对话收到活动时提供服务。但是无论如何,如果您没有在计算机B上安装一些额外的服务,那么您将没有任何机会(或者至少永远没有机会)。


我以前从未使用过NodeJ。你的意思是我可以用一个简单的JavaScript,如:run("whatever command on machine B");
鲍勃·迪伦2015年

是的,nodejs非常简单,可以满足这种减少的需求。
ikrabbe 2015年

@ikrabbe:恭喜您获得500个声誉。(而且,顺便说一句,可爱的gravatar不要让你的超级松鼠靠近我的猫松:-)!
G-人说'恢复莫妮卡

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.jsans的文件执行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);

因为我的答案引导您找到了所要使用的方法,所以很高兴只对我的答案进行编辑,包括您的代码,除了我描述了您执行shell命令的方法外,它及其一般方法。为客户端计算机编写可移植的服务可以完成很多事情。如果您投票支持我的回答,那也可以。
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循环,可以从该文本文件执行命令。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.