2 perc
Colossalbreach
Forrás
A feladathoz egy zip fájl van megadva, benne egy brainstorm.ko
és egy logs
fájl. A ko fájl egy ELF bináris, amit kernelmodulként lehet használni.
Cél
Itt kivételesen nem egy flaget kell megszerezni, hanem az alábbi kérdésekre kell választ adni:
- Who is the module’s author?
- What is the name of the function used to register keyboard events?
- What is the name of the function that converts keycodes to strings?
- What file does the module create to store logs? Provide the full path.
- What message does the module print when imported?
- What is the XOR key used to obfuscate the keys? (e.g. 0x01, 0x32)
- What is the password entered for ‘adam’?
Megoldás
1. kérdés
A modinfo
paranccsal lehet metaadatokat lekérdezni egy kernelmodulról, többek között a szerző nevét is:
modinfo brainstorm.ko
...
Author: 0xEr3n
...
2. kérdés
Innentől a program méretéből és egyszerűségéből adódóan akár a webes Decompiler Explorert is lehet használni.
Név alapján beazonosítható:
register_keyboard_notifier
3. kérdés
Ez talán még egyértelműbb:
keycode_to_string
4. kérdés
A spy_init
függvényből kiolvasható, hogy létrehoz előbb egy spyyy
könyvtárat a DebugFS-ben. Nemsokkal később egy keys
fájlt hoz létre itt. A DebugFS egy operatív tárban létező fájlrendszer, ami kernel módban futó folyamatok debug logjainak a tárolására szolgál, de felhasználói módból is elérhető. Ez általában a /sys/kernel/debug
helyre van csatolva.
Tehát a teljes elérési út:
/sys/kernel/debug/spyyy/keys
5. kérdés
Akár ki lehet keresgetni a binárisból, de egyszerűbb betölteni egy VM-be:
sudo modprobe brainstorm.ko
w00tw00t
6. kérdés
A keycode_to_string
függvényben van egy ciklus, ami minden karaktert XOR-oz 0x19
-el.
7. kérdés
Az XOR művelet egy úgynevezett involúciós eljárás, azaz a mégegyszeri alkalmazása az identitást adja vissza: \((x ⨁ a) ⨁ a = x\). A logs
fájl feltehetően ennek a kernelmodulnak egy logja. XOR-ozzuk a fájl minden bájtját 0x19
-el, és a log végén találunk egy jelszót:
supers3cur3passw0rd