eseguire comandi shell da browser remoto

Networking, configurazione della connessione, periferiche e condivisioni di rete.
tubbadu
Prode Principiante
Messaggi: 92
Iscrizione: venerdì 11 dicembre 2020, 13:58
Desktop: plasma
Distribuzione: Kubuntu 20.10
Sesso: Maschile

eseguire comandi shell da browser remoto

Messaggio da tubbadu »

ciao a tutti! sto cercando realizzare un file html, presente sul mio pc linux, accessibile dal browser del mio smartphone android connesso alla stessa rete, con un bel bottone che quando viene premuto (dal cellulare) esegue un comando shell nel pc linux... avete idea di come io possa fare? :(
più o meno quello che fa KDE connect, ma ho bisogno di farlo tramite html
grazie in anticipo!!
Ale

PS: non sto cercando una shell remota, ho proprio bisogno di lanciare il comando dal file html

PPS: il file index.html è qualcosa tipo così:

Codice: Seleziona tutto

<!DOCTYPE html>
<html lang="">
<head>
	<meta charset="utf-8">
	<title></title>
</head>
<body>
	<header></header>
	<main>

		
		<script type="text/javascript">
			function execute()
			{
				var cmd = document.getElementsByName('cmd')[0].value;
				// run cmd in remote linux machine
			}
		</script>

		<form name="casellaTesto" method="post">
			<input type="text" name="cmd" value="echo 'ciao'" size="50">
			<input type="button" value="exec" onclick="execute()">
		</form>
		
	</main>
	<footer></footer>
</body>
</html>
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4446
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: eseguire comandi shell da browser remoto

Messaggio da UbuNuovo »

Non sapevo se risponderti, una cosa del genere crea un buco di sicurezza enorme, ma se è per sperimentare...
Ti serve almeno un server web minimale, puoi usare quello di PHP (se hai installato php e php-cli), nato per provare codice al volo, ma non per essere usato come server pubblico.
Per esempio con:

Codice: Seleziona tutto

php -S 127.0.0.1:1234
fai partire il server accessibile da 127.0.0.1 sulla porta 1234; la document root è quella da cui viene lanciato il comando, (puoi impostarne una diversa con l'opzione -t).

Per farti un esempio ho scritto al volo una pagina php a sicurezza zero, per provare il passaggio di dati via GET/POSTe e shell_exec().
Crea la pagina index.php contenente:

Codice: Seleziona tutto

<!DOCTYPE html>
<head>
<meta charset="utf-8"/>
</head>
<body>
<?php
# phpinfo();
echo '<p>Ciao, sono la index</p>'."\n";

if (empty($_GET)) { 
	echo '<p>Non ci sono dati in $_GET<br><br>'."\n\n"; 
	echo 'Clicca il collegamento per provare i dati GET <a href="index.php?chiave1=valore1&chiave2=valore2">link</a></p>'."\n";
}else{
	echo '<br> '."\n";
	echo '<p>Ok ci sono dati in $_GET:</p>'."\n";
	echo '<pre>';
	echo 'var_dump($_GET); : ';
	var_dump($_GET);
	echo '</pre>';
	echo "\n".'<p>Clicca il collegamento per <strong>ricaricare la pagina senza inviare dati <a href="/">Ricarica</a></strong></p>'."\n";
}


if (empty($_POST)) { 
	echo '<p>Non ci sono dati in $_POST</p>'."\n"; 
?>
	<form method="post" action="index.php">
	Testo: <input type="text" name="testo" value="Qua il testo da inviare">
	<input type="submit" name="submit" value="invia">
	</form>
<?php
}else{
	echo '<p>Ok ci sono dati in $_POST:</p>'."\n";
	echo '<pre>';
	echo 'var_dump($_POST); : ';
	var_dump($_POST);
	echo '</pre>';
	if($_POST['testo'] == 'abracadabra'){
		echo "<p>Hai inserito \"abracadabra\", mostro l'output di ls sulla home utente:</p>\n";
		$output = shell_exec('ls /home/*');
		echo "<pre>$output</pre>";
	}
	echo "\n".'<p>Clicca il collegamento per <strong>ricaricare la pagina senza inviare dati <a href="/">Ricarica</a></strong></p>'."\n";
}

?>
<p><a href="https://forum.ubuntu-it.org/search.php?search_id=active_topics">Discussioni attive - forum.ubuntu-it</a></p>

</body></html>
poi punti il browser all'indirizzo: http://127.0.0.1:1234 (o http://localhost:1234) e fai i tuoi esperimenti, modificando il codice della index, come ti pare.
Ps.: se, nel campo di testo, inserisci la stringa abracadabra ed invii, potrai vedere l'output di ls /home/*
Per fermare il server basta Ctrl+c, nella fiestra del terminale.

Da quel che ho letto, per renderlo accessibile a tutte le interfacce di rete dovrai usare 0.0.0.0:NUMERO_PORTA, ma non ho provato.
Se ti interessa guarda:
https://www.php.net/manual/en/features. ... server.php
https://www.php.net/manual/en/function.shell-exec.php
sempre su php.net guarda system(), escapeshellarg(), escapeshellcmd() i filtri sanitize etc. (gli argomenti collegati, nel menù a destra).
Per impostare un minimo di sicurezza: host ammessi, pagine di errore etc. guarda: https://www.sitepoint.com/taking-advant ... in-server/
Passo e chiudo.
Ciaux
Salva l'Ucraina! 🇺🇦
Scrivi risposta

Ritorna a “Connessione e configurazione delle reti”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 11 ospiti