PHP Shell – Linux Shell via PHP Script

Heute bin ich per Zufall über PHP Shell gestolpert. Bei der PHPShell handelt es sich um ein PHP]Script von Martin Geisler welche Webhosting-Kunden ohne SSH-Zugriff eine Shell-Ähnliche Oberfläche zur Verfügung stellt.

PHP Shell kann unter phpshell.sourceforge.net als .zip oder .tar.bz2 heruntergeladen werden. Die Installation ist denkbar einfach. Es müssen die zwei Files phpshell.php und config.php auf den Webserver übertragen werden. In der Datei config.php muss ein Benutzer angelegt werden, der auf die PHP Shell Zugriff hat. Um das Passwort des Benutzers zu verschlüsseln, gibt es zusätzlich die Datei pwhash.php. Die Datei pwhash.php aufrufen, Benutzername und Passwort eingeben und danach diese in die config.php einfügen.

pwhash.php

pwhash.php

Als zusätzlichen Schutz empfiehlt es sich auf jeden Fall das Verzeichnis in dem sich phpshell befindet mit einem anderen Namen zu benennen sowie per .htaccess vor unbefugtem Zugriff zu schützen.
Genutzt werden können die meisten nicht-interaktiven Programme, welche auf dem Webserver installiert sind und sich auch mit einer normalen Shell nutzen ließen. Interaktive Programme, wie Editoren (z.B. vim) können nicht genutzt werden. Hierfür gibt es jedoch eine Erweiterung der PHPShell von Tobias Unger welche von seiner Website downgeloaded werden kann.

phpshell

Wie auf dem PrintScreen oben zu erkennen ist, lassen sich mit PHPShell auch ohne Probleme Shellscripte aufrufen. In diesem Fall ein Backupscript das jeden Tag den Webspace auf einen externen FTP Server backupt.

Automatisiertes MySQL Backup

Im Moment beschäftige ich mich mit dem automatisierten Backup von MySQL sowie Webseiteninhalten.

Eine Möglichkeit zum Backupen von MySQL DBs ist der MySQL Administrator. Er kann auch automatisiert Backups erstellen. Nachteil dieser Lösung ist, dass ein PC/Mac laufen muss, damit das Backup automatisiert über den Cronjob ausgeführt wird.

Ein MySQL Backup kann jedoch auch über ein Shell Script oder ein PHP Script erstellt werden. Dieses wird dann vom Server mit Cronjob regelmässig aufgerufen:


%s/backup.sql.gz',
$dbhost,
$dbuser,
$dbpwd,
$dbname,
getenv('DOCUMENT_ROOT')
)
);
?>

Wer es ein wenig detaillierter haben will, findet im selfphp Kochbuch Hilfe.

Ein weiteres sehr gutes Script findet sich bei DragonDesign. Ich werde dieses Backupscript als Grundlage für meine Weiterentwicklung gebrauchen.

Folgende Punkte will ich zusätzlich integrieren:

  • Backup vordefinierter Ordner
  • Komprimieren des File und MySQL Backups in einem Archiv
  • Automatisiertes Hochladen des Backups auf einen entfernten FTP Server

Je nach dem wie gut mein Hack ist, werde ich das Script danach hier zum Download anbieten.

PHP ausführliches Error Reporting

Der erste Schritt um eine PHP Anwendung abzusichern ist das aktivieren eines Features zum loggen der Anwendungsfehler. Anwendungsfehler geben oft Rückschlüsse auf die Angreifbarkeit der Anwendung.
Beispiel: Viele der register global ähnlichen Fehler können einfach entdeckt werden wenn man das Error-Report Level erhöht.

Hier der Code zum dies zu machen:

error_reporting(E_ALL | E_STRICT); // in PHP 4.x E_ALL
ini_set("display_errors", 0);
ini_set("log_errors", 1);
ini_set("error_log", "/home/user/logs/app_xyz.php.log");

Die erste Linien ist zum aktivieren des Loggings aller Errors. (E_ALL in PHP 4.0 oder E_ALL | E_STRICT in PHP 5.0 and höher) Sie zeigen alle Warnungen, Fatal Error, und informationen über alle nicht initialsierten Variablen. Die zweite Linie deaktivert das zeigen der Fehler.

Um dieses Logging zu aktivieren, muss der obenstehende Code nur in den Kopf der entsprechenden PHP Applikation kopiert werden.

E-Mailadressen verschlüsseln

Um E-Mailadressen auf Webseiten zu verschlüsseln gibt es verschiedene Möglichkeiten. Eine davon werde ich hier näher anschauen.

Genutzt wird die Methode von mehreren CMS Systemen. Unter anderem auch von Typo3. Sie besteht aus zwei Teilen. Die E-Mailadresse wird mittels PHP verschlüsselt. Mittels JavaScript wird die Adresse beim Klick darauf entschlüsselt und mittels mailto: Link direkt im Mailprogramm geöffnet.

PHP Teil:


= 8364 ) {
$n = 128;
}
$r .= chr($n+1);
}
return "javascript:linkTo_UnCryptMailto('".$r."')";
}

?>

Der JavaScript-Teil:



Der JavaScript Teil wird im Header der Seite eingefügt.

Die Anwendung:

">info auf example punkt ch

PHP ShowCode

Wenn man den Inhalt eines Files oder z.B. den Inhalt eines DB-Memofeldes mit Syntax und Zeilennummern ausgeben will, kann man die Funktion ShowCode verwenden:


", $code);

$i = "1";
foreach ($code as $line => $syntax) {
echo "".$i." ".$syntax."
";
$i++;
}
}
?>

Die Funktion kann folgendermassen gebraucht werden:



Excel 2007 Dokumente aus PHP erzeugen

Am 5. Januar ist die Version 1.6.5 von PHPExcel erschienen. PHPExcel stellt Klassen zum erzeugen und bearbeiten von Excel-Tabellen bereit. So kann man Zellen mit Werten, Formeln, und Hyperlinks füllen. Zellen können benannt und die Schriftart definiert werden. Zudem können Grafiken platziert werden.

Auch ein Passwort Schutz lässt sich mit PHPExcel erzeugen. Die Tabellen können mit den entsprechenden Meta-Informationen für den Autor, Titel und Beschreibung füllen.

Download von PHPExcel