O “rename()” é um médoto do PHP usado para renomear arquivo ou diretório.
Você pode ver na documentação do PHP.
Esse método recebe duas strings como parâmetros, a primeira é o antigo nome e a segunda e o novo nome.
Mas como eu posso destruir um sistema explorando o método rename?
No entanto você precisa inserir parâmetros pelo através do $_POST, $_GET para o attack ter sucesso.
Exemplo de uso normal:
http://www.target.com/?oldImage=imageX.jpg
$_GET['oldImage'] = 'imageX.jpg';
<?php
$newName = 'imageNewName.jpg';
rename( $_GET['oldImage'], $newName );
?>
O sistema vai renomear a imageX.jpg para imageNewRename.jpg e a imageX.jpg não vai existir mais.
Exemplo do ataque:
http://www.target.com/?oldImage=../../index.php
$_GET['oldImage'] = '../../index.php';
Se você usa $_GET[‘oldImage’] com ‘index.php’ ou usa o transversal directory usando ../ como ../../folderX/index.php você pode renomear um arquivo importante do sistema.
O resultado é que o index.php não exite mais no sistema.
E quando o sistema tenta encontrar o arquivo e não acha, o sistema está corrompido e não funciona mais. Pode ser pior se o sistema for um cms como WordPress ou Joomla ou Drupal, se você renomeia algum arquivo de configuração você vai poder reiniciar todo o sistema. Os frameworks você pode renomear os arquivos de configurações como o env do laravel e parar tudo.
Assista um vídeo com exemplo:
Estude e seja um desenvolvedor melhor.
Em breve vai ver como podemos nos proteger desse ataque. Vejo vocês em breve…