Ceci est une ancienne révision du document !
Moteur de recherche Taagle
code index.php
<?php session_start(); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="../style.css" /> <title>Web 2</title> </head> <body> <div id="background"> <h1>Web 2</h1> <form method="get" action="search.php"> <img src="../pictures/taagle.png" alt="Taagle" id="taagle"/><br /> <span id="future">The future's most advanced search engine</span> <input type="text" name="query" id="query" /><br/> <input type="submit" value="SEARCH" id="querysearch" /> </form> <p class="info"> Ce challenge mettra à l'épreuve les compétences Web de l'attaquant en lui proposant de découvrir et d'exploiter une faille Web. A l'issue de ce défi, l'attaquant obtiendra une connaissance plus importante des différentes fonctions de filtrage sur les chaînes de caractères et des expressions régulières simples. </p> <p class="info"> Le propriétaire souhaite mettre en place une nouvelle solution de moteur de recherche sur Internet, se basant sur un algorithme novateur et secret dont il est l'auteur. Malheureusement, le fait de rechercher le nom du site Web entraîne une récursivité infinie qui menace de provoquer un cataclysme intersidéral. L'administrateur a mis en place diverses protections afin de se prémunir définitivement de ce problème. La mission de l'attaquant est ici d'anéantir la planète Terre. </p> <p class="info"> Vous trouverez les fichiers nécessaires à la résolution de ce challenge <a href="web2.zip">ici.<a/> </p> </div> </body> </html>
code search.php
<?php require_once "../secret.php"; session_start(); if ((!isset($_GET['query'])) or ($_GET['query'] == "")) { header('Location: index.php'); die; } // Filter the query $query = htmlspecialchars($_GET['query'], ENT_QUOTES, 'ISO-8859-1'); $query = strtolower($query); $query = truncate_query($query); $query = forbidden_query($query); $query = filter_query($query); if ($query != null) $_SESSION['web2'] = $query; else die("Oops! This page appears broken - Access error."); $results = search_query($query); if ($results == null) die("Oops! This page appears broken - Access error."); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="../style.css" /> <title>Web 2</title> </head> <body> <div id="background"> <form method="get" action="search.php"> <img src="../pictures/taagle.png" alt="Taagle" id="taagle"/><br /> <span id="future">The future's most advanced search engine</span> <input type="text" name="query" id="query" /><br/> <input type="submit" value="SEARCH" id="querysearch" /> </form> <hr /> <dl id="result"> <?php foreach($results as $ext=>$result) { ?> <dt><a href="<?php echo $result . $ext;?>" alt="<?php echo $result; ?>"><?php echo $result.$ext; ?></a></dt> <dd> Bienvenue sur <?php echo $result . $ext; ?> ! <br /> <span><?php echo $result . $ext; ?></span> </dd> <?php } ?> <p>Recherche effectuée en 3.1415ns</p> </dl> </div> </body> </html> <?php // A request should never exceed 50 characters function truncate_query($query) { if (strlen($query) > 50) { return substr($query, 0, 50); } return $query; } // Forbidden queries function forbidden_query($query) { static $forbidden_words = array("taagle", // Avoid a global cataclysm "google", "yahoo", "bing"); // No advertisement for other companies foreach($forbidden_words as $fw) { if (stristr($query, $fw) !== false) { return obfuscate_query($query); } } return $query; } // Obfuscate queries so user cannot advertise for other companies on webpages function obfuscate_query($query) { global $obf_seq; for($i = 0; $i < strlen($query); $i++) { $query[$i] = chr(ord($query[$i]) ^ $obf_seq[$i % count($obf_seq)]); } $query = str_rot13($query); return $query; } // Filter out the query function filter_query($query) { $query = str_replace(array("\r", "\n", "\t", "\\"), "\n", $query); list($query,) = explode("\n", $query, 2); $query = trim($query); if (preg_match("/[a-zA-Z0-9]+/", $query) === false) return null; return $query; } function search_query($query) { if ($query == "taagle") { ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="../style.css" /> <title>Web 2</title> </head> <body id="cataclysm"> <a href="success.php">Vous avez provoqué un cataclysme intersidéral. Cliquez ici pour assister à la destruction de l'univers.</a> </body> </html> <?php return null; } static $exts = array(".com", ".net", ".org", ".php"); $results = array(); foreach($exts as $ext) { $results[$ext] = $query; } return $results; } ?>