[mittel-schwer] Beschütze die Weltherrschaft des HaBo

Kann ich mich leider auch erst genauer mit am Wochenende beschäftigen.
Mein Ansatz wäre jetzt gewesen: Ein One-Time Pad wäre nicht entschlüsselbar und der Gefangene hätte bereits vorher einen Schlüssel gebraucht => fällt also raus, wäre auch im Sinne eines Crackmes nicht wirklich fair :D.
Eine normale Caesar-Chiffre scheint es nicht zu sein (zumindestens ergibte das Online Dingens nichts sinnvolles).
Also scheint eine Vigenère Verschlüsselung vorzuliegen. Der Name des Gefangen scheint nicht der Schlüssel zu sein, da der Brief aber an ihn adressiert ist, halte ich die Wahrscheinlichkeit für ziemlich hoch, dass sein Name im Text vorkommt. Mein nächster Schritt wäre jetzt zu Versuchen mittels Autokorrelation, da mir der Ciphertext hinreichend groß erscheint, herauszufinden wie die Länge des Schlüssels ist und dann versuchen diesen zu Bruteforcen. Da ich kein Tool für den Bruteforce auf Vigenère kenne und gerne immer selber Sachen schreibe, hätte ich mir jetzt selber einen einfachen Bruteforce zusammen geschreiben. Bevor ich mich aber am Wochenende an die Arbeit setze (sofern es nicht sowieso jemand bis dahin schon gelöst hat) hätte ich gerne gewusst, ob ich total aufm Holzweg bin oder der Schlüssel hinreichend groß ist, dass ich per Bruteforce bis 2032 dranhängen würde.
 
Stichwort: Substitution A-Z wird mit CKYVLPGOXRHSBTNQWEMJIZADFU ersetzt.

Stimmt nicht zu 100%, aber man kann es ohne Probleme lesen ;)

Der entschlüsselte Text lautet somit:

liebe nadja,

heute moechte ich dir etwas ueber die naturwissenschaftliche arbeiten von goethe erzaehlen:

goetges mittel der naturerkenntnis war die beobachtung; hilfsmotteln, wie z.b. dem mikroskop, stand er misstrauisch gegenueber: "der mensch an soch selbst, insofern er sich sei.er gesunden sinne bedient, ist der groesste und genaueste pgysikalisch apparat, den es geben kann, und das ist eben das groesste unheil der neueren physil, dass man die experime/te gleichsam vom mqnschen abgesondert hat und bloss in dem, was kuenstkiche instrumente zeigen, die n1tur erkennen, ja, was sie leisten kamn, dadurch beschraenken und beweisen will." er war bestrebt, die natur in ihrem gesamtzusammenhang, der auch den menschen eonschloss, zu erkennen. die abstraktion, deren sich die wissenschaft zu dieser zeit zu bedienen begann, betrachtete goethe, wegen der damit verbundenen isolierung der objekte vom betrachter, mit misstrauen. goethes verfahren ist mit der modernen exakten naturwissenschaft jedoch nicht zu vereinbaren: "[...] er [...] hat den bereich des unmittelbar sinnlichen eindrucks und der unmittelbar geistigen anschauung nicht ueberschritten in richtung auf eine abstrakte, mathematisch verifizierbare, unsinnliche gesetzlichkeit." stellte der physiker hermann von helmholtz 1853 fest.

goethes beschaeftigung mit der naturwissenschaft fand vielfach eingang in seine dichtung, so in teile des faust und in die gedichte die metamorphose der pflanzen und gingo biloba.

die belebte natur stellte goethe sich als in staendigem wandel begriffen vor. so versuchte er in der botanik zunaechst, die unterschiedlichen pflanzenarten auf eine gemeinsame grundform, die "urpflanze", zurueckzufuehren, aus der sich saemtliche arten entwickelt haben sollten. spaeter richtete er seine aufmerksamkeit auf die einzelne pflanze und glaubte zu erkennen, dass die teile der bluete und die frucht letztlich umgebildete blaetter darstellen. die ergebnisse seiner beobachtungen veroeffentlichte er in der schrift versuch die metamorphose der pflanzen zu erklaeren (1790). in der anatomie gelang goethe 1784, gemeinsam mit dem anatomieprofessor justus christian loder, zu seiner grossen freude die (vermeintliche) entdeckung des zwischenkieferknochens beim menschlichen embryo (ihm war entgangen, dass der knochen in der vergangenheit schon mehrmals beschrieben worden war). der zwischenkieferknochen, bis dahin nur bei den saeugetieren bekannt, verwaechst beim menschen vor der geburt mit den umgebenden oberkieferknochen. sein nachweis beim menschen galt damals als wichtiges indiz fuer dessen - von vielen wissenschaftlern bestrittene - verwandtschaft mit den tieren.

seine farbenlehre (erschienen 1810) hielt goethe fuer sein naturwissenschaftliches hauptwerk und verteidigte die darin vertretenen thesen hartnaeckig gegen zahlreiche kritiker. im alter aeusserte er, dass er den wert dieses werks hoeher einschaetze als den seiner dichtung. mit der farbenlehre stellte goethe sich gegen diejenige isaac newtons, der nachgewiesen hatte, dass das weisse licht sich aus lichtern der unterschiedlichen farben zusammensetzt. goethe glaubte dagegen aus eigenen beobachtungen schliessen zu koennen, "dass das licht eine unteilbare einheit sei und die farben aus dem zusammenwirken von hellem und dunklem, licht und finsternis entstuenden, und zwar durch die vermittlung eines "trueben" mediums." so erscheint beispielsweise die sonne roetlich, wenn sich eine truebe dunstschicht vor ihr ausbreitet und sie abdunkelt. schon zu goethes zeiten erkannte man allerdings, dass diese phaenomene sich auch mit der theorie newtons erklaeren lassen. wenn auch die farbenlehre in ihrem kern von der fachwelt schon bald zurueckgewiesen wurde, so uebte sie doch auf die zeitgenoessischen und nachfolgenden maler, vor allem philipp otto runge, grossen einfluss aus; zudem schuf goethe damit die grundlage der farbpsychologie.

in der geologie befasste goethe sich vor allem mit dem aufbau einer mineralien-sammlung, die bei seinem tode auf 17.800 steine angewachsen war. ueber die einzelerkenntnis der gesteinsarten wollte er generelle einsichten in die materielle beschaffenheit der erde und die erdgeschichte erlangen. die neuen erkenntnisse der chemischen forschung verfolgte er mit grossem interesse und begruendete im rahmen seiner zustaendigkeit fuer die universitaet jena den ersten lehrstuhl fuer chemie an einer deutschen hochschule.

(quelle wiki)

ich hoffe wir hoeren bald wieder voneinander,

dein alex

Gruß,
redox
 
Agent ReDoX hat einen richtigen und wichtigen Beitrag geleistet, jedoch sieht die Zentrale keinen Sinn, warum der Gefangene über Goethe schreiben sollte - da muss mehr dahinter stecken!
 
Zuletzt bearbeitet:
Darüber habe ich mir auch schon den Kopf zerbrochen, jedoch bin ich zu keinem zufriedenstellenden Ergebnis gekommen.
Ich rufe hiermit alle verfügbaren Agenten auf, sich den entschlüsselten Text vorzunehmen und nach Hinweisen Ausschau zu halten. Der originale Wiki-Eintrag ist hier zu finden.
 
Ich hab mal die Differenzen zum Originaltext ausgemacht:
i -> o
. -> n
g -> h
l -> k
/ -> n
q -> e
1 -> n
o -> i
(Text -> Originaler Wikieintrag)
Inwiefern
"i.gl/q1o" und "onhkneni" jetzt zusammenhängen kann ich allerdings nicht sagen...
 
Die Fehler:
goetges
goethes

hilfsmotteln
hilfsmitteln

soch
sich

sei.er
seiner

pgysikalisch
physikalisch

physil
physik

experime/te
experimente

mqnschen
menschen

kuenstkiche
kuenstliche

n1tur
natur

kamn
kann

eonschloss
einschloss

Also wenn das alle Fehler sind bekommen wir folgenden Link:
http://goo.gl/qk1mo (goo.gl ist der Url-Shortener von Google)
und laden somit auf dieser Page:
Flower Shop

Auf der Seite fallen mir direkt 2 Sachen auf:
1) Kein Wort Deutsch (also bin ich mir sicher, dass diese Homepage von einer bösen Organisation als Kommunikationsmittel dient!)
2) "my accout" ist im Menü entweder absichtlich falsch geschrieben oder der Admin ist ein Noob :D

MfG
Inliferty
 
Also wenn das alle Fehler sind bekommen wir folgenden Link:
Flower Shop (goo.gl ist der Url-Shortener von Google)
und laden somit auf dieser Page:
Flower Shop

Auf der Seite fallen mir direkt 2 Sachen auf:
1) Kein Wort Deutsch (also bin ich mir sicher, dass diese Homepage von einer bösen Organisation als Kommunikationsmittel dient!)
2) "my accout" ist im Menü entweder absichtlich falsch geschrieben oder der Admin ist ein Noob :D
Hey nicht schlecht:
Die Seite hat offensichtlich keine richtige Funktionalität, also soll sie uns einen Hinweis liefern. Als erstes fällt auf, dass wir bereits 3 Sachen im Einkaufswagen haben. Und diese werden alle als "Gift Flowers" bezeichnet. Es gibt übrigens auch keine anderen zumindestens keine mit funktionierenden Link. Vielleicht will der Gefangene uns austricksen mit giftigen Blumen?
Der Text "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation." scheint erstmal lateinisch zu sein. Leider hatte ich kein Latein musste aber auch feststellen, dass nach Wikipedia: "„Lorem ipsum dolor sit amet, consectetur, adipisci velit …“ (vollständiger Text) ist ein Blindtext, der nichts bedeuten soll, sondern als Platzhalter im Layout verwendet wird, um einen Eindruck vom fertigen Dokument zu erhalten. Die Verteilung der Buchstaben und der Wortlängen des pseudo-lateinischen Textes entspricht in etwa der natürlichen (lateinischen) Sprache. Der Text ist (absichtlich) unverständlich, damit der Betrachter nicht durch den Inhalt abgelenkt wird." Demnach kam nach Google Translator eigentlich nur Quatsch raus außer irgendetwas mit Hawaii und Geld :D :"Lorem ipsum dolor sit amet, suscipit bibendum sollicitudin, kann sed sparen Sie Zeit, Geld und Hawaii. Um ein triviales Beispiel, das wir."
Als nächstes hab ich mir mal das Blumenbild als großes Bild angeguckt, was auch total anders aussieht als die Vorschau. Leider konnte ich in der Datei aber auch nichts finden.
 
Achja richtig. Hab ich vergessen zu erwähne. Allerdings hab ich bis jetzt auch nicht im geringsten eine Ahnung wozu/warum diese Rechnung da falsch steht und was für ein Tipp das sein soll.
 
Der Login bei "my accout" ist mittels GET gelöst und man landet kommentarlos auf einer leeren Seite wenn die Login-Daten falsch waren. Das halte ich für sehr auffällig. Vielleicht dient es auch nur dazu von der richtigen Fährte abzulenken 8)
 
Wow.. auch wenn ich bis dato nichts dazu beitragen kann - ich find dieses CrackMe sehr klasse und sehr interessant. Freut mich, dass jemand das ganze mit einer Story verknüpft.

Werd mich auch mal damit beschäftigen...

edit:
eine Kleinigkeit habe ich doch gefunden:
Hier findet sich die Zentrale:
http://untergrund.de.vc/
 
Zuletzt bearbeitet:
Interessant wäre auch wenn du sagst, wie du es gefunden hast :wink:

EDIT: Da hab ich einen Beitrag verpennt. Hat sich erledigt.
 
Was mir noch auffällt ist, dass beim Passwort vergessen nur die Antwort übergeben wird, nicht auch noch der Account bei dem die Antwort verifiziert werden soll:
Untergrund
Bei Andre wird ein Alter verlangt. Von -20 bis 100 per Iframe ausgewertet jedoch kein Ergebnis bekommen..
Ggf wird der referer gecheckt? Oder es hat auch keine Funktionalität
xrayn - Dieser Account scheint beim login gültig zu sein, jedoch gibt es beim Passwort anfragen einen fehler... :O
 
Zuletzt bearbeitet:
ChiefWiggum, das ist mir auch gerade aufgefallen.
Mackz soll mal das Plain-Text Passwort von xrayn aus der HaBo-Datenbank bereitstellen (Hash-Funktion wurde ja aus dem Board entfernt) ;)
 
Double Post!

Mackz war so freundlich und hat in der HaBo-Datenbank gestöbert und mir den Hash per PN mitgeteilt.
(Er konnte mir leider nicht verraten ob der Hash gesalzen ist oder nicht)

xrayn
1c3fa8e5c3041c84c9e067dcf2e8741d

http://blumenzucht.bl.funpic.de/login.php?email=bla' OR ASCII(SUBSTRING(password,32,1)) = ASCII('d') OR '&password=a

Wer hat Lust die anderen User zu dumpen?

[Edit:]
Info aus der Chatbox:
[27.07., 16:52] Inliferty Ich denke wir sind wieder einen Schritt weiter (jetzt muss ein MD5 Cracker her)
[27.07., 17:14] xrayn nein, die hashes sind hackerboard.deX X=1-6

hackerboard.de1 - c55d948580797e89806edf65d6ba78fe - alex
hackerboard.de2 - 7951f4f6cb36aa3c9ff394b95682f535 - nadja
hackerboard.de3 - 77cb74698d738561367302706cbd6b2e - andre
hackerboard.de4 - 1c3fa8e5c3041c84c9e067dcf2e8741d - xrayn
hackerboard.de5 - 149d4576ce76e225fbf0fa593429ec57 - bill
hackerboard.de6 - 605955b76e1b1d7a1ffbe34ac8b0f237 - morat

Aber keiner der Logins funktioniert auf http://untergrund.de.vc/

MfG
Inliferty
 
Zuletzt bearbeitet:
Interessante Arbeit Agent Inliferty, durch eine Hochrangschaltung, die bei jeden Computer nach der Übernahme der Herrschaft installiert wurde, hat die Zentrale sämtliche Computer der Welt eingesetzt um den Hash zu knacken.

1c3fa8e5c3041c84c9e067dcf2e8741d = hackerboard.de4

Die feindlichen Agenten scheinen über ein gewisses Maß an Ironie oder Zynismus zu verfügen - mehr aber auch nicht. Psychoanalytiker der Zentrale bezweifeln, dass die Gegner zweimal den gleichen Trick oder Passwort verwenden, es würde der paranoiden Einstellung der Gruppe widersprechen.
 
EMail: alexander.drjiskoxxxx[at]gmx.de
FB: Alexander Drjiskovich | Facebook

Das Passwort für alex auf im Untergrund lautet: megasecretpasswordyouwontguess.

Es ist uns gelungen essenzielle Daten vom HaBo-Weltherrschaftsserver zu stehlen. Wie immer
liegen diese gut gesichert auf unserem Server, welcher ausschließlich über unser geheimes
Zugangsprogramm zu erreichen ist. Wir sind uns allerdings nicht ganz sicher, wie sicher dieses
ist, daher bitten wir alle im Untergrund den Server auf seine Sicherheit zu überprüfen. Es
ist dabei davon auszugehen, dass unser geheimer Schlüssel nie gestohlen wird.

Code:
import random, base64, socket, os, sys, getopt

def xor_crypt(message, key):
    for k in key:
        new_message = ''
        for m in message:
            new_message += chr(ord(k)^ord(m))
        message = new_message
    return message

def get_key():
    # Natuerlich steht der geheime Schluessel nicht hier.
    # Diese Prozedur liest den Schluessel aus einem
    # Truecrypt-Container, welcher mit einem Passwort 
    # geschuetzt ist, welches mind. 30 Zeichen lang ist.
    # Zu Testzwecken wird hier einfach ein Passwort
    # zurueckgegeben
    return 'secretpassword'

class Server:
    def __init__(self):
        self.HOST = ''
        self.PORT = 1337
        self.ADDRESS = (self.HOST, self.PORT)
        
        self.server = socket.socket()
        self.server.bind(self.ADDRESS)
        self.server.listen(1)
        #
        # Authentifizierungsprotokoll:
        # Authentifiziert Server (S) und Client (C) ueber einen bekannten Schluessel k
        # weiter wird ein neuer Schluessel vom Server generiert, der fuer die Kommunikation
        # genutzt werden muss. Auf diese Weise wird verhindert, dass zuviele Nachrichten,
        # die mit k verschluesselt sind, ausgetauscht werden und so die Angriffsflaeche fuer
        # Kryptoanalysen minimiert.
        # 
        # C -> S: user + nonceC
        # S -> C: encrypt(nonceC, k) + encrypt(neuerSchluessel, k) + encrypt(nonceS, k) 
        # C -> S: encrypt(nonceS, neuerSchluessel)
        key = get_key()
        
        conn, addr = self.server.accept()
        print 'Connected by', addr
        
        data = conn.recv(1024)

        user,nonceC = data.split(';')
        user = base64.standard_b64decode(user)
        nonceC = base64.standard_b64decode(nonceC)
        
        encrypt_nonceC = base64.standard_b64encode(xor_crypt(nonceC, key))
        new_key = str(os.urandom(random.randrange(5,10)))
        encrypt_new_key = base64.standard_b64encode(xor_crypt(new_key, key))
        nonceS = str(random.randrange(pow(2,32)))
        tmp_nonceS = base64.standard_b64encode(xor_crypt(nonceS, key))
            
        conn.send(encrypt_nonceC+';'+encrypt_new_key+';'+tmp_nonceS)
            
        data = conn.recv(1024)
            
        if nonceS == xor_crypt(base64.standard_b64decode(data), new_key):
            msg = xor_crypt(user + ' ist mein Meister', new_key)
        else:
            msg = xor_crypt('geh weg!!!', new_key)
        
        conn.send(base64.standard_b64encode(msg))
        conn.close()
        self.server.close()

class Client:
    def __init__(self):
        self.HOST = '127.0.0.1'
        self.PORT = 1337
        self.ADDRESS = (self.HOST, self.PORT)
        
        self.client = socket.socket()
        self.client.connect(self.ADDRESS)
        key = get_key()
        
        user = base64.standard_b64encode('alex')
        nonceC = str(random.randrange(pow(2,32)))
        tmp = base64.standard_b64encode(nonceC)
        
        self.client.send(user+';'+tmp)
        
        data = self.client.recv(1024)
        [...]
        
        from_server_nonceC = xor_crypt(base64.standard_b64decode(data.split(';')[0]), key[::-1])
        from_server_new_key = xor_crypt(base64.standard_b64decode(data.split(';')[1]), key[::-1])
        nonceS = xor_crypt(base64.standard_b64decode(data.split(';')[2]), key[::-1])
        
        if nonceC != from_server_nonceC:
            print 'Das ist nicht unser Server!'
            self.client.close()
            return
        
        self.client.send(base64.standard_b64encode(xor_crypt(nonceS, from_server_new_key)))
        
        data = self.client.recv(1024)
        
        print xor_crypt(base64.standard_b64decode(data), from_server_new_key)


def main(argv):    
    try:                     
        opts, args = getopt.getopt(argv, "sc", [])           
    except getopt.GetoptError:          
        sys.exit(2)                     
    for opt, arg in opts:
        if opt in ("-s"):
            s = Server()  
        elif opt == '-c':
            c = Client()
        else:
            assert False, 'unhandled option'  
                
if __name__ == "__main__":
    main(sys.argv[1:])
 
Zuletzt bearbeitet:
Menno.. jetzt hatte ich grad den Kram entschlüsselt xD
damit keiner sagen kann ich lüge:
ich habs mit Base64 decodiert
 
Zurück
Oben