- Mitglied seit
- 19. Aug 2008
- Beiträge
- 18.275
- Punkte für Reaktionen
- 4
- Punkte
- 0
WARNUNG:
Dieses Script führt remote Kommandos unter dem User aus, der den Webserver laufen lässt. Damit kann man problemlos alle Daten der Platte löschen. Sichert also den Zugriff darauf unbedingt ab!
Habe heute/gestern den überraschend einfachen Weg gefunden auf einer DS via GET Parameter Kommandos ausführen zu lassen. Das ganze geht via ein cgi.
Es braucht zwei Dateien. Eine cgi Datei, die das Kommando via QUERY_STRING entgegen nimmt und ausführt.
dieses cgi nimmt via command= das Kommando entgegen.
Zusätzlich braucht man noch ein kleines Script (hier ein PHP Script decode.php), das den Query_String dekodiert. Denn Leerzeichen werden immer als %20 beim Server ankommen und ein solches Kommando könnte nicht ausgeführt werden.
diese beiden Scripte ausführbar machen und ins gleiche Verzeichnis ablegen. Ich habe bei mir /usr/syno/synoman/phpsrc verwendet, den root Apache also. Dieses Script darf keinesfalls verwendet werden wenn man den Syno Assi (also Port 5000 und/oder 5001) geöffnet hat
Wer es mal angucken will, ich habe es bei mir auch auf dem Webserver. Allerdings führe ich da das Kommando natürlich nicht aus
http://brain-force.ch/command.cgi?command=ssh -i /root/key_ssh root@192.168.100.9 ls -al /root /tmp
Gut Nacht
tobi
Dieses Script führt remote Kommandos unter dem User aus, der den Webserver laufen lässt. Damit kann man problemlos alle Daten der Platte löschen. Sichert also den Zugriff darauf unbedingt ab!
Habe heute/gestern den überraschend einfachen Weg gefunden auf einer DS via GET Parameter Kommandos ausführen zu lassen. Das ganze geht via ein cgi.
Es braucht zwei Dateien. Eine cgi Datei, die das Kommando via QUERY_STRING entgegen nimmt und ausführt.
Code:
#!/bin/sh
echo "Content-type: text/html"
echo ""
echo '<pre>'
for i in $(env)
do
if [ $(echo $i | grep -i '^query_string') ]
then
# echo 'Vorher: '$(echo $i | awk -Fcommand= '{print $2}')
# echo -n 'Nachher: '
# echo $(echo $i | awk -Fcommand= '{print $2}' | ./decode.php)
$(echo $i | awk -Fcommand= '{print $2}' | ./decode.php)
exit
fi
done
echo '</pre>'
Zusätzlich braucht man noch ein kleines Script (hier ein PHP Script decode.php), das den Query_String dekodiert. Denn Leerzeichen werden immer als %20 beim Server ankommen und ein solches Kommando könnte nicht ausgeführt werden.
PHP:
#!/usr/bin/php
<?php
$fp=fopen('php://stdin','r');
$str = array();
while($line=fgets($fp,4096)){
$str[] = trim($line);
}
echo urldecode(implode($str));
exit;
?>
Wer es mal angucken will, ich habe es bei mir auch auf dem Webserver. Allerdings führe ich da das Kommando natürlich nicht aus
http://brain-force.ch/command.cgi?command=ssh -i /root/key_ssh root@192.168.100.9 ls -al /root /tmp
Gut Nacht
tobi