Skip to content

ocit‐writeups

Wasp1337 edited this page Feb 29, 2024 · 101 revisions
  ___  _ _            _                __        __    _ _                       
 / _ \| (_) ___ _   _| |__   ___ _ __  \ \      / / __(_) |_ ___ _   _ _ __  ___ 
| | | | | |/ __| | | | '_ \ / _ \ '__|  \ \ /\ / / '__| | __/ _ \ | | | '_ \/ __|
| |_| | | | (__| |_| | |_) |  __/ |      \ V  V /| |  | | ||  __/ |_| | |_) \__ \
 \___/|_|_|\___|\__, |_.__/ \___|_|       \_/\_/ |_|  |_|\__\___|\__,_| .__/|___/
                |___/                                                 |_|        

Translated from Italian language

Introduction

Network Security (Wireshark)

01 pcap

In dieser Challenge-Serie werden einige der Themen vorgestellt, die zur Lösung von Netzwerksicherheitsproblemen erforderlich sind. Um diese Aufgabe zu lösen, ist es notwendig zu verstehen, was eine pcap-Datei ist und wie man sie analysiert. Unter den verschiedenen Möglichkeiten, pcap-Dateien zu analysieren, ist Wireshark eine sehr empfehlenswerte Software mit einer grafischen Oberfläche. Um Wireshark auf Linux zu installieren, installieren Sie einfach das Paket aus den Standard-Repositories (z. B. sudo apt install wireshark). Windows- und macOS-Versionen sind ebenfalls verfügbar.

Das Flag für diese Challenge ist im TCP-Paket nach dem Handshake zu finden.

SOLUTION (by wasp1337): Frame 6 enthält 30B Daten --> Follow TCP-Stream --> Flag


02 details

In dieser Challenge sollen einige Pakete genauer analysiert werden. Im Einzelnen hat die Kennzeichnung das folgende Format: flag{Source_MAC_address/data_bytes_length}

Die für die Flags erforderlichen Informationen werden dem Frame Nummer 4 entnommen, dem ersten, der die Daten der TCP-Sitzung enthält.

SOLUTION (by wasp1337): Follow TCP-Stream ergibt die Anleitung für die Bildung der Flag: The flag is in the format ... Erforderliche Daten zusammensetzen --> Flag.


03 filters 1

Dies ist die erste einer Reihe von Herausforderungen, die sich mit der Verwendung von Ausdrücken zum Filtern von pcap/pcapng-Dateien befassen, um eine reduzierte und interessantere Menge von Paketen zu erhalten.

Um die Flag für diese erste Herausforderung zu erhalten, filtern Sie einfach die Pakete nach dem Protokoll. Wenn Sie nur Pakete filtern, die das HTTP-Protokoll verwenden, finden Sie die Flagge in einem benutzerdefinierten Request-Header.

Um besser zu lernen, wie man diesen Satz von Herausforderungen löst, wird empfohlen, die entsprechende Wireshark-Dokumentation über Filterung zu lesen.

SOLUTION (by wasp1337): Filter: http --> Frame 176 --> Flag


04 filters 2

Die Lösung dieses Problems erfordert einen logischen Ausdruck, der nach der Quell-IP-Adresse (192.168.100.3) und dem Protokoll (DNS) filtert.

SOLUTION (by wasp1337): Filter: dns and ip.src == 192.168.100.3 --> Flag


05 filters 3

Um diese Challenge zu lösen, ist ein logischer Ausdruck erforderlich, der nach Paketen mit Kommentaren filtert.

SOLUTION (by wasp1337): Filter: frame.comment --> Flag


06 filters 4

Die Lösung dieser Challenge erfordert einen logischen Ausdruck, der nur die Pakete auswählt, die die Zeichenfolge "Pwn all the things!!!" enthalten.

Die Flag muss dann standardmäßig wie folgt formatiert werden: flag{...}.

SOLUTION (by wasp1337): Filter: frame contains "Pwn all the things!!!" --> Flag


07 stream TCP

Diese Challenge konzentriert sich auf TCP-Konversationen (TCP Streams). Die Flag wird Zeichen für Zeichen in mehrere TCP-Pakete unterteilt, die zur selben Sitzung gehören.

Da die pcap-Datei groß ist und auch viele verstreute ICMP-Pakete enthält, besteht die effizienteste Lösung darin, die betreffende Sitzung zu filtern und vollständig anzuzeigen.

SOLUTION (by wasp1337): follow TCP Stream --> The flag is incoming... --> Flag


08 Byte extraction

Diese Challenge konzentriert sich auf die Analyse und Extraktion der Bytes eines bestimmten Pakets. In dieser Capture-Datei gibt es einen kurzen Austausch von TCP-Paketen, insbesondere der Frame mit Daten, die von IP 192.168.100.1 an 192.168.100.2 gesendet werden, ist für uns von Interesse.

Um die Flag zu erhalten, müssen die Bytes dieses Pakets extrahiert und sein Inhalt analysiert werden. Weitere Informationen hierzu finden Sie in der entsprechenden Dokumentation.

SOLUTION (by wasp1337): frame 6 data --> Paketbytes anzeigen, komprimiert, als Hexdump --> Flag


09 TLS traffic

SOLUTION:


10 Esporta oggetti

SOLUTION:


Web Security

Web 01 - GET request

This series of introductory web security challenges will introduce the HTTP protocol and the main web technologies commonly associated with it, and some simple tools for interacting with it.

The individual challenges will follow the jeopardy model, thus focusing on obtaining flags.

The examples and explanations proposed will refer to the Python language and its standard library, as well as to the requests and BeautifulSoup libraries, which we therefore recommend installing in order to best follow this path.

Installation of the recommended libraries on Debian and Ubuntu Linux

sudo apt install python3-requests python3-bs4

On Windows systems, manually install the Python interpreter obtainable from the official Python project website and run in the command prompt

pip install requests bs4

Conceived to facilitate access to hypertext documents, the HyperText Transfer Protocol HTTP is used today to transfer information of all kinds to and from remote servers over the network. This information is organised into resources, identified by address strings called URLs (Unified Resource Locators), and the basic operations that can be performed on these resources are called HTTP verbs.

The simplest of these verbs, GET, is used to obtain a resource from a remote server. The objective of this challenge is to obtain the text of the root resource from the server web-01.challs.olicyber.it, identified by the URL http://web-01.challs.olicyber.it/.

We recommend using the get function of the requests library.

Deepening: it can be observed that a URL is generally composed of a schema (in this case http) identifying the mechanism for accessing the resource, an optional Internet address including a port (web-01.challs.olicyber.it) and a path (in this case / identifying the root resource). The resources are organised in a tree structure reminiscent of that of a file system, where / is the main resource, while the child resources are identified as /resource1, /resource2, /super-resource/sub-resource, /resource/annotated/on/five/levels. This makes it possible to easily represent resources that can be decomposed into smaller parts (e.g. /users the resource representing all the users of a site, while /users/luca represents a single user, Luca).

SOLUTION (by wasp1337): just follow the link ;)


Web 02

Die Anfrage für bestimmte Ressourcen kann parametrisiert werden, um bestimmte Versionen der betreffenden Ressource zu erhalten. Ein Blog könnte zum Beispiel eine einzige Ressource verwenden, um alle veröffentlichten Beiträge (die strukturell alle gleich sind und sich nur im Inhalt unterscheiden) zu repräsentieren, indem der gewünschte spezifische Inhalt über einen numerischen Parameter id identifiziert wird.

Das Ziel dieser Aufgabe ist es, die Ressource http://web-02.challs.olicyber.it/server-records zu erhalten, indem der id-Parameter mit dem Flag-Wert angegeben wird. Wir empfehlen die Verwendung des params-Schlüsselworts der in der vorherigen Aufgabe beschriebenen get-Funktion.

SOLUTION (by wasp1337): hxxp[://]web-02[.]challs[.]olicyber[.]it/server-records?id=flag


Cryptography

Crypto 1 - Encoding

In dieser Challenge-Serie werden wir einige der Grundlagen vorstellen, die zur Lösung kryptografischer Probleme erforderlich sind. Zunächst einmal ist es gut, das Konzept der Kodierung zu verstehen. Eine Kodierung ist ein System von Signalen oder Symbolen, die üblicherweise zur Darstellung von Informationen verwendet werden. Grundsätzlich wird jede Information in einem Computer durch Folgen von 0 und 1 (Bits) dargestellt. Diese sind jedoch recht unhandlich, so dass ihnen in der Regel eine weitere Kodierung überlagert wird, wenn dies sinnvoll ist.

ASCII zum Beispiel ist ein Standardcode, der es ermöglicht, Text (und einige andere Steuerzeichen) durch Sequenzen von 7 Bits (bzw. ganze Zahlen von 0 bis 127) darzustellen.

In Python führt die Funktion chr() die Umwandlung von Zahlen in Zeichen durch (die Funktion ord() macht das Gegenteil); ansonsten können Sie sich mit Online-Tools wie CyberChef behelfen.

Das Flag für diese Aufgabe erhält man, indem man diese Zahlen in die entsprechenden ASCII-Zeichen umwandelt (dekodiert).

[102, 108, 97, 103, 123, 117, 103, 104, 95, 78, 117, 109, 66, 51, 114, 53, 95, 52, 49, 114, 51, 52, 100, 121, 125]

SOLUTION (by wasp1337): In Cyberchef: Leerzeichen und [] entfernen --> From Charcode, Delimiter Comma, Base 10 --> Flag


Crypto 2 - Encoding 2

Konventionell werden Bitsequenzen in Bytes unterteilt, d. h. in benachbarte Teilsequenzen von jeweils 8 Bits.

Die hexadezimale Kodierung (oder Basis 16) ermöglicht eine sehr bequeme Darstellung.

Ein Byte wird in zwei benachbarte Sequenzen von je vier Bits unterteilt: Diese können, binär gelesen, als zwei ganze Zahlen von 0 bis 15 verstanden werden, die dann durch die Zeichen "0", "1", ..., "9", "a", "b", ..., "f" dargestellt werden.

Beispiel: 01101110 → 0110, 1110 → 6, 14 → '6', 'e' → '6e'.

Jedes Byte wird also in eine Folge von zwei Zeichen umgewandelt.

In Python werden Bytesequenzen mit Hilfe der Klasse bytes verarbeitet. Die Methode .hex() wird verwendet, um die entsprechende hexadezimale Zeichenfolge zu erhalten, während die Funktion bytes.fromhex(s) das Bytes-Objekt zurückgibt, das der hexadezimalen Zeichenfolge s entspricht.

Um das Flag zu erhalten, wird die folgende Zeichenkette in die entsprechende Bytefolge umgewandelt.

666c61677b68337834646563696d616c5f63346e5f62335f41424144424142457d

SOLUTION (by wasp1337): In Cyberchef: From HEX, Delimiter none --> Flag


Crypto 3 - Encoding 3

In der Kryptographie hat man es oft mit ganzen Zahlen zu tun. Diese werden in der Regel mit verschiedenen Kodierungen der entsprechenden Bitfolgen übertragen.

In der Regel wird jedoch die Darstellung zur Basis 10 vermieden und aus Gründen der Kompaktheit ein breiteres Alphabet von Zeichen bevorzugt.

Mögliche Alternativen sind die Hexadezimaldarstellung (wie in der vorherigen Herausforderung) oder die Basis 64.

Ein Beispiel für ein Snippet in Python, das eine Zeichenkette zur Basis 64 dekodiert:

#!/usr/bin/env python3 from base64 import b64decode s = 'aGVubG8gOik=' print(b64decode(s))

Um ein Byte-Objekt in ein int-Objekt umzuwandeln, kann in Python die Funktion int.from_bytes(b, endianness) verwendet werden, wobei b unser Byte-Objekt ist und endianness entweder eine "große" oder "kleine" Zeichenkette ist, die die Reihenfolge angibt, in der die Bytes von b gelesen werden sollen: von links nach rechts bzw. umgekehrt.

Um eine ganze Zahl z in Bytes umzuwandeln, kann man stattdessen die Funktion (z).to_bytes(n, endianness) verwenden: n gibt die Anzahl der Bytes an, die für die Umwandlung verwendet werden sollen, und zwar in der durch endianness vorgegebenen Reihenfolge.

Das Flag dieser Aufgabe ist in zwei Hälften unterteilt: Der erste Teil wird aus base64 dekodiert, während der zweite Teil die angegebene Zahl (in base10) in Bytes in Big Endian umwandelt.

ZmxhZ3t3NDF0XzF0c19hbGxfYjE=

664813035583918006462745898431981286737635929725

SOLUTION (by wasp1337): In Cyberchef: 1. Teil from Base 64 oder python idle:

import base64
from base64 import b64decode
print(b64decode('ZmxhZ3t3NDF0XzF0c19hbGxfYjE=='))
  1. Teil: tbd

Crypto 4 - XOR 1

Eine sehr einfache und wirksame Methode, eine Nachricht zu verschleiern, ist die Verwendung von xor mit einem geheimen Schlüssel. Die Definition bezieht sich auf logische Variablen (Wahr/Falsch), aber das Konzept kann schnell und natürlich auf Bit-Strings ausgedehnt werden: Das xor zwischen zwei binären Sequenzen wird so zum Bit-zu-Bit-xor.

Zum Beispiel: 00110000 xor 01100001 → 01010001.

In Python wird das Xor zwischen zwei Ganzzahlen durch den Operator ^ gebildet. Um zwei Zeichenketten zu xorieren, müssen Sie sie zunächst in Bytes umwandeln und dann die Operation byteweise durchführen.

Eine Funktion in Python, die das Xor zwischen zwei Bytes durchführt, kann sein:

def xor(a, b): return bytes([x^y for x,y in zip(a,b)])

Um das Flag für diese Aufgabe zu erhalten, xorieren Sie diese beiden Nachrichten: Achten Sie auf die korrekte Dekodierung von Hexadezimal in Bytes!

m1 = 158bbd7ca876c60530ee0e0bb2de20ef8af95bc60bdf m2 = 73e7dc1bd30ef6576f883e79edaa48dcd58e6aa82aa2

m1 = 15 8b bd 7c a8 76 c6 05 30 ee 0e 0b b2 de 20 ef 8a f9 5b c6 0b df --> bin m2 = 73 e7 dc 1b d3 0e f6 57 6f 88 3e 79 ed aa 48 dc d5 8e 6a a8 2a a2 --> bin --> byteweise m1 XOR m2 --> bin to ASCII --> Flag


crypto 5 - XOR 2

Die Verschlüsselungsmethode, die in der vorherigen Herausforderung verwendet wurde, heißt One Time Pad. Ein wichtiges Detail für perfekte Sicherheit ist, dass der Schlüssel so lang wie die Nachricht ist. Wenn der Schlüssel sehr kurz ist (und sich z. B. wiederholt), kann ein Brute-Force-Angriff möglich sein: Man probiert alle in Frage kommenden Schlüssel aus und schaut, welcher ein vernünftiges Ergebnis liefert. In dieser Aufgabe ist der verwendete Schlüssel nur ein Byte lang. Finden Sie einen Weg, die Nachricht zu entschlüsseln. Bitte beachten Sie: Der Chiffretext beginnt nicht mit dem üblichen Flag{ und endet nicht mit }!

ciphertext = 104e137f425954137f74107f525511457f5468134d7f146c4c

Das Flag ist 'flag{' + Klartext + '}'.

SOLUTION:


  ___  _ _                 _           _ _       _ _    ____      _                                        _ _         
 / _ \| (_)_ __ ___  _ __ (_) __ _  __| (_)   __| (_)  / ___|   _| |__   ___ _ __ ___  ___  ___ _   _ _ __(_) |_ _   _ 
| | | | | | '_ ` _ \| '_ \| |/ _` |/ _` | |  / _` | | | |  | | | | '_ \ / _ \ '__/ __|/ _ \/ __| | | | '__| | __| | | |
| |_| | | | | | | | | |_) | | (_| | (_| | | | (_| | | | |__| |_| | |_) |  __/ |  \__ \  __/ (__| |_| | |  | | |_| |_| |
 \___/|_|_|_| |_| |_| .__/|_|\__,_|\__,_|_|  \__,_|_|  \____\__, |_.__/ \___|_|  |___/\___|\___|\__,_|_|  |_|\__|\__, |
                    |_|                                     |___/                                                |___/ 

Olimpiadi Italiane di Cybersecurity

Misc


Bright_sun - (image)

Auf einer alten Festplatte fand ich ein Foto von einem Strandurlaub vor vielen Jahren. Ich erinnere mich noch an die Tage am Strand unter dem Sonnenschirm, im Badeanzug und mit Sonnenbrille! Ich frage mich, warum unter all den Fotos nur noch dieses eine übrig ist?

SOLUTION (by wasp1337): In Photoshop öffnen und die Helligkeit herabsetzen, bis die Flag erscheint.


Dashed - (Misc)

Heute Morgen habe ich eine E-Mail erhalten, die diese Nachricht enthielt, aber ich kann nicht herausfinden, was sie bedeutet. Können Sie mir helfen, sie zu entziffern?

SOLUTION (by wasp1337): In Cyberchef: from morsecode --> from Hex --> from binary --> from base64 --> flag


Bel Paesaggio (GIF)

Dieses Bild enthält eine geheimnisvolle Botschaft. Kannst du sie finden?

SOLUTION (by wasp1337): GIF mit 8 Frames, capture mit Online GIF-Tools --> Frame 4 --> Flag


Byte-flag (image)

Ich habe die Flagge im Bild verloren, können Sie sie finden?

SOLUTION (by wasp1337): Bild in Cyberchef, ohne Recipy --> Ende der Codeansicht --> Flag


Network Security

Sniff'n'byte (Wireshark)

Oh nein! Es scheint, dass jemand unseren Server mit Spyware infiziert hat und sensible Daten ausspioniert! Schnüffeln Sie herum und finden Sie heraus, welche Informationen die Malware an die böswilligen Parteien sendet!

SOLUTION (by wasp1337): follow tcp-stream --> to hex --> flag


Protocollo datagramma utente (Wireshark)

Können Sie die Flag zwischen all diesen Paketen rekonstruieren?

SOLUTION (by wasp1337): follow udp stream --> stream 1 --> flag


G4tto (Wireshark)

Kannst du die Katze finden?

SOLUTION (by wasp1337): Datei --> Objekt exportieren --> http --> Frame 325 Gatto.jpeg --> flag


easy stream (Wireshark)

Können Sie dem Stream folgen?

SOLUTION (by wasp1337): follow tcp stream --> stream 10 --> flag


Useless (Wireshark)

Ich habe diese Datei von einem sehr wichtigen Server gestohlen, aber ich kann in diesen Paketen nichts Nützliches finden, ihre Sicherheit ist undurchdringlich. Die Pakete sind alle verschlüsselt oder unbrauchbar, besser woanders suchen.

SOLUTION:


Poca Cola (Wireshark)

Ich habe mich drei Tage lang unter einem Tisch im Poca Cola-Hauptquartier versteckt, ich habe ihre gesamte Kommunikation zurückverfolgt! Bitte finde das Geheimrezept, damit ich hier rauskomme...

SOLUTION (by wasp1337): Filter: http.request.method==POST --> Frame 18626 enthält ricetta.txt.zip --> password protected --> john:

.\zip2john.exe .ricetta.txt.zip > ricetta.txt
.\john.exe .\ricetta.txt

--> tbd


Wordwang

Nach dem spektakulären Erfolg von NumberWang gibt es nun eine neue Ausgabe des beliebten Spiels für Menschen zwischen 25 und 25einhalb Jahren: WordWang! Werden Sie WordWang bekommen können?

Sie können sich mit dem Fernservice verbinden mit: ncat wordwang.challs.olicyber.it 10601

SOLUTION (by wasp1337): Follow TCP stream --> Anleitung -->

ncat wordwang.challs.olicyber.it 10601
Welcome to Wordwang! The show where the words are wanged!
hole
[...]
That's wordwang! Here's the flag:

-->flag


Sicurezza (Wireshark)

Bitte helfen Sie uns, den Inhalt der Webseiten aus diesem Traffic Log zu finden. Es gibt eine zusätzliche Datei, die Ihnen helfen kann: ....

SOLUTION:


Web Security

No_Robots_Here - Web (robots.txt)

SOLUTION (by kirkokirk):

-->No robots? -> robots.txt?

http://no-robots.challs.olicyber.it/robots.txt

-->Try to open .html

http://no-robots.challs.olicyber.it//I77p0mhKjr.html


Headache - Web (Get-Header)

Wenn wir eine Webseite laden, kommunizieren wir mit einem Server, aber was antwortet er uns? http://headache.challs.olicyber.it/

SOLUTION (by kirkokirk):

-->Headache -> something in header?-> look at header in inspect modus of Browser-> we find a flag field with flag


Just a reminder- Web (javascript, AES)

Ich habe auf einer unbenannten Website ein Anmeldeformular gefunden, habe aber keine Ahnung, wie die Anmeldeinformationen lauten ... Würden Sie versuchen, sich für mich einzuloggen?
Website: http://just-a-reminder.challs.olicyber.it

SOLUTION (by kirkokirk):
-->Inspector Mode in Firefox and make login attempt
-->Look at default.js code (that is executed at login)
image

-->Evaluate js- code in Interpreter:

AES_decrypt('U2FsdGVkX1/JEKDXgPl2RqtEgj0LMdp8/Q1FQelH7whIP49sq+WvNOeNjjXwmdrl', s3cr37)
"v3ry_l337_p455w0rd_!"

-->Login with user admin and password to get flag

Crypto

Tutte le strade portano a Roma - Crypto (Caesar)

SOLUTION (by kirkokirk):

-->cixd{xsb_zxbpxo_jlofqrof_qb_pxirqxkq} Looks like Shifted /Rotated letters

-->Cixd -> flag?...would be rotated +3 ?

-->Try Rot brute force 1…26:

-->eg. Try with cyberchef: https://gchq.github.io/CyberChef/#recipe=ROT13(true,true,false,3/disabled)ROT13_Brute_Force(true,true,false,100,0,true,'')&input=Y2l4ZHt4c2JfenhicHhvX2psb2Zxcm9mX3FiX3B4aXJxeGtxfQ


Crypting on structure - Crypto (Bacon)

Entschlüsseln Sie mich!
AAAABAAAAAAAABAABBBAABBABABAAABAABAABAABAABBBAABBAAAAABAABAABAABBBBAAA
Die Flagge hat nicht das Standardformat, also entschlüsseln Sie die Nachricht und fügen Sie sie anstelle von Punkten ein: flag{...}
HINT: Bacon tastes good ....

SOLUTION (by kirkokirk):

->Bacon (Speck)-> Bacon Decode?:
https://de.wikipedia.org/wiki/Bacon-Chiffre

->With Cyberchef:
https://gchq.github.io/CyberChef/#recipe=Bacon_Cipher_Decode('Complete','A/B',false)&input=QUFBQUJBQUFBQUFBQUJBQUJCQkFBQkJBQkFCQUFBQkFBQkFCQUFCQUFCQkJBQkFBQkJBQUFBQUJBQUJBQkFBQkJCQkFBQSA


Software Security

Hidden Variable - Software Security (Binaries)

SOLUTION (by kirkokirk):

->Look for filetype

└─$ file hidden_variable

hidden_variable: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=a49b8440fef01532ca63db6ed6a7ab59a704e8f6, for GNU/Linux 3.2.0, not stripped

-->Binary x86-64

-->Execute binary

└─$ ./hidden_variable

La tua flag è f_ag{.ł€“ß#[ Accidenti, sembra corrotta! Dove avrò lasciato l'originale?

->Search hexdump

└─$ xxd hidden_variables 
................
00002f40: 0100 0000 0000 0000 f0ff ff6f 0000 0000  ...........o....
00002f50: f204 0000 0000 0000 f9ff ff6f 0000 0000  ...........o....
00002f60: 0300 0000 0000 0000 0000 0000 0000 0000  ................
00002f70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00002f80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
................
00003020: 6600 0000 6c00 0000 6100 0000 6700 0000  f...l...a...g...
00003030: 7b00 0000 7500 0000 6e00 0000 7500 0000  ?...?...?...?...
00003040: 3500 0000 3300 0000 6400 0000 5f00 0000  ?...?...?...?...
................

Clone this wiki locally