seeseekey.net - Invictus Deus Ex Machina

Exploits (also ein Stück Quellcode zum Ausnutzen einer Schwachstelle) gibt es wie Sand am Meer. Manchmal möchte man sich einen solchen für eine bestimmte Anwendung anschauen und testen. An diesem Punkt kommt die Exploit Database ins Spiel, welche sich selbst so beschreibt:

The Exploit Database (EDB) – an ultimate archive of exploits and vulnerable software. A great resource for penetration testers, vulnerability researchers, and security addicts alike. Our aim is to collect exploits from submittals and mailing lists and concentrate them in one, easy to navigate database.

Zur Zeit archiviert die Exploit Database über 30.000 unterschiedliche Exploits. Die Exploits auf der Seite sind nach Kategorien sortiert und können auch durchsucht werden. Betrieben wird die Seite dabei von der Firma Offensive Security, welche unter anderem für die Entwicklung von Kali Linux verantwortlich ist.

exploit-db.com

Neben der offiziellen Seite ist die Exploit Database auch auf Twitter und Facebook zu finden.

Wenn man früher unter PHP eine MySQL-Datenbank ansprechen wollte, so bediente man sich der Befehle mysql_connect, mysql_select_db, mysql_query und Co. Das Problem an dieser API ist, das sie deprecated also veraltet ist und damit nicht mehr genutzt werden sollte:

$db = mysql_connect ($host, $user, $password) or die ("Es konnte keine Verbindung zum Datenbankserver hergestellt werden");
mysql_query("SET NAMES 'UTF8'");
mysql_select_db ($name, $db) or die("Die Datenbank \"$name\" konnte nicht ausgewählt werden");

Stattdessen soll man die MySQL Improved Extension kurz Mysqli nutzen. Dabei handelt es sich um eine moderne objektorientierte API für den Zugriff auf MySQL in PHP. Eine einfache Abfrage mittels Mysqli sieht dabei wie folgt aus:

$mysqli = new mysqli($databaseHost, $databaseUsername, $databasePassword, $databaseName);
$sql = "SELECT * FROM token";
$result = $mysqli->query($sql);

for ($row_no=$result->num_rows-1; $row_no>=0; $row_no--) 
{
    $result->data_seek($row_no);
    $row=$result->fetch_assoc();
    echo " id = " . $row['id'] . "\n";
}

Die API unterscheidet sich dabei nicht groß von der alten API, so das Umstieg hier relativ einfach fallen sollte. Auf der entsprechenden Dokumentationsseite auf php.net finden sich noch viele weitere Beispiele.

Bei einer ownCloud-Instanz welche schon einige Betriebsstunden auf dem Buckel hat, kann es zu einem unschönen Effekt kommen. Beim Versuch den Papierkorb über die Funktion „Gelöschte Dateien“ zu leeren, versucht ownCloud alle Dateien aufzulisten, was allerdings nicht gelingt. Der Browser friert ein und das Leeren des Papierkorbes ist nicht möglich.

Der Button um die gelöschten Dateien aufzurufen

Auch wenn das Leeren des Papierkorber nach Meinung der ownCloud-Entwickler nicht notwendig ist, da die Dateien nach einer Weile weggeworfen werden, sollte es trotzdem eine Lösung geben um den Papierkorb manuell zu leeren. Ein Workarround ist es den Papierkorb direkt zu löschen in dem man das Verzeichnis „owncloud/data/username/files_trashbin/ löscht. Anschließend müssen noch zwei Tabellen in der Datenbank bereinigt werden:

TRUNCATE TABLE oc_files_trashsize;
TRUNCATE TABLE oc_files_trash;

Eine weitere Möglichkeit diese Problematik zu entschärfen, ist es die Vorhaltezeit von gelöschten Dateien von 180 Tagen auf 30 Tage zu reduzieren. Dazu öffnet man die config.php Datei welche im config-Ordner zu finden ist und trägt folgenden Wert ein:

'trashbin_retention_obligation' => 30,

Damit wird verhindert das sich zu viele Dateien im Papierkorb ansammeln und das Problem deutlich entschärft.

Möchte man unter Windows eine entfernte MySQL-Datenbank ansprechen, so kann man hierfür HeidiSQL nutzen. Mit der Software Sequel Pro gibt es so etwas ähnliches für Mac OS X. Die Software kann dabei auf der offiziellen Seite bezogen werden.

Sequel Pro

Sequel Pro ist unter der MIT-Lizenz verfügbar und somit freie Software. Der Quelltext ist auf Google Code zu finden. Er kann mittels eines SVN Client ausgecheckt werden:

svn checkout http://sequel-pro.googlecode.com/svn/trunk/ sequel-pro

Eine Alternative zu Sequel Pro ist das plattformübergreifende MySQL Workbench, bei welchem es sich ebenfalls um freie Software handelt.

Wer Entity-Relationship-Modelle bzw. die entsprechenden Diagramme (ERD) erstellen möchte, der kann hierfür Software wie die freie MySQLWorkbench nutzen. Für das plattformübergreifende Erzeugen solcher Diagramme kann man allerdings auch die freie Webapplikation wwwsqldesigner nutzen.

Der ERD-Designer in Aktion

Auf der Webseite des Autors gibt es eine Demo zum Ausprobieren. Die in PHP und Javascript geschriebene Software steht dabei unter einer BSD-Lizenz und ist somit freie Software. Bei der Installation muss das entsprechende Archiv nur auf dem Webserver entpackt werden und kann sofort genutzt werden. Nur wer die Möglichkeiten der serverseitigen Speicherung nutzen möchte, muss einige Parameter konfigurieren.

In der Bundesrepublik gibt es unzählige Bauten und Anlagen deren Zweck den wenigsten geläufig sein wird. In einem Projekt des Hobbyhistorikers Michael Grube werden diese gesammelt und auf einer Webseite präsentiert. Das ganze trägt dabei den Namen Geschichtsspuren und ist auf der gleich lautenden Webseite zu finden.

geschichtsspuren.de

Dabei werden auf der Seite verschiedene Datenbanken, wie die Zivilschutzanlagen-Datenbank, die Luftnachrichten-Datenbank und die Geo-DB DDR Geschichte geführt. Ergänzt wird das ganze mit Artikeln rund um solche Anlagen und ähnliche Baulichkeiten.

In den letzten Tagen hatte ich mit einer WordPress Installation einige Probleme. Diese äußerten sich darin, das die Webseite bei jedem Aufruf hohe Last erzeugte. Im Laufe der Zeit wurde die Laste dabei immer größer. Irgendwann gab der Server nur noch einen HTTP 500 Error von sich. Im Backend äußerte sich das ganze mit einer weißen Seite, was im Normalfall auf zu wenig Speicher für PHP hinweist.

In diesem Fall lag das Problem an anderer Stelle. Beim Überprüfen der Datenbank stellte sich heraus das die Tabelle „wp_options“ enorm groß war. Im Normalfall ist diese Tabelle ein paar MiB groß. In meinem Fall war sie knapp 600 MiB groß und bestand aus über 500.000 Einträgen. Bei diesen Dimensionen wird klar, wohin die Performance verschwunden ist. Im konkreten Fall gab es viele „transient“ und „displayed_galleries“ Einträge. Letzte Einträge werden vom Plugin „NextGEN Gallery“ erzeugt. Die „transient“-Einträge enstehen durch Caches (unter anderem für den RSS-Feed). Möchte man die Datenbank bereinigen helfen folgende SQL Befehle:

DELETE FROM wp_options WHERE option_name LIKE ('_transient_%')
DELETE FROM wp_options WHERE option_name LIKE ('displayed_galleries%')

Anschließend sollte die Tabelle optimiert werden, damit der von den gelöschten Einträgen belegte Speicherplatz wieder freigegeben wird.

Update:
Mittlerweile gibt es auch einen entsprechenden Artikel im WordPress Forum.

Weitere Informationen gibt es unter:
http://www.staze.org/wordpress-_transient-buildup/

Wissen in strukturierter Form hat im Gegensatz zu unstrukturiertem Wissen, einige entscheidende Vorteile. Der wichtigste ist wahrscheinlich die automatisierte Anwendung und Auswertung durch Computersysteme. Natürlich muss hierzu erst einmal das entsprechende Wissen in eine strukturierte Form gebracht werden. Genau dies wird beim DBPedia Projekt gemacht. Im Falle dieses von der Universität Leipzig betriebenen Projektes werden dabei die strukturierten Daten der Wikipedia ausgewertet und der Allgemeinheit unter der GPL bzw. der CC-BY-SA Lizenz zur Verfügung gestellt. Zu finden ist das Projekt dabei unter http://de.dbpedia.org/.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/DBpedia

Manchmal benötigt man eine MySQL Kommandozeile, hat aber kein „phpmyadmin“ zur Verfügung. Für einen solchen Fall wäre es schön wenn man eine kleine Anwendung hätte welche dieses Problem löst. Genau hier setzt die PHP Anwendung „Adminer“ an. Dabei handelt es sich sozusagen um eine „phpmyadmin“ Minimalversion.

SQL-Query Ansicht im Adminer

Das schöne am Adminer ist das er nur aus einer Datei besteht und so unkompliziert „installiert“ werden kann. Zu finden ist das ganze unter http://www.adminer.org.