ดำเนินการคำสั่งเชลล์กับเหตุการณ์คลิกในหน้าเว็บ


11

มีวิธีรันคำสั่ง bash เมื่อฉันคลิกที่ข้อความในเบราว์เซอร์หรือไม่?

หน้าเว็บอยู่ในคอมพิวเตอร์ A เบราว์เซอร์อยู่ในคอมพิวเตอร์ B: ฉันต้องการรันโค้ดบนคอมพิวเตอร์ B เช่นhsetrootเปลี่ยนภาพพื้นหลังเมื่อคลิกที่ภาพ

คำตอบ:


5

ไม่จริงไม่ นั่นคือแม่ของรูโหว่ทั้งหมด คุณกำลังถามว่าคุณสามารถตั้งค่าเว็บเพจที่ดำเนินการคำสั่งโดยพลการบนเครื่องของลูกค้าได้หรือไม่ ถ้าฉันตั้งค่าเว็บเพจที่รันคำสั่งนี้:

rm -rf ~/

$HOMEที่จะลบไฟล์ทั้งหมดในของคุณ ในความเป็นจริงเมื่อไม่นานมานี้มีความโกลาหลเมื่อพบข้อผิดพลาดที่ทำให้สิ่งนี้เกิดขึ้นได้ หนึ่งในเวกเตอร์การโจมตีที่เป็นไปได้คือการหลอกลวงลูกค้า (คอมพิวเตอร์ B ในกรณีของคุณ) ให้เรียกใช้คำสั่ง bash

ดังนั้นไม่คุณไม่สามารถรันโค้ดบนเครื่องของคุณผ่านเว็บเบราว์เซอร์ได้ ไม่ได้โดยไม่ต้องเข้าสู่ระบบอย่างใดก่อน คุณสามารถเรียกใช้ JavaScript หรือคำสั่งภาษาที่คล้ายกัน แต่พวกเขาจะไม่สามารถเข้าถึงเซสชันของผู้ใช้ของคุณ


ขอบคุณสำหรับคำตอบฉันเข้าใจปัญหาที่ชัดเจนที่นั่น ฉันพยายามที่จะทำให้สำเร็จด้วยเบราว์เซอร์ที่กำหนดเอง: stackoverflow.com/questions/30963508/…
bob dylan

@ Bobdylan ฉันไม่คิดว่าเป็นไปได้ แน่นอนฉันหวังว่ามันจะไม่อยู่ดี นั่นเป็นโปรแกรมเล็ก ๆ ที่เยี่ยมยอด ฉันไม่รู้ว่ามันง่ายที่จะทำ! อย่างไรก็ตามประเด็นก็คือฉันไม่คิดว่าจะเป็นไปได้ที่จะเริ่มต้นเซสชันเชลล์ท้องถิ่นจากเบราว์เซอร์
terdon

สมมติว่าฉันต้องการสร้างเว็บไซต์ / โปรแกรมไฮบริดที่มีฟังก์ชั่นบางอย่างเชื่อมโยงกับระบบปฏิบัติการของฉัน ดังนั้นเบราว์เซอร์ของฉันจะไม่เป็น "เบราว์เซอร์" ปกติ ดังนั้นฉันไม่เห็นว่ามันเป็นไปไม่ได้
bob dylan

แน่นอนว่าเป็นไปได้ที่โปรแกรมจะทำ ข้อควรพิจารณา: โดยหลักการแล้วระหว่างไคลเอนต์ FTP กับเบราว์เซอร์ (ไคลเอนต์ HTTP) ไม่มีความแตกต่างกัน - ทั้งการโต้ตอบกับผู้ใช้ภายในและเซิร์ฟเวอร์ ไคลเอนต์ FTP สามารถแก้ไขไฟล์โลคัลและรันคำสั่งโลคัล (บางส่วน) ได้ แน่นอนว่าเป็นเพียงการร้องขอของผู้ใช้ แต่นั่นไม่ใช่ข้อ จำกัด ที่แท้จริง ดังนั้นเบราว์เซอร์สามารถทำเช่นเดียวกัน ฉันได้ยินมาประมาณสิบปีที่แล้วว่าเบราว์เซอร์หลักบางแห่งมีการตั้งค่าความปลอดภัยต่ำจนพวกเขาอนุญาต แต่ฉันไม่จำรายละเอียดและสิ่งต่าง ๆ อาจจะแน่นตั้งแต่นั้นมา
G-Man กล่าวว่า 'Reinstate Monica'

@ G-Man ฉันไม่รู้ว่าเป็นไปได้หรือไม่ที่การคลิกจะถูกส่งกลับไปยังเบราว์เซอร์และทำให้เชลล์เริ่มทำงาน FTP นั้นแตกต่างกันอย่างมากตั้งแต่เริ่มเซสชันโดยนิยาม ฉันไม่ได้บอกว่ามันเป็นไปไม่ได้ 100% ฉันไม่รู้จริงๆฉันแค่คิดว่ามันเป็นไปไม่ได้และแน่นอนว่ามันเป็นไปไม่ได้กับเบราว์เซอร์ที่มีอยู่
terdon

3

คุณไม่สามารถทำได้โดยทั่วไป แต่ในสภาพแวดล้อมที่กำหนดซึ่งคุณสามารถควบคุมเครื่องไคลเอนต์ B ได้คุณสามารถเสนอให้เครื่อง B รันบริการ setroot คุณสามารถเขียนด้วยตนเองด้วย nodejs หรือ golang และพูดคุยกับสิ่งนั้น บริการเมื่อคุณได้รับเหตุการณ์ แต่ในกรณีใด ๆ คุณไม่มีโอกาส (หรืออย่างน้อยคุณไม่ควรมีโอกาส) หากคุณไม่ได้ติดตั้งบริการเพิ่มเติมบนเครื่อง B


ฉันไม่เคยใช้ NodeJs มาก่อน คุณหมายถึงฉันสามารถใช้จาวาสคริปต์ง่ายๆเช่น: run("whatever command on machine B");?
bob dylan

ใช่ nodejs นั้นใช้ง่ายมากสำหรับความต้องการที่ลดลงดังกล่าว
ikrabbe

@ikrabbe: ขอแสดงความยินดีกับการมีชื่อเสียง 500 คน (และ BTW, gravatar น่ารักอย่าปล่อยซุปเปอร์กระรอกของคุณให้หลุดเข้าไปใกล้แมวของฉัน! :-)
G-Man พูดว่า 'Reinstate Monica'

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

เมื่อคำตอบของฉันนำคุณไปสู่วิธีการใช้งานคุณถามว่าจะเป็นการดีที่ได้ขอให้แก้ไขคำตอบของฉันรวมถึงรหัสของคุณและยกเว้นว่าจะอธิบายวิธีเรียกใช้คำสั่งเชลล์ตามที่คุณถาม และเป็นวิธีการทั่วไป การเขียนบริการแบบพกพาสำหรับเครื่องไคลเอนต์สามารถทำได้หลายอย่างหลายอย่าง หากคุณจะลงคะแนนสำหรับคำตอบของฉันที่จะตกลงเช่นกัน
ikrabbe

2
@ikrabbe OP ไม่สามารถลงคะแนนพวกเขาไม่มีตัวแทน สำหรับการตอบรับใช่คำตอบของคุณ (ซึ่งฉันทำ upvote) ได้ให้ตัวชี้แก่พวกเขาแล้ว แต่คุณไม่ได้อธิบายว่าพวกเขาสามารถใช้ nodejs ได้อย่างไรหรือคุณยกตัวอย่าง คำตอบของคุณมีประโยชน์มาก แต่มันก็ไม่ได้แก้ปัญหาของ OP จริงๆมันชี้เฉพาะพวกเขาในทิศทางที่ถูกต้อง การโพสต์คำตอบของตนเองและยอมรับว่ามันโอเคอย่างสมบูรณ์
terdon

0

PHP สามารถเปลี่ยนเนื้อหาของ textfiles ข้ามเบราว์เซอร์ตัวอย่างเช่นใน /var/www/.../folder/mytextfie.txt คุณมีเพียงเพื่อรับสายจากไฟล์นั้น whitch สามารถเป็นคำสั่งหรือแม้แต่คำสั่งเพื่อเริ่มไฟล์สคริปต์ .

cronjob สามารถรันเพื่อตรวจสอบว่า textfile นั้นมีไฟล์เรียกทำงานใด ๆ

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

บริบทของ textfile นั้น:

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

ด้วยขณะที่วนซ้ำคุณสามารถเรียกใช้คำสั่งจากไฟล์ข้อความนั้นได้


0

ใช่ .. มันเป็นไปได้ด้วยneutralinojs

Neutralino.os.runCommand()คุณสามารถใช้ แต่ในสถานการณ์สมมติของคุณโหมดคลาวด์ Neutralino สามารถใช้งานได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.