From 8395be45bf7065efd270141504a2dd54382753ca Mon Sep 17 00:00:00 2001
From: Simon Leblanc <contact@leblanc-simon.eu>
Date: Sun, 15 May 2011 01:49:29 +0200
Subject: [PATCH] SQL injection allow to connect in admin with only public key

---
 adminstuds.php | 32 +++++++++++++++++++++++---------
 1 file changed, 23 insertions(+), 9 deletions(-)

diff --git a/adminstuds.php b/adminstuds.php
index 924fd6c7..481968eb 100644
--- a/adminstuds.php
+++ b/adminstuds.php
@@ -46,17 +46,31 @@ if (file_exists('bandeaux_local.php'))
 else
 	include_once('bandeaux.php');
 
-// recuperation du numero de sondage admin (24 car.) dans l'URL
-$numsondageadmin=$_GET["sondage"];
-//on découpe le résultat pour avoir le numéro de sondage (16 car.)
-$numsondage=substr($numsondageadmin, 0, 16);
-
-if (preg_match(";[\w\d]{16};i",$numsondage)){
+// Initialisation des variables
+$numsondageadmin = false;
+$sondage = false;
 
-	$sondage=$connect->Execute("SELECT * FROM sondage WHERE id_sondage_admin = '$numsondageadmin'");
-	$sujets=$connect->Execute("SELECT * FROM sujet_studs WHERE id_sondage='$numsondage'");
-	$user_studs=$connect->Execute("SELECT * FROM user_studs WHERE id_sondage='$numsondage' order by id_users");
+// recuperation du numero de sondage admin (24 car.) dans l'URL
+if (isset($_GET['sondage']) && !empty($_GET['sondage']) && is_string($_GET['sondage']) && strlen($_GET['sondage']) === 24) {
+	$numsondageadmin=$_GET["sondage"];
+	//on découpe le résultat pour avoir le numéro de sondage (16 car.)
+	$numsondage=substr($numsondageadmin, 0, 16);
+}
 
+if (preg_match(";[\w\d]{24};i", $numsondageadmin)) {
+	$sql = 'SELECT * FROM sondage WHERE id_sondage_admin = '.$connect->Param('numsondageadmin');
+	$sql = $connect->Prepare($sql);
+	$sondage = $connect->Execute($sql, array($numsondageadmin));
+	
+	if ($sondage !== false) {
+		$sql = 'SELECT * FROM sujet_studs WHERE id_sondage = '.$connect->Param('numsondage');
+		$sql = $connect->Prepare($sql);
+		$sujets = $connect->Execute($sql, array($numsondage));
+		
+		$sql = 'SELECT * FROM user_studs WHERE id_sondage = '.$connect->Param('numsondage').' order by id_users';
+		$sql = $connect->Prepare($sql);
+		$user_studs = $connect->Execute($sql, array($numsondage));
+	}
 }
 
 //verification de l'existence du sondage, s'il n'existe pas on met une page d'erreur
-- 
GitLab