Antes de ler este post, perceba que estou apenas saindo da pasta de papel pela qual examinei. Não sendo capaz de ver toda a base de código, posso estar muito errado sobre o estado sanitário de $_POST['p1'])
. No entanto, eval () 'ing qualquer variável é realmente uma prática ruim, por isso, mesmo se eu estiver errado, este post ainda é relevante.
Parece que você está eval () usando dados não higienizados nesse script php. O seguinte:
eval($_POST['p1']);
é além de perigoso na maioria das configurações . A menos que tenha safe_mode
ativado, isso permite o acesso ao shell (via injeção de shell_exec()
) a qualquer pessoa que possa definir a variável p1
via POST
, que é qualquer um com um navegador da Web e uma conexão com a Internet. Mesmo se você tiver safe_mode
ativado, isso não é seguro. O safe_mode
do PHP executa a entrada através de escapeshellcmd()
, o que não escapa ao '!' caractere corretamente, que ainda pode ser usado para executar código baseado em referências de histórico, que é o que o '!' personagem representa.
Certifique-se de que, antes de EVER enviar uma variável para eval()
, ela seja adequadamente eliminada e sanitizada. Nesse caso, algo como eval(str_replace('!', '\!', escapeshellarg($_POST['p1']));
seria capaz de impedir que um usuário fornecesse um comando shell por meio do eval. No entanto, como a intenção do código parece ser executar o que estiver em $_POST['p1'])
, você pode querer examinar um novo design do modelo. Se o propósito da base de código é fornecer código PHP válido em $_POST['p1'])
, será quase impossível garantir que o código não seja malicioso.
Observe que, se você estiver executando em uma caixa do Windows, o! caractere não faz nada e é um caractere de shell válido.
Observe também que a partir do PHP 5,3 safe_mode
é considerado depreciado, o que significa que depender dele é uma idéia terrível em primeiro lugar.
Se um usuário mal-intencionado souber de uma vulnerabilidade de eval()
, ele poderá injetar o malware inicialmente mencionado em sua postagem. Se minha análise estiver correta e $_POST['p1']
não estiver sanitizado, esse pode ser o vetor de ataque usado pelo usuário mal-intencionado.
Espero que seus problemas de malware sejam resolvidos rapidamente!