TryHackMe Blueprint – Cybersecurity-Write-up

Ich habe mich entschieden, etwas mehr Penetration Testing/Ethical Hacking auszuprobieren. Das Folgende ist ein Write-Up zum TryHackMe-Room “Blueprint”. Aufgaben Die einzige Information, die wir gehabt haben, ist: Habt ihr das Zeug dazu, in diese Windows-Maschine einzudringen? Und die Fragen: NTLM-Hash des “Lab”-Users entschlüsselt root.txt Also können wir davon ausgehen, dass es eine Windows-Maschine ist. Discovery Ich habe meine Kali-Linux-Maschine gestartet und auf meinem Desktop einen Ordner als Workspace angelegt. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 # create a workspace mkdir Desktop/blueprint && cd Desktop/blueprint # portscan with nmap nmap -v -A -oN nmap-scan.txt 10.10.251.173 # nmap result PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 7.5 |_http-title: 404 - File or directory not found. |_http-server-header: Microsoft-IIS/7.5 | http-methods: | Supported Methods: OPTIONS TRACE GET HEAD POST |_ Potentially risky methods: TRACE 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows netbios-ssn 443/tcp open ssl/http Apache httpd 2.4.23 (OpenSSL/1.0.2h PHP/5.6.28) | http-ls: Volume / | SIZE TIME FILENAME | - 2019-04-11 22:52 oscommerce-2.3.4/ | - 2019-04-11 22:52 oscommerce-2.3.4/catalog/ | - 2019-04-11 22:52 oscommerce-2.3.4/docs/ |_ | http-methods: | Supported Methods: OPTIONS GET HEAD POST TRACE |_ Potentially risky methods: TRACE |_ssl-date: TLS randomness does not represent time |_http-server-header: Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/5.6.28 | ssl-cert: Subject: commonName=localhost | Issuer: commonName=localhost | Public Key type: rsa | Public Key bits: 1024 | Signature Algorithm: sha1WithRSAEncryption | Not valid before: 2009-11-10T23:48:47 | Not valid after: 2019-11-08T23:48:47 | MD5: a0a4:4cc9:9e84:b26f:9e63:9f9e:d229:dee0 |_SHA-1: b023:8c54:7a90:5bfa:119c:4e8b:acca:eacf:3649:1ff6 |_http-title: Index of / | tls-alpn: |_ http/1.1 445/tcp open microsoft-ds Windows 7 Home Basic 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP) 3306/tcp open mysql MariaDB (unauthorized) 8080/tcp open http Apache httpd 2.4.23 (OpenSSL/1.0.2h PHP/5.6.28) |_http-server-header: Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/5.6.28 | http-methods: | Supported Methods: OPTIONS GET HEAD POST TRACE |_ Potentially risky methods: TRACE |_http-title: Index of / | http-ls: Volume / | SIZE TIME FILENAME | - 2019-04-11 22:52 oscommerce-2.3.4/ | - 2019-04-11 22:52 oscommerce-2.3.4/catalog/ | - 2019-04-11 22:52 oscommerce-2.3.4/docs/ |_ 49152/tcp open msrpc Microsoft Windows RPC 49153/tcp open msrpc Microsoft Windows RPC 49154/tcp open msrpc Microsoft Windows RPC 49158/tcp open msrpc Microsoft Windows RPC 49159/tcp open msrpc Microsoft Windows RPC 49160/tcp open msrpc Microsoft Windows RPC Service Info: Hosts: www.example.com, BLUEPRINT, localhost; OS: Windows; CPE: cpe:/o:microsoft:windows Host script results: |_clock-skew: mean: -20m03s, deviation: 34m37s, median: -4s | smb-os-discovery: | OS: Windows 7 Home Basic 7601 Service Pack 1 (Windows 7 Home Basic 6.1) | OS CPE: cpe:/o:microsoft:windows_7::sp1 | Computer name: BLUEPRINT | NetBIOS computer name: BLUEPRINT\x00 | Workgroup: WORKGROUP\x00 |_ System time: 2024-08-16T18:05:38+01:00 | smb2-security-mode: | 2:1:0: |_ Message signing enabled but not required | smb2-time: | date: 2024-08-16T17:05:39 |_ start_date: 2024-08-16T17:02:15 | smb-security-mode: | account_used: guest | authentication_level: user | challenge_response: supported |_ message_signing: disabled (dangerous, but default) | nbstat: NetBIOS name: BLUEPRINT, NetBIOS user: <unknown>, NetBIOS MAC: 02:a6:9b:93:fd:95 (unknown) | Names: | BLUEPRINT<00> Flags: <unique><active> | WORKGROUP<00> Flags: <group><active> | BLUEPRINT<20> Flags: <unique><active> | WORKGROUP<1e> Flags: <group><active> | WORKGROUP<1d> Flags: <unique><active> |_ \x01\x02__MSBROWSE__\x02<01> Flags: <group><active> Also haben wir Folgendes beobachten können: ...

2024-09-24 · 6 Minuten · Andreas Dieckmann

WMI in PowerShell verwenden

WMI ist eine mächtige Schnittstelle um Windows Systeme zu verwalten. Dadurch ist der Zugriff auf Dinge möglich, für die es vielleicht sonst gar keine eigenen PowerShell Cmdlets gibt. Teilweise können wir so mehr Infos abrufen, als die Standard-Cmdlets liefern. Das geht sowohl lokal, als auch remote. Deprecated: Die alten WMI Cmdlets Es gibt ein paar ältere Cmdlets, die allerdings für Neuentwicklungen nicht empfohlen werden. Aber vielleicht stoßt ihr in älteren Skripten mal darüber, also jetzt habt ihr schon mal davon gehört - die existieren zumindest. ...

2024-09-20 · 12 Minuten · Andreas Dieckmann

Das Problem mit Array += in PowerShell

Die PowerShell macht es leider recht einfach ineffizienten Code zu schreiben. Viele Leute benutzen zum Beispiel die += Schreibweise um ein Array zu befüllen. Nicht empfehlenswert! 1 2 3 4 5 # So bitte nicht machen! $Array = @() for ($i = 0; $i -lt 10000; $i++) { $Array += $i } Mit Measure-Command können wir messen, wie lange die Ausführung eines Skriptblocks dauert. Bei mir hat die Ausführung des obigen Codes in einer Test-VM über 2 Sekunden benötigt. ...

2024-09-12 · 3 Minuten · Andreas Dieckmann

PowerShell NTFS Alternate Data Streams

Das Dateisystem NTFS wird standardmäßig unter Windows verwendet. Und normalerweise hat eine Datei nur einen dazugehörigen normalen Datenstrom (Data Stream) mit dem Namen :$DATA. Aber es gibt auch die sogenannten “Alternate Data Streams” (ADS), die zusätzliche Daten enthalten können. Diese ADS werden teilweise vom System verwendet, könnten aber auch von Angreifern verwendet werden, um Daten zu verstecken. Ich habe zu dem Thema auch ein YouTube Video erstellt. NTFS Alternate Data Stream auslesen Aus dem Internet heruntergeladene Dateien erhalten bei vielen Browsern unter Windows ein “Mark of the web” (MOTW) im Zone.Identifier Stream. Dieser Stream enthält Infos zur Quelle der Datei - also z.B. dass sie aus dem Internet heruntergeladen wurde. Um den Inhalt eines ADS auszulesen, kann einfach Get-Content mit dem Parameter -Stream und der Angabe des Streamnamens verwendet werden. Alternativ kann an den Dateinamen :<Name des Streams> angehängt werden. ...

2024-08-30 · 3 Minuten · Andreas Dieckmann

PowerShell Calculated Properties

Wenn ihr per PowerShell Daten exportiert (zum Beispiel in eine CSV-Datei per Export-CSV), dann werden die originalen Eigenschaftsnamen von den PowerShell Objekten verwendet. Wenn die aber nicht ganz passend für euren Zweck sind, dann könnt ihr sie auch anpassen. Dafür können sogenannte “Calculcated Properties” und das Cmdlet Select-Object verwendet werden. Damit können zum Beispiel: Eigenschaften umbenannt werden Eigenschaftswerte formatiert werden Komplett eigene Eigenschaften erzeugt werden (z.B. durch den Aufruf zusätzlicher Cmdlets) Ich habe zu diesem Thema auch ein Video auf meinem YouTube Kanal veröffentlicht. ...

2024-08-21 · 7 Minuten · Andreas Dieckmann

PowerShell: Active Directory Computer filtern

Ich habe vor Kurzem an einem Kundenprojekt gearbeitet, bei dem ich rund um Active Directory Computer einiges machen musste. Ich habe PowerShell und etwas leichtes Filtern und Verarbeiten verwendet. Diese Beispiele teile ich jetzt hier und hoffentlich findet sie jemand interessant oder hilfreich. Vielleicht werde ich sie auch zukünftig interessant finden - in dem Fall: Moin Andi! 👋 Beispiel 1: Computer nach Betriebssystemversion filtern Das AD-Attribut OperatingSystemVersion enthält die OS-Version inklusive Buildnummer in einem Format wie diesem: 10.0 (19041) ...

2024-08-07 · 2 Minuten · Andreas Dieckmann

PowerShell Write-Host VS. Write-Output

In PowerShell könnt ihr ja Text mit dem Cmdlet Write-Host ausgeben. Aber es wird teilweise davon abgeraten das zu verwenden. Es gibt zum Beispiel die Alternative Write-Output. In diesem Post erkläre ich euch die Unterschiede. 🎬 Ich habe übrigens auch ein Video zu dem Thema erstellt. Write-Host Write-Host gibt Daten auf dem PowerShell Host aus, dem Programm, welches die aktuelle PowerShell Sitzung hostet. Oft ist das der ConsoleHost, aber z.B. die PowerShell ISE oder Visual Studio Code verwenden eigene Hosts, die sich in manchen Aspekten voneinander unterscheiden. ...

2024-07-05 · 4 Minuten · Andreas Dieckmann

Per PowerShell .zip-Archive erstellen und entpacken

Windows kann eigentlich schon ziemlich lange mit ZIP-Archiven umgehen. Und auch die PowerShell kann das, also sowohl ZIP-Dateien erstellen, als auch sie entpacken. Das kann nützlich sein, wenn ihr z.B. mit einem PowerShell Skript mehrere Dateien zu einer ZIP-Datei zusammenfassen wollt - das erleichtert das wegkopieren. Oder vielleicht um eine per Skript aus dem Internet geladene ZIP-Datei zu extrahieren. 🎬 Ich habe übrigens auch ein Video zu dem Thema erstellt. ...

2024-06-08 · 3 Minuten · Andreas Dieckmann

PowerShell Befehle auf mehrere Zeilen aufteilen

PowerShell Befehle mit vielen Parametern können die Lesbarkeit vom Code verschlechtern. Zum Beispiel habe ich im nachfolgenden Codeabschnitt in Zeile 5 das Cmdlet New-ADUser verwendet und dabei 7 Parameter angegeben. Das ist sehr schwer auf einer Zeile zu lesen, selbst wenn ihr einen Ultra-Wide Monitor verwendet. 1 2 3 4 5 6 $CSVFile = Import-Csv .\NeueUser.csv foreach($User in $CSVFile) { $Manager = Get-ADUser -Filter "mail -eq '$($User.Manager)'" New-ADUser -Name "$($User.Vorname) $($User.Nachname)" -Surname $User.Nachname -GivenName $User.Vorname -UserPrincipalName "$($User.Vorname).$($User.Nachname)@demotenant.de" -Department $User.Abteilung -Company "Demotenant" -Path "OU=User,OU=Demotenant,DC=lan,DC=demotenant,DC=de" } Es würde die Lesbarkeit erhöhen, wenn wir den Befehl auf mehrere Zeilen aufteilen können. Deshalb zeige ich euch in diesem Artikel zwei Möglichkeiten um eure PowerShell Befehle auf mehrere Zeilen aufzuteilen. ...

2024-05-15 · 6 Minuten · Andreas Dieckmann

NULL in PowerShell

Wenn ihr in PowerShell prüfen wollt, ob ein Wert nicht gesetzt ist, dann könnt ihr einen Vergleich mit $null machen. Diese automatische Variable bedeutet immer null, nichts, kein Wert. Das ist aber etwas anderes, als wenn ihr einfach Anführungszeichen "" nehmt und dann nichts reinschreibt. Zum Beispiel ergibt das hier immer FALSE: 1 2 3 4 5 $null -eq "" # = false $null -eq '' # = false # Hat übrigens nichts mit der Zahl 0 zu tun // also das ergibt auch False $null -eq 0 # = false 🎬 Ich habe übrigens auch ein Video zu dem Thema erstellt. ...

2024-04-29 · 7 Minuten · Andreas Dieckmann