Voici mon writeup du premier challenge d’un CTF privé. (Challenge par Mizu)

Énoncé: Searching for some rupees, Link found a website that is hiding a treasure. Find a way to open it!

Première approche

Tout d’abord, on a une page de brief.

first_look

On doit trouver les 6 parties du flag qui sont cachées dans le site.

Première partie

Ils sont cachés donc premier reflexe, allez checker le code source, CTRL + U est notre ami :)

<!DOCTYPE html>
<html lang="en">
<head>
    <title>My first treasure</title>
    <meta charset="UTF-8">

    <!--- favicon -->
    <link rel="icon" type="image/png" href="/static/images/favicon.png"/>

    <!--- css -->
    <link rel="stylesheet" property="stylesheet" type="text/css" href="/static/css/style.css" media="all">
</head>
<body>
    <h1>My first treasure</h1>
<p><a href="/">Home</a> | <a href="/admin">Admin</a></p>
<div class="line"></div>
    <div class="mgb-2"><i onclick="alert('tin tin tin tiiiiiin')"><img id="alert" src="/static/images/treasure.png" width="140"/></i><div>
    <p class="mgt-2 mgb-1"> Welcome Adventurer! </p>
    <p> I have created this website as a little introduction to test your analysis capacity. </p>
    <p class="mgb-1"> I have hidden a 6 part of the flag in this website where each part can be everywhere! </p>
    <p> Good luck! </p>
    <p style="color: #96CEB4"> Like here for exemple - Flag part 1: R2Lille{ </p>
    <script src="/static/js/main.js"></script>
</body>
</html>

On peut voir la première partie: R2Lille{, trop rapide :p

On va faire une analyse plus poussée du code source et regarder tous les liens (images, css, js…)

Deuxième partie

Maintenant, on va checker les sources CSS:

.flag { color: red; }
.part2 { color: red; }
.Ch3Ak1 { color: red; }

J’ai laissé seulement la partie avec la deuxième partie du flag !

Notre flag: R2Lille{Ch3Ak1

Troisième partie

Allons regarder le code javascript du site:

// Init
texts = ["An enemy approch!", "You found a chest!", "Wait this is realy a flag?!", "Nice sword man!", "Hé ho hé", "Tutuluuu!", "You found a cool shield!", "10 rupees for the beer!"]

function getRandomInt(max) {
	return Math.floor(Math.random() * max);
}

// Write console msg 
var write = () => {
	x = getRandomInt(texts.length)
    console.log(texts[x])
};

// Infinity run
setInterval(write, 10000);

// Part 3: NG_HTML
// Robots seems to have steal admin credentials, please help me to find them back

Yes ! On a notre troisième partie ! On peut l’ajouter à notre flag incomplet: R2Lille{Ch3Ak1NG_HTML

Quatrième partie

Hum dans le javascript on nous dit que des robots ont volés les identifiants admin… Mais pourquoi des robots ? Hummmmm, /robots.txt !

User-agent: Admin credentials
Allow username: part4
Allow password: _C4n_B3_

Yeah on est bon, maintenant voici notre quatrième partie ! (Toujours checker /robots.txt :p)

Flag: R2Lille{Ch3Ak1NG_HTML_C4n_B3_

Cinquième partie

Maintenant qu’on a les identifiants de l’admin, allons nous connecter au panel admin sur /admin.

admin_connected

On est très proche de flag !

Flag: R2Lille{Ch3Ak1NG_HTML_C4n_B3_r3Aly_1mp0rT

Sixième partie

On peut voir un petit message de la part de l’administrateur, il dit que fav icon, son ami a la dernière partie du flag.. Fav icon ?

Je vous avais dit de check tous les liens du code source 😠

Allons voir /static/images/favicon.png

favicon

Conclusion

On finalement toutes les parties du flag !

Flag final: R2Lille{Ch3Ak1NG_HTML_C4n_B3_r3Aly_1mp0rT3nT3}

Un super challenge d’analyse :p