seeseekey.net - Invictus Deus Ex Machina

Exploits (also ein Stück Quell­code zum Aus­nut­zen einer Schwach­stelle) gibt es wie Sand am Meer. Manch­mal möchte man sich einen sol­chen für eine bestimmte Anwen­dung anschauen und tes­ten. An die­sem Punkt kommt die Exploit Data­base ins Spiel, wel­che sich selbst so beschreibt:

The Exploit Data­base (EDB) – an ulti­mate archive of exploits and vul­nera­ble soft­ware. A great resource for pene­tra­tion tes­ters, vul­nera­bi­lity rese­ar­chers, and secu­rity addicts alike. Our aim is to collect exploits from sub­mit­tals and mai­ling lists and con­cen­trate them in one, easy to navi­gate database.

Zur Zeit archi­viert die Exploit Data­base über 30.000 unter­schied­li­che Exploits. Die Exploits auf der Seite sind nach Kate­go­rien sor­tiert und kön­nen auch durch­sucht wer­den. Betrie­ben wird die Seite dabei von der Firma Offen­sive Secu­rity, wel­che unter ande­rem für die Ent­wick­lung von Kali Linux ver­ant­wort­lich ist.

exploit-db.com

Neben der offi­zi­el­len Seite ist die Exploit Data­base auch auf Twit­ter und Face­book zu fin­den.

Wenn man frü­her unter PHP eine MySQL-Datenbank anspre­chen wollte, so bediente man sich der Befehle mysql_connect, mysql_select_db, mysql_query und Co. Das Pro­blem an die­ser API ist, das sie depre­ca­ted also ver­al­tet ist und damit nicht mehr genutzt wer­den 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");

Statt­des­sen soll man die MySQL Impro­ved Exten­sion kurz Mys­qli nut­zen. Dabei han­delt es sich um eine moderne objekt­ori­en­tierte API für den Zugriff auf MySQL in PHP. Eine ein­fa­che Abfrage mit­tels Mys­qli 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 unter­schei­det sich dabei nicht groß von der alten API, so das Umstieg hier rela­tiv ein­fach fal­len sollte. Auf der ent­spre­chen­den Doku­men­ta­ti­ons­seite auf php.net fin­den sich noch viele wei­tere Beispiele.

Bei einer ownCloud-Instanz wel­che schon einige Betriebs­stun­den auf dem Buckel hat, kann es zu einem unschö­nen Effekt kom­men. Beim Ver­such den Papier­korb über die Funk­tion „Gelöschte Dateien“ zu lee­ren, ver­sucht own­Cloud alle Dateien auf­zu­lis­ten, was aller­dings nicht gelingt. Der Brow­ser friert ein und das Lee­ren des Papier­kor­bes ist nicht möglich.

Der But­ton um die gelösch­ten Dateien aufzurufen

Auch wenn das Lee­ren des Papier­kor­ber nach Mei­nung der ownCloud-Entwickler nicht not­wen­dig ist, da die Dateien nach einer Weile weg­ge­wor­fen wer­den, sollte es trotz­dem eine Lösung geben um den Papier­korb manu­ell zu lee­ren. Ein Work­ar­round ist es den Papier­korb direkt zu löschen in dem man das Ver­zeich­nis „owncloud/data/username/files_trashbin/ löscht. Anschlie­ßend müs­sen noch zwei Tabel­len in der Daten­bank berei­nigt werden:

TRUNCATE TABLE oc_files_trashsize;
TRUNCATE TABLE oc_files_trash;

Eine wei­tere Mög­lich­keit diese Pro­ble­ma­tik zu ent­schär­fen, ist es die Vor­hal­te­zeit von gelösch­ten Dateien von 180 Tagen auf 30 Tage zu redu­zie­ren. Dazu öff­net man die config.php Datei wel­che im config-Ordner zu fin­den ist und trägt fol­gen­den Wert ein:

'trashbin_retention_obligation' => 30,

Damit wird ver­hin­dert das sich zu viele Dateien im Papier­korb ansam­meln und das Pro­blem deut­lich entschärft.

Möchte man unter Win­dows eine ent­fernte MySQL-Datenbank anspre­chen, so kann man hier­für Hei­diSQL nut­zen. Mit der Soft­ware Sequel Pro gibt es so etwas ähn­li­ches für Mac OS X. Die Soft­ware kann dabei auf der offi­zi­el­len Seite bezo­gen wer­den.

Sequel Pro

Sequel Pro ist unter der MIT-Lizenz ver­füg­bar und somit freie Soft­ware. Der Quell­text ist auf Google Code zu fin­den. Er kann mit­tels eines SVN Cli­ent aus­ge­checkt werden:

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

Eine Alter­na­tive zu Sequel Pro ist das platt­form­über­grei­fende MySQL Work­bench, bei wel­chem es sich eben­falls um freie Soft­ware handelt.

Wer Entity-Relationship-Modelle bzw. die ent­spre­chen­den Dia­gramme (ERD) erstel­len möchte, der kann hier­für Soft­ware wie die freie MyS­QL­Work­bench nut­zen. Für das platt­form­über­grei­fende Erzeu­gen sol­cher Dia­gramme kann man aller­dings auch die freie Webap­pli­ka­tion wwws­ql­de­si­gner nutzen.

Der ERD-Designer in Aktion

Auf der Web­seite des Autors gibt es eine Demo zum Aus­pro­bie­ren. Die in PHP und Java­script geschrie­bene Soft­ware steht dabei unter einer BSD-Lizenz und ist somit freie Soft­ware. Bei der Instal­la­tion muss das ent­spre­chende Archiv nur auf dem Web­ser­ver ent­packt wer­den und kann sofort genutzt wer­den. Nur wer die Mög­lich­kei­ten der ser­ver­sei­ti­gen Spei­che­rung nut­zen möchte, muss einige Para­me­ter kon­fi­gu­rie­ren.

In der Bun­des­re­pu­blik gibt es unzäh­lige Bau­ten und Anla­gen deren Zweck den wenigs­ten geläu­fig sein wird. In einem Pro­jekt des Hob­by­his­to­ri­kers Michael Grube wer­den diese gesam­melt und auf einer Web­seite prä­sen­tiert. Das ganze trägt dabei den Namen Geschichts­spu­ren und ist auf der gleich lau­ten­den Web­seite zu fin­den.

geschichtsspuren.de

Dabei wer­den auf der Seite ver­schie­dene Daten­ban­ken, wie die Zivilschutzanlagen-Datenbank, die Luftnachrichten-Datenbank und die Geo-DB DDR Geschichte geführt. Ergänzt wird das ganze mit Arti­keln rund um sol­che Anla­gen und ähn­li­che Baulichkeiten.

In den letz­ten Tagen hatte ich mit einer Word­Press Instal­la­tion einige Pro­bleme. Diese äußer­ten sich darin, das die Web­seite bei jedem Auf­ruf hohe Last erzeugte. Im Laufe der Zeit wurde die Laste dabei immer grö­ßer. Irgend­wann gab der Ser­ver nur noch einen HTTP 500 Error von sich. Im Backend äußerte sich das ganze mit einer wei­ßen Seite, was im Nor­mal­fall auf zu wenig Spei­cher für PHP hinweist.

In die­sem Fall lag das Pro­blem an ande­rer Stelle. Beim Über­prü­fen der Daten­bank stellte sich her­aus das die Tabelle „wp_options“ enorm groß war. Im Nor­mal­fall ist diese Tabelle ein paar MiB groß. In mei­nem Fall war sie knapp 600 MiB groß und bestand aus über 500.000 Ein­trä­gen. Bei die­sen Dimen­sio­nen wird klar, wohin die Per­for­mance ver­schwun­den ist. Im kon­kre­ten Fall gab es viele „tran­si­ent“ und „displayed_galleries“ Ein­träge. Letzte Ein­träge wer­den vom Plu­gin „Next­GEN Gal­lery“ erzeugt. Die „transient“-Einträge enste­hen durch Caches (unter ande­rem für den RSS-Feed). Möchte man die Daten­bank berei­ni­gen hel­fen fol­gende 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 opti­miert wer­den, damit der von den gelösch­ten Ein­trä­gen belegte Spei­cher­platz wie­der frei­ge­ge­ben wird.

Update:
Mitt­ler­weile gibt es auch einen ent­spre­chen­den Arti­kel im Word­Press Forum.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://www.staze.org/wordpress-_transient-buildup/

Wis­sen in struk­tu­rier­ter Form hat im Gegen­satz zu unstruk­tu­rier­tem Wis­sen, einige ent­schei­dende Vor­teile. Der wich­tigste ist wahr­schein­lich die auto­ma­ti­sierte Anwen­dung und Aus­wer­tung durch Com­pu­ter­sys­teme. Natür­lich muss hierzu erst ein­mal das ent­spre­chende Wis­sen in eine struk­tu­rierte Form gebracht wer­den. Genau dies wird beim DBPe­dia Pro­jekt gemacht. Im Falle die­ses von der Uni­ver­si­tät Leip­zig betrie­be­nen Pro­jek­tes wer­den dabei die struk­tu­rier­ten Daten der Wiki­pe­dia aus­ge­wer­tet und der All­ge­mein­heit unter der GPL bzw. der CC-BY-SA Lizenz zur Ver­fü­gung gestellt. Zu fin­den ist das Pro­jekt dabei unter http://de.dbpedia.org/.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://de.wikipedia.org/wiki/DBpedia

Manch­mal benö­tigt man eine MySQL Kom­man­do­zeile, hat aber kein „phpmyad­min“ zur Ver­fü­gung. Für einen sol­chen Fall wäre es schön wenn man eine kleine Anwen­dung hätte wel­che die­ses Pro­blem löst. Genau hier setzt die PHP Anwen­dung „Admi­ner“ an. Dabei han­delt es sich sozu­sa­gen um eine „phpmyad­min“ Minimalversion.

SQL-Query Ansicht im Adminer

Das schöne am Admi­ner ist das er nur aus einer Datei besteht und so unkom­pli­ziert „instal­liert“ wer­den kann. Zu fin­den ist das ganze unter http://www.adminer.org.