Kategori
Rev
Beskrivning
En grupp av AI-vurmande femtekolonnare, ledda av den lömske Alex Antagonist, har brutit sig in hos Harald i ett försök att stödja Kenneths onda planer. De verkar bland annat ha gett sig på Haralds laptop, troligen för att hindra honom från att kunna hjälpa Harriet. När han försöker använda den kraschar den och visar en bekant blå skärm.
Harald känner paniken komma krypande. Med darrande tassar sparar han ned krashdumpen… Kan du hjälpa honom att utreda vad som hänt?
Lösning
Bifogat till utmaningen är en Windows krash-dump som vi kan öppna i WinDbg.

Analyserar vi dumpen med !analyze -v får vi följande information:
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
FLOPPY_INTERNAL_ERROR (37)
Arguments:
Arg1: fffff807618c19e0
Arg2: fffff807618c19d0
Arg3: fffff807618c19c0
Arg4: fffff807618c19b0
Debugging Details:
------------------
KEY_VALUES_STRING: 1
Key : Analysis.CPU.mSec
Value: 1203
Key : Analysis.Elapsed.mSec
Value: 1945
Key : Analysis.IO.Other.Mb
Value: 0
Key : Analysis.IO.Read.Mb
Value: 1
Key : Analysis.IO.Write.Mb
Value: 0
Key : Analysis.Init.CPU.mSec
Value: 562
Key : Analysis.Init.Elapsed.mSec
Value: 305892
Key : Analysis.Memory.CommitPeak.Mb
Value: 93
Key : Analysis.Version.DbgEng
Value: 10.0.27793.1000
Key : Analysis.Version.Description
Value: 10.2410.02.02 amd64fre
Key : Analysis.Version.Ext
Value: 1.2410.2.2
Key : Bugcheck.Code.LegacyAPI
Value: 0x37
Key : Bugcheck.Code.TargetModel
Value: 0x37
Key : Dump.Attributes.AsUlong
Value: 0x8
Key : Dump.Attributes.KernelGeneratedTriageDump
Value: 1
Key : Failure.Bucket
Value: 0x37_Driver1!unknown_function
Key : Failure.Hash
Value: {7a98b63a-97b6-10d3-a890-4afde44f4243}
BUGCHECK_CODE: 37
BUGCHECK_P1: fffff807618c19e0
BUGCHECK_P2: fffff807618c19d0
BUGCHECK_P3: fffff807618c19c0
BUGCHECK_P4: fffff807618c19b0
FILE_IN_CAB: 020425-2234-01.dmp
VIRTUAL_MACHINE: VirtualBox
DUMP_FILE_ATTRIBUTES: 0x8
Kernel Generated Triage Dump
FAULTING_THREAD: ffff858d5f04d040
BLACKBOXBSD: 1 (!blackboxbsd)
BLACKBOXNTFS: 1 (!blackboxntfs)
BLACKBOXWINLOGON: 1
CUSTOMER_CRASH_COUNT: 1
PROCESS_NAME: System
STACK_TEXT:
fffff008`a395b7e8 fffff807`618c10e6 : 00000000`00000037 fffff807`618c19e0 fffff807`618c19d0 fffff807`618c19c0 : nt!KeBugCheckEx
fffff008`a395b7f0 00000000`00000037 : fffff807`618c19e0 fffff807`618c19d0 fffff807`618c19c0 fffff807`618c19b0 : Driver1+0x10e6
fffff008`a395b7f8 fffff807`618c19e0 : fffff807`618c19d0 fffff807`618c19c0 fffff807`618c19b0 fffff807`40c4d535 : 0x37
fffff008`a395b800 fffff807`618c19d0 : fffff807`618c19c0 fffff807`618c19b0 fffff807`40c4d535 d6f58b6e`bbba9c95 : Driver1+0x19e0
fffff008`a395b808 fffff807`618c19c0 : fffff807`618c19b0 fffff807`40c4d535 d6f58b6e`bbba9c95 835f6552`2c983590 : Driver1+0x19d0
fffff008`a395b810 fffff807`618c19b0 : fffff807`40c4d535 d6f58b6e`bbba9c95 835f6552`2c983590 c92dc639`be1b02c4 : Driver1+0x19c0
fffff008`a395b818 fffff807`40c4d535 : d6f58b6e`bbba9c95 835f6552`2c983590 c92dc639`be1b02c4 ffffff4d`614c9c92 : Driver1+0x19b0
fffff008`a395b820 fffff807`618c131b : 00000000`00000000 00000000`00000000 ffff858d`64cef000 ffff858d`646a5de0 : WDFLDR!WdfVersionBind+0xd5 [minkernel\wdf\framework\kmdf\src\dynamic\loader\wdfldr.cpp @ 1954]
fffff008`a395b890 00000000`00000000 : 00000000`00000000 ffff858d`64cef000 ffff858d`646a5de0 fffff008`a395ba60 : Driver1+0x131b
SYMBOL_NAME: Driver1+10e6
MODULE_NAME: Driver1
IMAGE_NAME: Driver1.sys
STACK_COMMAND: .process /r /p 0xffff858d5ec63040; .thread 0xffff858d5f04d040 ; kb
BUCKET_ID_FUNC_OFFSET: 10e6
FAILURE_BUCKET_ID: 0x37_Driver1!unknown_function
OSPLATFORM_TYPE: x64
OSNAME: Windows 10
FAILURE_ID_HASH: {7a98b63a-97b6-10d3-a890-4afde44f4243}
Followup: MachineOwner
---------
Här ser vi att Driver1 som kraschat när en funktion fått en felaktig returadress (0x37).
Börjar vi med att kolla den första stack-framen och kollar disassemblyn så kan vi få ut adressen till funktionen som kraschat.

Tittar vi på funktionen på adressen fffff807618c1000 så ser vi följande:
fffff807`618c1000 4055 push rbp
fffff807`618c1002 488d6c24a9 lea rbp, [rsp-57h]
fffff807`618c1007 4881ec90000000 sub rsp, 90h
fffff807`618c100e 33c0 xor eax, eax
fffff807`618c1010 c745f7959cbabb mov dword ptr [rbp-9], 0BBBA9C95h
fffff807`618c1017 0f57c0 xorps xmm0, xmm0
fffff807`618c101a c745fb6e8bf5d6 mov dword ptr [rbp-5], 0D6F58B6Eh
fffff807`618c1021 33d2 xor edx, edx
fffff807`618c1023 c745ff9035982c mov dword ptr [rbp-1], 2C983590h
fffff807`618c102a c7450352655f83 mov dword ptr [rbp+3], 835F6552h
fffff807`618c1031 448bca mov r9d, edx
fffff807`618c1034 448d401d lea r8d, [rax+1Dh]
fffff807`618c1038 c74507c4021bbe mov dword ptr [rbp+7], 0BE1B02C4h
fffff807`618c103f c7450b39c62dc9 mov dword ptr [rbp+0Bh], 0C92DC639h
fffff807`618c1046 c7450f929c4c61 mov dword ptr [rbp+0Fh], 614C9C92h
fffff807`618c104d c645134d mov byte ptr [rbp+13h], 4Dh
fffff807`618c1051 c74517e0f2dece mov dword ptr [rbp+17h], 0CEDEF2E0h
fffff807`618c1058 c7451b1af082e6 mov dword ptr [rbp+1Bh], 0E682F01Ah
fffff807`618c105f c7451fe76aa973 mov dword ptr [rbp+1Fh], 73A96AE7h
fffff807`618c1066 c745233e5529b0 mov dword ptr [rbp+23h], 0B029553Eh
fffff807`618c106d c745279b6077cb mov dword ptr [rbp+27h], 0CB77609Bh
fffff807`618c1074 c7452b0af34ebb mov dword ptr [rbp+2Bh], 0BB4EF30Ah
fffff807`618c107b c7452fa1af2254 mov dword ptr [rbp+2Fh], 5422AFA1h
fffff807`618c1082 c6453330 mov byte ptr [rbp+33h], 30h
fffff807`618c1086 0f114537 movups xmmword ptr [rbp+37h], xmm0
fffff807`618c108a 48894547 mov qword ptr [rbp+47h], rax
fffff807`618c108e 89454f mov dword ptr [rbp+4Fh], eax
fffff807`618c1091 884553 mov byte ptr [rbp+53h], al
fffff807`618c1094 428a4c0d17 mov cl, byte ptr [rbp+r9+17h]
fffff807`618c1099 42324c0df7 xor cl, byte ptr [rbp+r9-9]
fffff807`618c109e 49ffc1 inc r9
fffff807`618c10a1 4863c2 movsxd rax, edx
fffff807`618c10a4 ffc2 inc edx
fffff807`618c10a6 884c0537 mov byte ptr [rbp+rax+37h], cl
fffff807`618c10aa 413bd0 cmp edx, r8d
fffff807`618c10ad 72e5 jb FFFFF807618C1094
fffff807`618c10af 33d2 xor edx, edx
fffff807`618c10b1 488d4d37 lea rcx, [rbp+37h]
fffff807`618c10b5 e806070000 call FFFFF807618C17C0
fffff807`618c10ba 488d05ef080000 lea rax, [0FFFFF807618C19B0h]
Vi ser att funktionen skapar en hel del variabler och sedan itererar över en sträng och utför någon form av XOR-operation.
Vi kan använda värdena och operationerna för att återskapa strängen och se vad det är för data.
#!/usr/bin/env python3
import struct
data1 = [0xBBBA9C95, 0xD6F58B6E, 0x2C983590, 0x835F6552,
0xBE1B02C4, 0xC92DC639, 0x614C9C92, 0x4D]
data2 = [0xCEDEF2E0, 0xE682F01A, 0x73A96AE7, 0xB029553E,
0xCB77609B, 0xBB4EF30A, 0x5422AFA1, 0x30]
for i in range(8):
data1[i] ^= data2[i]
flag = struct.pack("<8I", *data1)
print(flag)
Kör vi skriptet får vi ut flaggan undut{w0w_1_l0v3_blu35cr33n5}.