Pajat Fönster

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.

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.

Disassembly

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}.

n00bz

Home of the n00bz CTF team.


By n00bz, 2025-03-31