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.
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
.
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
Conclusion
On finalement toutes les parties du flag !
Flag final: R2Lille{Ch3Ak1NG_HTML_C4n_B3_r3Aly_1mp0rT3nT3}
Un super challenge d’analyse :p