Fast ein telnet-Ersatz ...

Status
Für weitere Antworten geschlossen.

Pio435

Benutzer
Mitglied seit
30. Dez 2007
Beiträge
28
Punkte für Reaktionen
0
Punkte
0
Der Kommando-Zeilen-Aufruf hat nun nichts mehr mit dem Apache zu tun, so dass dort eigentlich keine Konfigurationsänderungen zu machen wären.

Hast Du auch wirklich den richtigen Abschnitt in der zweiten php.ini geändert: mysqli also den mit dem kleinen i hintendran???

Eigentlich müsste dein PHP-Skript auch direkt auf der Kommando-Zeile ausgeführt werden können, hast das schon mal probiert: php dein_skript.php

Da kommt nun das HTML heraus, ist nicht schön anzusehen, aber es sollten keine Fehlermeldungen kommen - das wäre zumindest schön ;)

Vielleicht ist ja der Datenbankzugriff noch ein Problem. Teste doch man den Zugriff mit folgendem PHP-Skript:
Rich (BBCode):
<?php
$conn = mysql_connect("localhost","root","passwort");
$res = mysql_list_dbs($conn);
$i = 0;
while ($i < mysql_num_rows ($res)) {
  $db_name = mysql_tablename($res,$i);
  print $db_name." ";
  ++$i;
  }
mysql_close($conn);
?>

Natürlich musste deinen Connect anpassen. Das Skript müsste nun per Kommandozeilen-Aufruf deine Datenbanken-Namen ausgeben. Wenn das nicht funktioniert, dann hast ein Datenbankzugriffsproblem ... es läge dann nicht an der PHP-Konfiguration. Also bei funktioniert der Datenbankzugriff per Kommandozeile :D

also, wenn ich das script auf meine Config anpasse, erhalte ich bei der Ausführung über Commando-Zeile folgenden Fehler:

Fatal error: Call to undefined function mysql_connect() in /usr/syno/synoman/phpsrc/streamripper/sql.php on line 2

Vergleiche ich Dein Script mit meinen PHP-Skripts fällt mir auf, dass in den PHP-Skripts für die Syno_CS der SQL-Befehlsaufruf mit @, also z.B.

$conn = @ mysql_connect("localhost","root","passwort");

erfolgt. Passe ich Dein Skript entsprechend an. Gibt die CS keinen Fehler mehr aus, leider aber auch sonst nichts mehr :-(

ich bin ratlos, zumal wie gesagt, nur der PHP/SQL-Teil der "Startseite" nicht geht? Aber wahrscheinlich kommt das daher, dass der Aufruf der Folgeseiten über das Syno-eigene PHP geht ...

Pio435

ach ja, in der php.ini habe ich wirklich den mysqli angepasst/eingefügt ...
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
hi Pio435,

erstmal vorweg ... der @ vor einer Anweisung bedeutet: "gibt keine Fehlermeldung aus, wenn eine da ist" :p

schätze wir müssen noch was installieren für das extra-PHP-Programm.
Zur Erläuterung, ich hab ja komplett ne alternative Apache-Server-Umgebung und deshalb funktionieren bei mit die Dinge, die bei dir noch!!! nicht gehen. Also nicht den Mut verlieren! Hab gerade die DS net an ... schau mal in die ipkg list | grep php - Ausgabe, ob da nicht was wie php-mysql oder so ähnlich (muss mit php anfangen!!!) dabei ist und installiere das bitte auch noch. Der zweite PHP hat vermutlich noch nicht die Library zum Zugreifen auf die MySQL-Datenbank.
 

Pio435

Benutzer
Mitglied seit
30. Dez 2007
Beiträge
28
Punkte für Reaktionen
0
Punkte
0
ok, die Installation von php-mysql habe ich durchgeführt. Immerhin wird jetzt die SQL-Connect initialisiert. Nun erhalte ich aber folgende Fehler:


Warning: mysql_connect(): Access denied for user 'root'@'localhost' (using password: YES) in /usr/syno/synoman/phpsrc/streamripper/sql.php on line 2

Warning: mysql_list_dbs(): supplied argument is not a valid MySQL-Link resource in /usr/syno/synoman/phpsrc/streamripper/sql.php on line 3

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /usr/syno/synoman/phpsrc/streamripper/sql.php on line 5

Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in /usr/syno/synoman/phpsrc/streamripper/sql.php on line 10

... und natürlich schlägt jetzt jeglicher Zugriff auf meine SQL-Datenbanken fehl ...

Pio435
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
öhmmm,

also doch ein Problem mit der Datenbank.

Wie kommst du mit phpmyadmin auf die MySQL-Datenbank? Hast da ein Kennwort? Setzt mal statt 'localhost' die IP der DS rein ...
 

Pio435

Benutzer
Mitglied seit
30. Dez 2007
Beiträge
28
Punkte für Reaktionen
0
Punkte
0
Entwarnung!

Habe kurz im DMS die SQL-Funktion deaktiviert und wieder aktiviert.

Jetzt scheint alles soweit zu funktionieren! Jetzt muss ich nur noch die Überprüfung des Login im PHP-Skript einbauen ...

Vielen Dank für Deine wertvolle Hilfe!! Ist nicht selbstverständlich, das ein Bastler solch umfangreiche Hilfe erhält!

Im übrigen sind Deine Ideen für den 3rdparty-Bereich eine absolute Bereicherung!

Gruss, Pio435
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
SUPER !!! :D

An alle, die mitlesen... ab und zu mal die Server neustarten, wenn man was installiert hat (entweder über deaktivieren/aktivieren oder per Hand), das kann schon bei der Lösung helfen.

Gruss, itari
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Zweite Version der Web-Shell

hi Leutz,

habe das Skript hier umgeschrieben als PHP-Skript und ein wenig dazu gebastelt. Jetzt wird die letzte Eingabe als Cookie zwischengespeichert und man kann seine Ausgaben als History über ein Cookie speichern. Das ist ganz nützlich, wenn man gerade mal was anderes im Disk Station Manager machen will und wieder zurück kommt, dann hat man immer noch alles. Sobald man History off macht, wird das Cookie geleert. Die ausführenden Shell liefert per pipe zurück. Damit sind auch noch ein paar Möglichkeiten mehr geschaffen. Der cd (change directory) ist nun besser eingebaut und ein File-Upload ist auch drin.

Das PHP-Skript ist nicht empfindlich, was die Zeilenenden angeht :D. Am besten man ändert kurz seine application.cfg vom bisherigen shell-Eintrag (refresh der Seite nicht vergessen) und probiert einfach aus. Ansonsten wäre dieses Skript hier wie alle anderen Skripte als 3rd-party-Apps zu installieren. Anleitungen gibt es ja dazu schon reichlich.

itari

.
 

Anhänge

  • shell.jpg
    shell.jpg
    85,6 KB · Aufrufe: 223
  • shell.php.txt
    2,1 KB · Aufrufe: 20

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
@itari
Wiedermal ein absolut geiles Teil deinerseits :D Nur etwas kleines habe ich gesehen. Einmal verwendest du <?php und einmal <? als Open Tags für PHP. Je nach Server Konfig sieht man dann den jeweiligen PHP Code ungeparst als Text. Short Open Tags funzen also abhängig von der php.ini, die normalen Tags <?php sind hingegen immer vorhanden. Short Open Tags schalte ich grundsätzlich immer aus, denn ich habe bei meinen Servern immer einen PHP Handler für .html am Start und spätestens bei der Verwendung von xml Files wird PHP in einer solche Config motzen, da nach <? keine PHP-bekannten Funktionen und Konstrukte kommen ;)
Ich war mal so frei und habe die Tags einheitlich auf <?php gesetzt
PHP:
<?php
if($_REQUEST['cmd'] == "" && $histcmd != "") $_REQUEST['cmd']=$histcmd;
if($_REQUEST['hist_on'] == "" && $histon != "") $_REQUEST['hist_on']=$histon;
if($_REQUEST['dir'] == "") $curdir = exec("pwd"); else $curdir = $_REQUEST['dir'];
if($_REQUEST['cmd'] == "") $curcmd = "ls -lah"; else $curcmd = $_REQUEST['cmd'];
if(($_REQUEST['upl']) == "Upload" ) {
  $_REQUEST['cmd']='upload ';
  if (move_uploaded_file($_FILES['fila']['tmp_name'], $curdir."/".$_FILES['fila']['name'])) 
    $string = "The file has been uploaded";
  else 
    $string = "There was an error uploading the file, please try again!";
  }
if(($_REQUEST['exe']) == "Execute") {
$curcmd = "cd ".$curdir.";".$curcmd;
$f=popen($curcmd,"r");
while (!feof($f)) {
$buffer = fgets($f, 4096);
$string .= $buffer;
}
pclose($f);
}
if ($_REQUEST['hist_on'] != 'on' ) { setcookie('hist',''); $hist=''; }
else if ($string!='') setcookie('hist',htmlspecialchars('$ '.$_REQUEST['cmd'].chr(10).$string.chr(10).$hist));
setcookie('histcmd',$_REQUEST['cmd']);setcookie('histon',$_REQUEST['hist_on']);
?>
<html><head><title>cmd</title>
<style>body,td,input,pre{font:11px Consolas;}fieldset{border:1px solid #999;}
#out{overflow:auto;height:385px;}
</style></head><body>
<pre><?php print php_uname()."\n"; ?></pre>
<table><form method="post" enctype="multipart/form-data">
<tr><td>Execute command:</td><td><input name="cmd" type="text" size="100" value="<?php print $_REQUEST['cmd']; ?>" /></td><td>
<input type="radio" name="hist_on" value="on"  <?php print $_REQUEST['hist_on']=='on'?'checked="checked"':'' ?>> History on
<input type="radio" name="hist_on" value="off" <?php print $_REQUEST['hist_on']=='off'?'checked="checked"':'' ?>> History off
</td>
<tr><td>Change directory:</td><td><input name="dir" type="text" size="100" value="<?php print $curdir; ?>"></td>
<td><input name="exe" type="submit" value="Execute"></td></tr>
<tr><td>Upload file:</td><td><input name="fila" type="file" size="81"></td>
<td><input name="upl" type="submit" value="Upload"></td></tr></table>
<fieldset>
<pre id="out"><?php print htmlspecialchars(($string==''?'':'$ '.$_REQUEST['cmd'].chr(10).$string.chr(10)).$hist); ?>
</pre></fieldset></form></body></html>
Gruss

tobi
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Mit den fehlenden <?php hast du Recht. Ich habe die lama-shell in irgendeinem Forum entdeckt und auf unsere Verhältnisse angepasst. Dabei hab ich wohl nicht alles <?-Einträge ersetzt :D Für den Fall, dass nun jemand die lamashell sucht, sie ist hier. Auf die Frage, wozu es diese gibt, gebe ich keine Auskunft. :rolleyes:

itari
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
So, habe mal probiert die Web-Shell als spk-Pakat zu schnüren. Dran denken, dass trotzdem aller Voraussetzungen für eine 3rd-party-apps eingerichtet sein müssen (siehe entspreche Anleitung im Wiki oder im Anleitungs-Post).

Auch als spk-Paket gilt: es geht immer auf eigene Kappe. Also immer Augen auf und vorsichtig sein, sonst ist das System hin, weil man ja als Benutzer 'root' angemeldet ist.

itari
 

Anhänge

  • shell.spk
    10 KB · Aufrufe: 139

tracer

Benutzer
Mitglied seit
15. Jun 2009
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Einige Programm gehen nicht (z. B. vi), andere verhalten sich eigenwillig, weil bestimmte Shell-Umgebungsvariablen nicht stimmen (z. B. more) ...

Welcher Editor als Ersatz zu vi funkitoniert, oder wie sonst lassen sich Datein auf diese Weise editieren.
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Alle 'interaktiven' Programme (vi, more, top usw.) gehen nicht in der WebShell, weil keine Kanal-Redirektions-Schleife stattfindet - sowas bekommt man nicht mit PHP-Skripten hin und Java fehlt halt ... also immer nur die Programme benutzen, die eine einfache Ausgabe erzeugen ....

Zum Editieren von Dateien hab ich einen WebEditor geschrieben ...

Itari
 

tracer

Benutzer
Mitglied seit
15. Jun 2009
Beiträge
7
Punkte für Reaktionen
0
Punkte
0
Danke Itari dafür und vieles mehr, sehe ich mir an.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat