Das Wüstenfeuer brennt…

So! Endlich geschafft. Vorgestern die Domain bestellt, dann den neuen Blog installiert, alle Artikel migriert und soweit alles wieder eingerichtet.

Wie man sieht, ist das Design jetzt freundlicher und heller geworden und spricht hoffentlich mehr Leser an. Die Kategorien wurden auch überarbeitet, Alte wurden entfernt und ein paar zusammengefasst.

Alle Artikel vom alten Blog sind weiterhin verfügbar, ich werde sie auch nicht löschen, weil da teilweise brauchbare Informationen drin stehen.
Habe mir jetzt vorgenommen, alle paar Tage mal einen Artikel zu Dingen, die mir gerade in den Sinn kommen zu schreiben. Ob die jetzt klein oder groß sind, hängt davon ab, wie ich Lust habe etwas zu verfassen. Übrigens habe ich ewig nachgedacht, bis mir der Name, bzw. die Domain für den Blog in den Sinn kam. Finde, er ist eigentlich nicht schlecht gewählt und spiegelt teilweise auch meine sympathie für die Piratenpartei wieder.

Wo wir dann auch wieder zum nächsten angelangt sind. Die Piratenpartei NRW hat derzeit eine Aktion der besonderen Art laufen: Der Dauerinfostand mit dem gläsernen Mobil in Düsseldorf. (#piraten247)

Dort sitzen gewillte Piraten seit dem 02.05.2010 und informieren Bürger rund um die Uhr über Datenschutz, Bildung und andere Themen, die etwas mit der Piratenpartei zu tun hat.
Zusätzlich gibt es einen Livestream, direkt aus dem Mobil, den ich hier embedden werde.

Wer also Interesse hat und nicht weit von Düsseldorf entfernt wohnt, kann dort ja mal einen Blick hinwerfen und sich mit den Piraten dort nett unterhalten.

Von meiner Seite her war es das dann soweit erstmal wieder, ich hoffe ja, das euch der neue Blog gefällt und ihr viel Spaß beim lesen haben werdet. Eventuell werden in den nächsten Tagen noch kleinere Änderungen eingepasst, mal schauen, was sich da so findet.

Cya, Danny.

Post to Twitter

Veröffentlicht unter Politik | Hinterlasse einen Kommentar

Spammer werden auch immer jünger oder einfach nur Rechtschreibfaul.

Gerade musste ich mal wieder ein wenig schmunzeln, als ich die Spamkommentare durchgeschaut habe.

Halo du wircklich geilen Blog betreibst du. Ich selbst hab auch vor kurzem eine eigene homepage programmiert, eine Suchmaschine. gerade noch erreichbar unter beta.*****.de . Währe toll wenn du mir berichtest wie du sie findest und was noch doof daran ist. Ein Design kommt erst im laufe des Tages noch hinzu. Schönes Wochenende – 345zhf4

Ja, also entweder war der Spammer ein kleiner 12-jähriger Bub, der an einer Leserechtschreibschwäche leidet, oder einfach nur ein pickeliger Nerd. ;) (Und nein, ich habe nichts gegen Nerds.)

Post to Twitter

Veröffentlicht unter Allgemein | 2 Kommentare

Grünflächenerneuerung

Alsoooo…

Werde mich hier nicht lang halten, sondern gleich zum Punkt kommen.

Wie man ja sehen kann, ist auf meinem Blog eigentlich so gut wie kaum Aktivität, was daran liegen mag, dass das Thema generell nicht unbedingt alle anspricht und ich mich in letzter Zeit eher aus dem IT/Sicherheitsbereich zurückgezogen habe.

Fakt ist, so wie es jetzt läuft, bringt der Blog nichts. Weder für mich, noch für Leser. (Wenn ich überhaupt groß Leser habe.)

Was heißt das jetzt? Nein, der Blog ist nicht tot. Das möchte ich soweit verhindern. Allerdings wird er KOMPLETT erneuert. Dabei spreche ich dann auch von einem neuen Titel, Internetdomain und Themen. (Wahrscheinlich Vegetarismus, Natur, ein bisschen IT Kram, Tutorials zu verschiedenen Dingen und Produkttests.)

Die jetzige Domain, botnetz.com wird aber dennoch erstmal bestehen bleiben. Überlege aber, diese eventuell zu verkaufen. Was allerdings auch davon abhängig ist, was dafür überhaupt geboten wird. (Also, gerne her mit den Geboten. =D)

Wann das alles jetzt vollzogen wird und abgeschlossen wird, weiß ich selber noch nicht, wollte es aber in den nächsten 4 Wochen versuchen.

Bis dann, Danny.

Post to Twitter

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Vulkan, Island, Musik

Hallo.

Gerade bin ich, als ich bei Youtube nach Aufnahmen von dem Vulkanausbruch auf Island gesucht habe, auf ein Lied gestoßen, dass von 5 Gestrandeten, die in Russland festsitzen gemacht wurde.

Sie würden für gut finden, wenn Island im Meeresboden verschwindet. ;)
Würde ich jetzt selber zwar nicht sagen, aber mir hat das Video doch schon gefallen. Vorallem ist es ein richtiges Ohrwurmlied.

Here you go:

Post to Twitter

Veröffentlicht unter Allgemein, Die Welt | Hinterlasse einen Kommentar

Werbung und so weiter…

Nabend.

Hab mich jetzt entschlossen, die Werbeanzeigen mal komplett zu entfernen, da sie keinen großen Nutzen für mich haben und teilweise auf dubiose Seiten verlinken. (unteranderem Freeware Software Abzocke…)

Desweiteren hab ich einen kleinen Twitter-Button eingefügt, mit dem ihr auf mein Profil gelangt und mir auch folgen könnt. Für jene, die Twitterer werden möchten, empfehle ich TweetDeck. Das ist eine flexible und tolle Twitter Anbindung, die ich selber auch nutze.

So denn, bis später.

Post to Twitter

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Gartenarbeit…

Doofer Nussbaum. :P
Ist man ewig dran, den auszubuddeln, wegen ‘nen Batzen Wurzeln.

Post to Twitter

Veröffentlicht unter Allgemein, Die Welt | 1 Kommentar

Glastopf – Top 5 Countries

Hallo.

Ich wollte heute mal einen kleinen Einblick über die Top 5 Attacker geben.

Auf Platz 1 ist ein Angreifer aus den Vereinigten Staaten von Amerika (USA), der mit 2752 Angriffen weit vorne liegt.
Auf Platz 2 folgt ein Angreifer aus der Koreanischen Republik, der mit 1764 Angriffen doch schon um einiges von der USA entfernt liegt.
Auf Platz 3 belegt Russland die Statistik mit 1632 Angriffen.
Knapp daben, auf Platz 4 ist Indonesien mit 1631 Angriffen.
Den 5. Platz belegt Deutschland, mit 1469 Angriffen.

Der Glastopf rennt seit 5 Monaten, 3 Wochen und 5 Tagen und hat 49032 einzigartige Treffer gesammelt.

Post to Twitter

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Ewige Ruhe währt lang.

Nabend.

Ewig nicht mehr gemeldet. Tut mir leid. Falls überhaupt groß wer diesen Blog lesen sollte.
Hab das Theme jetzt mal zu was dunklem und einfachen geändert.

Bei Bedarf poste ich dann mal einzelne Blogeinträge, oft auch in Twitter manier. (Also kurze Beiträge…)

Zurzeit überlege ich ja noch, irgendwas für den glastopf zu programmieren, weiß nur nicht so genau was. Hatte schon an eine SQLite Anbindung gedacht. Habt ihr vielleicht Ideen, was man bauen könnte? Immer her damit.

Desweiteren wollte ich noch auf ein tolles, kleines Spiel hinweisen, dass man mit mehreren Leuten im Netz spielen kann. Im eigentlichen ist es ein Remake von einem alten Amiga Spiel: Knights

Zu finden ist das ganze unter: http://www.knightsgame.org.uk/
Auch das Forum ist da, wenn es um Bugs und andere Diskussionen geht: http://www.knightsgame.org.uk/forum

Auch steht derzeit ein fester Spieltermin fest, an dem wir uns Online treffen. Dies ist der Sunday 21st February um 16:00 GMT.
Also praktisch nächste Woche. Beachtet aber die Zeitzone. Bei uns wäre das Treffen also um 17 Uhr.
Vielleicht sieht man sich ja dort. Bis später!

Post to Twitter

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Tutorial: Plugins für den Glastopf

Logo by Lukas Rist
Tutorial: Plugins für den Glastopf


Inhaltsverzeichnis
1. Einleitung
2. Was wird gebraucht?
3. Ein Überblick: Die Struktur des Plugins
4. Los geht's: Das Plugin
5. Sprachenwechsel: Annehmen der Glastopf Daten in PHP
6. Ausgeben der Daten in PHP
7. Schlusswort

» Einleitung

Seit einiger Zeit kann man für den Glastopf Honeypot eigene Module/Plugins basteln. Genauso wie beim Amun Honeypot, werden diese in der Skriptsprache “Python” geschrieben.
Ich habe mich jetzt die letzten Tage ein klein wenig damit beschäftigt, vorallem, weil ich für meinem Blog gerne eine Statistk wollte.

Es hat mich überrascht, das es kaum Zeit brauchte, bis alles funktionierte. Die mitgelieferten Plugins, wie das Twitter oder IRC Plugin reichen vollkommen aus, um sich abzuleiten wie man was eigenes schreibt.

In diesem Tutorial will ich euch an einem Beispiel zeigen, wie man solch ein Plugin schreibt. Hierbei werden wir Python und PHP verwenden, um dies zu realisieren.

» Was wird gebraucht?

Um das Ganze hier schnell zu machen, zähle ich die Dinge, die benötigt werden mal eben in einer Liste auf:

  • Grundlegende Kenntnisse in Python und PHP
  • Python >= 2.5 auf dem Glastopf Server, PHP >= 5 auf dem Webserver, MySQLdb Modul für Python 2.5, MySQL Datenbank auf dem Glastopf Server System
  • mysql.py in der glastopf.cfg aktiviert
  • funktionierende Glastopf Revision >= 189 Installation

Wichtig ist vorallem das ihr MySQL auf eurem Glastopf Server installiert habt, sowie das Plugin in der Config aktiviert ist, da sonst ohne dies keine Statistiken erfasst werden und zum Webupdater gesendet werden können.

» Was programmieren wir jetzt?

Wir werden uns jetzt ein kleines Plugin für den Glastopf schreiben, was jede Stunde Statistiken übermittelt, ähnlich wie das Twitter Plugin.
Dieses Plugin übermittelt in diesem vorgegebenen Zeitraum folgendes: Anzahl der Unique IPs, Anzahl der Unique Paths und die Anzahl der Angriffe in den letzten 60 Minuten.
Um diese Sachen zu erfassen, werden wir zwei PHP Skripte benötigen, das Erste nimmt die Daten vom Glastopf entgegen, das Zweite gibt diese wieder aus.

» Ein Überblick: Die Struktur des Plugins

Sehen wir uns die Ordnerstruktur des Glastopfes einmal an:

glastopf@honeypot:/home/glastopf/topf$ ls
AUTHORS    CREDITS  README  files  modules  res
CHANGELOG  LICENSE  conf    log    plugins  webserver.py

Im Hauptordner finden wir einen “files”-Ordner, wo die Malware gespeichert wird, im “modules”-Ordner sind Topfeigene Module enthalten, der “conf”-Ordner beinhaltet die Konfigurationsdateien, im “log”-Ordner finden wie Logdateien und im letzten Ordner “plugins” sind unsere hausgemachten Plugins enthalten.

Uns interessiert jetzt eigentlich nur der “conf” und der “plugins”-Ordner. Die restlichen können wir ausser acht lassen. Theoretisch ist das Plugin, was wir schreiben ein Logging Module, wie das hauseigene Twitter Modul. Allerdings werden wir ein wenig tricksen, damit unser Plugin als Dataplugin durchgeht. (Wir könnten uns auch die Mühe machen und die “logger.py” im “modules”-Ordner editieren, damit wir unser Plugin im “logmodules”-Unterordner ablegen können.)

Das soll uns aber nicht weiter groß stören. Mal sehen ob da in Zukunft noch eine Unterteilung in Log – und Datahandling Module eingebettet wird. An sich ist es aber gar nicht mal schlecht, unser Plugin als Datahandling Modul zu bauen, da wir später noch die Möglichkeit haben, komplette Datensätze zu verschicken. (Aber dazu werde ich vielleicht irgendwann nochmal einen Artikel schreiben.)

Da wir flexibel sind, bekommt unser Plugin natürlich auch eine eigene Konfiguration. (Ob das jetzt UNBEDINGT von Nöten ist, ist ja erstmal egal.)
Dazu können wir jetzt schonmal in unserer IDE einen Unterordner “conf” sowie eine leere Datei “gsweb.cfg” anlegen. Danach folgt dann auch gleich noch der Unterordner “plugins”, in dem wir eine Datei “gsweb.py” anlegen.

Die PHP Dateien können wir erstmal in einem Unterordner “php” ablegen. Wie diese genannt werden, ist relativ egal, Vollständigkeitshalber nennen wir diese “gssubmit.php” und “gsshow.php”.

» Los geht’s: Das Plugin

Als erstes machen wir uns an die Python-Programmierarbeit. Um es einfacher zu gestalten, werde ich immer ein Stückchen Code posten und diesen dann erklären.

Schreiben wir uns zu allererst mal die benötigte Konfigurationsdatei, die wir gerade angelegt haben:

[gsweb]

UpdateURL: http://glastopfblog.tld/gssubmit.php # URL to the submit script

Wir ihr unschwer erkennen könnt, hat diese Konfiguration nur 2 Zeilen. Das “[gsweb]“ dient dazu, dass der ConfigReader erkennen kann, in welchem Abschnitt er gerade ist und “UpdateURL” ist die URL zu eurer PHP Datei, die Daten vom Glastopf entgegen nimmt.

Nur noch kurz abspeichern, und die Konfiguration wäre soweit geschafft.

Jetzt geht es an den Käse! Die “gsweb.py”!

Schauen wir uns zunächst die Imports an:

""" Importing modules """
import datetime
import urllib
import urllib2
import ConfigParser
import threading
import time
import MySQLdb
import string
from time import localtime, strftime

from settings import options

Diesen Abschnitt müsste ich eigentlich nicht weiter erklären, da er wichtige Module lädt, die für die Ausführung des Plugins benötigt werden. Unteranderem “urllib” und “urllib2″, die zur Übermittlung von HTTP Daten genutzt werden.

class toWeb():

Wir bauen uns als erstes eine kleine Klasse.

    def __init__(self):
        config = ConfigParser.ConfigParser()

        """ Reading MySQL Options """
        config.read("conf/glastopf.cfg")
        self.mysql_opts = {
            "host" : config.get("mysql", "host"),
            "port" : config.get("mysql", "port"),
            "user" : config.get("mysql", "user"),
            "pass" : config.get("mysql", "pass"),
            "db" : config.get("mysql", "db")
            }

        """ Reading Glastopf Webupdate Options """
        config.read("conf/gsweb.cfg")
        self.UpdateURL = config.get("gsweb", "UpdateURL")

Hier lesen wir zuerst unsere beiden Konfigurationsdateien aus, einmal die für den MySQL Server und unsere Webupdater Konfiguration. Danach starten wir einen Timer, der in einem vorgegeben Zeitraum etwas ausführt. (Dazu später noch mehr.)

    def update(self, data):
        try:
            """ POST new data to the Webupdate.php """
            parameter = {'update' : data}
            parameter = urllib.urlencode(parameter)
            request = urllib2.Request(self.UpdateURL, parameter)
            response = urllib2.urlopen(request)

            if response.read(1024) != "SUCCESS":
                print "GsWEB - Error: Couldn't update. (%s)" % (response.read(1024))
            else: print "GsWEB: Successfully updated..."
        except:
            print "GsWEB - Error: Couldn't update."
            pass

Nachdem wir nun alles initialisiert und ausgelesen haben,  schauen wir uns die Funktion an, die unsere Daten vom Glastopf übermittelt.

Um den Glastopf vor unschönen Abstürzen zu bewahren, packen wir unseren Code in einen Try/Except-Block. Hier geben wir mit der “parameter”-Variable an, was an unsere “gssubmit.php”-Datei per POST gesendet wird. Hier gibt es eigentlich nicht mehr viel zu erklären, wir encoden die Daten, so dass wir sie danach senden können. Ist alles in Ordnung, sendet unsere PHP Datei “SUCCESS” zurück.

    def dbconnect(self):
        try:
            mysql = MySQLdb.connect(
                self.mysql_opts["host"],
                self.mysql_opts["user"],
                self.mysql_opts["pass"],
                self.mysql_opts["db"],
                int(self.mysql_opts["port"])
                )
        except MySQLdb.Error, e:
            print "MySQL Error %d: %s" % (e.args[0], e.args[1])
            pass
        mysql.threadsafety = 2
        return mysql

Auch hier ist nicht viel zu sagen. Die Funktion verbindet sich mit dem MySQL Server.

    def squawk_all(self):

Hier kommen wir noch einmal zu einer interessanten Funktion, die ein wenig näher erläutert werden sollte. Mit dieser Funktion ziehen wir unsere Daten aus der MySQL Datenbank und setzen sie zu einem einheitlichen Datensatz zusammen, der später von unserem PHP Skript bearbeitet werden kann.

        mysql = gsweb.dbconnect()
        cursor = mysql.cursor()

        """ sql1 = unique IPs, sql2 = unique paths, sql3 = attacks in 60 minutes """
        sql = {
            "1" : """
                SELECT ip FROM log
                GROUP BY ip
                """
,
            "2" : """
                SELECT vicpath FROM path
                """
,
            "3" : """
                SELECT id FROM log
                WHERE attime > %s
                """

            }

Hier verbinden wir uns zur MySQL Datenbank und legen dann fest, welche Queries gesendet werden sollen. Hier habe ich ein Dict als Variablentyp genommen, da es am sinnvollsten erscheint. (Klar, man könnte auch alle 3 SQL Queries in 3 verschiedene Variablen packen…)

Was die einzelnen Queries nun machen, steht im Kommentar.

        """ first sql query for the IPs """
        cursor.execute(sql['1'])
        message = str(cursor.rowcount) + "|"
        """ second sql query for the paths """
        cursor.execute(sql['2'])
        message = message + str(cursor.rowcount) + "|"
        """ third sql query for the attacks """
        lasttime = (datetime.datetime.now() - datetime.timedelta(minutes=60)).strftime("%Y-%m-%d %X")
        try:
            cursor.execute(sql['3'], (lasttime,))
        except MySQLdb.Error, e:
            print "MySQL Error %d: %s" % (e.args[0], e.args[1])

        message = message + str(cursor.rowcount) + "|" + strftime("%a, %d %b %Y %H:%M:%S", localtime())

Jetzt führen wir diese Queries aus, packen das Result davon in eine Variable und fügen zusätzlich noch einen “I” als Delimiter hinzu.
Bei der “lasttime”-Variable wird festgestellt, welche Angriffe in den letzten 60 Minuten stattfanden.
Wenn wir alle 3 Results zusammengesetzt haben, senden wir noch Zeit und Datum mit.

        """ close the MySQL connection and update """
        mysql.close()
        gsweb.update(message)

Ist alles getan, schließen wir die Verbindung zum MySQL Server und senden den Datensatz an unser PHP Skript.

Jetzt haben wir unsere Klasse soweit fertiggestellt. Aber bisher haben wir NUR die Klasse, die bisher noch nichts macht, ausser im Quellcode stehen. Wir brauchen also noch ein Stückchen Code, der mit der Klasse umgeht. Zu diesem Abschnitt kommen wir jetzt.

def dbwrite(data):
    pass

Oh, eine Funktion die gar nichts macht? Erinnert euch einmal zurück, ein Stück weiter oben hatte ich erwähnt, dass wir ein wenig tricksen müssen um unser Modul als Datahandlingplugin auszugeben. Die “dbwrite”-Funktion wird normalerweise vom Datahandler mit Daten gefüttert, die wir jetzt theoretisch noch weiterverarbeiten könnten. Da wir aber nur eine grobe Statistik führen wollen, fällt das ganze hier flach. Die Funktion habe ich nur mit in den Code genommen, damit uns der Glastopf keine Exception ausgibt.

class Timed():

    def action(self):
        if not self.canceled:
            gsweb = toWeb()
            gsweb.squawk_all()
            time.sleep(1)
            self.timed.start_timer()

    def start_timer(self):
        self.canceled = False
        self.timed = Timed()
        self.t = threading.Timer(3600, timed.action)
        self.t.start()

    def stop_timer(self):
        self.t.cancel()
        self.canceled = True

Diese Klasse dient als Timer. Sie sorgt quasi dafür, dass jede Stunde der Updateprozess gestartet wird und Daten an unser PHP Skript geschickt werden. Bedarf eigentlich auch keiner größeren Beschreibung.

gsweb = toWeb()
timed = Timed()
timed.start_timer()

def cancelit():
    timed.stop_timer()

print "GsWeb - Webupdater plugin loaded..."
time.sleep(1)

Puh. Gleich habens wir geschafft. Die letzten Zeilen Code sind dafür da, die Klassen zu initialisieren und eine kurze Meldung auszugeben, dass das Plugin gestartet wurde.

» Sprachenwechsel: Annehmen der Glastopf Daten in PHP

Das Plugin für den Glastopf wäre soweit fertig. Aber ohne unser PHP Skript kann es noch nicht viel machen. Als erstes werden wir also ein Skript schreiben, dass die Daten entgegennimmt und diese in eine Datei schreibt. Klingt einfach. Ist es auch.

Bevor ihr anfangt, achtet bitte darauf, dass ihr der Datei, in die euer Skript schreiben soll, die richtigen Chmod Rechte gebt. Sonst wundert ihr euch am Ende, warum es nicht geht und sucht wahrscheinlich Stunden nach den Fehler.

<?php
/* Options */
$data = "gsweb.dat";
$trusted = array("127.0.0.1", "721.0.0.1");

In unserem PHP Skript werden wir die Optionen direkt festlegen, da eine Konfigurationsdatei hier überflüssig wäre. (Und ich ehrlich gesagt keine Ahnung hab, wie ich in PHP Konfigurationsdateien schreibe & auslese.)

Also, die “$data”-Variable gibt an, in welcher Datei die Daten abgelegt werden. Dieser solltet ihr die entsprechenden Chmod Rechte geben.
Bei der “$trusted”-Variable solltet ihr die IP Adresse von dem Server angeben, auf dem euer Glastopf läuft. Hier könnt ihr mehrere IP Adressen eintragen, die berechtigt sind, Daten zu speichern.

// Checking if the accessing IP address is a trusted source.
foreach ($trusted as $trust) {
    if ($_SERVER['REMOTE_ADDR'] == $trust) {
        $safe = TRUE;
        break;
    }
    $safe = FALSE;
}

Hier fragen wir in einer Schleife ab, ob die IP Adresse die auf das Skript zugreift überhaupt berechtigt ist. Wenn das zutrifft, wird die “$safe”-Variable auf TRUE gesetzt und die Schleife unterbrochen.

// If the source is safe, proceed.
if ($safe) {

// Getting the data
$submit = $_POST['update'];

// Checking if the file is writable
if (is_writable($data)) {
    if (!$submit) {
        print "ERROR|NO_DATA";
        exit;
    }
    if (!$handle = fopen($data, 'w')) {
        print "ERROR|404";
        exit;
    }

    // Can't write to file
    if (fwrite($handle, $submit) == FALSE) {
        print "ERROR|403";
        exit;
    }

    // If wrote, SUCCESS and close the file
    print "SUCCESS";
    fclose($handle);
}
} else { print "<a href="/">back to home"; }
?>

Wenn die Abfrage geklärt ist und alles in Ordnung ist, erhalten wir die gePOSTeteten Daten, checken ob die Datei schreibbar ist und falls dies so ist, geben wir “SUCCESS” zurück.
Falls unsere IP nicht berechtigt ist, wird einfach ein Link eingeblendet, der zurück auf die Hauptseite verweist. Damit wäre unser Skript, was die Daten entgegennimmt fertig.

» Ausgeben der Daten in PHP

Wir sind jetzt fast fertig mit unserem Plugin. Bevor wir uns dem Test widmen, müssen wir aber noch das Skript schreiben, dass den ganzen Kram ausgibt.
Das ist aber eine Sache von 5 Minuten.

<?php
/* Options */
$data = "gsweb.dat";

Auch hier haben wir wieder eine kurze Optionen-Sektion. Diese Gibt an, welche Datei den gelesen werden soll.

if (!$handle = fopen($data, 'r')) {
    print "Error reading glastopf informations.";
    exit;
}
else {
    $line = fgets($handle, 1024);
    $line = explode('|', $line);
    fclose($handle);

    print "$line[0] IPs in database
$line[1] Paths in database
$line[2] Attacks in the last hour
<span style="
font-size:9px;">(last updated: $line[3])";
}
?&gt;

Wir öffnen die Datei, splitten die Daten nach “|” und geben diese dann aus.

Fertig!

Jetzt müssen wir nur noch die “glastopf.cfg” bearbeiten und unter “dataplugins” unser Plugin “gsweb.py” einfügen.
Die “gsweb.cfg” wird ebenfalls im Config Ordner des Glastopfes abgelegt und unser “gsweb.py” in den Pluginordner.

Unsere beiden PHP Skripte legen wir jetzt auf unserem Webserver, auf dem auch ein Blog oder eine sonstige Webseite liegt ab. Unser Skript, dass die Daten ausliest, kann über einen PHP include leicht eingebunden werden. Sollte alles erledigt sein, kann der Glastopf wie gewohnt gestartet werden und die Meldung, dass unser Plugin geladen wurde, sollte zu sehen sein.

» Schlusswort

Ich hoffe das dass Tutorial verständlich rübergekommen ist und ihr euch einen Überblick darüber verschaffen konntet, wie ihr eigene Plugins für den Glastopf schreiben könnt.
Falls ihr noch Fragen habt oder irgendeinen Fehler im Artikel findet, schreibt einfach einen Kommentar und ich schaue, dass ich euch helfen kann.

Wie gesagt, das Tutorial deckt nur einen kleinen Teil ab und zeigt, wie man anfangen kann, den Glastopf selber zu erweitern. Wenn man es richtig nimmt, ist dieses Plugin eigentlich nur eine Modifikation des Twitter Plugins. Man kann mit den Daten natürlich noch viel mehr anstellen, unteranderem könnte man ein Plugin schreiben, dass die Angriffe Live protokolliert und automatisiert Abuse Meldungen an die Hoster sendet usw.

Falls der Code im Tutorial nicht funktionieren solltet, wieso auch immer, für denjenigen habe ich das Plugin nochmal gezippt hochgeladen.

Download hier => gsweb.zip

So, viel Spaß mit diesem Plugin, wenn ihr mal oben links schaut, seht ihr, dass ich dieses Plugin schon benutze und es soweit 1a funktioniert. Wenn ich Lust habe, werde ich den Artikel eventuell auch noch ins Englische übersetzen.

Post to Twitter

Verschlagwortet mit , , | 1 Kommentar

Amun 0.1.8 & Glastopf rev. 189

Sodele. Auf meinem Server läuft derzeit eigentlich überhaupt gar nix, und da dacht ich mir, installiert ich mal die neusten Versionen der beiden Honeypots.

Amun Version 0.1.8 & Glastopf rev. 189

Die neuste Amun Version kann über die Sourceforge Projektseite geladen werden, die neuste Glastopf über einen simplen Subversion Command “svn co svn://88.198.38.89:9090/branches/unstable”.

Einrichten der neuen Amun Version:

Wie schon in der Anleitung, die ich mal geschrieben hatte, müssen hier eigentlich nur die Konfigurationsdateien verändert werden, welche sich im Unterordner “conf/” befinden.
Ich geh mal nicht genauer auf die amun.conf ein, da dies alles in der Anleitung steht.

Wenn das erledigt ist, kann wie gewohnt per amun_server.py gestartet werden.

Einrichten des neuen Glastopfes:

Hier finden wir die Config auch im Unterordner “conf/”. Die glastopf.cfg ist hierbei die Hauptkonfiguration.

Dort können wir jetzt unter “ip” und “port” angeben, unter welcher IP und auf welchem Port der Glastopf lauscht, falls dem Server mehrere IPs zugeteilt sind.
Bei dem Plugins-Abschnitt kann man jetzt dynamisch Plugins dazufügen, wie man es bei Amun gewohnt ist. Im MySQL Abschnitt kommen die Zugangsdaten für die MySQL DB rein.
Unter Misc kann man eine eigene Fakeseite angeben, den Whois Server und ob der neue oder der alte Parser verwendet werden soll.

Die weiteren Abschnitte sollten sich dann auch von alleine erklären.

Schön finde ich die IRC und die Twitter Funktion. :)

Post to Twitter

Veröffentlicht unter Allgemein | 2 Kommentare