Outils d'utilisateurs

Outils du Site


hackingweek_2014:web:web2

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;
}
?>
hackingweek_2014/web/web2.1394103659.txt.gz · Dernière modification: 2017/04/09 15:33 (modification externe)