rastrear a origem do comando shell

1

Em nosso log de erro do apache (/ usr / local / apache / logs / error_log) para um de nossos servidores, estamos vendo um comando shell sendo executado com bastante frequência, o que gera um erro, se parece com isto:

sh: list_price: command not found

list_price é um campo que usamos em um sistema de comércio eletrônico em mais de 50 sites e, certamente, nada suspeito. A questão é que não temos idéia de como isso está sendo passado para o shell - nós verificamos todas as ocorrências de exec () e system () e simplesmente não podemos ver como isso seria passado. Existe alguma maneira de detectar mais facilmente qual é a fonte disso, já que não há nada mais significativo sendo produzido do que eu coloquei acima? FYI isso está em um servidor rodando o CentOS 5 e os sites em questão são todos PHP.

    
por robjmills 16.06.2009 / 15:29

3 respostas

7

Backticks (') tem um significado especial no PHP. Eles são os Operadores de Execução (parece sombrio isto). Quando usado fora de uma string como um delimitador de texto, ele executa o comando entre eles. Para o seguinte exemplo:

$commandResult = 'ls -l';
echo $commandResult; // Will output a directory listing of the current directory

Para parar o comportamento, basta colocá-lo entre aspas simples (') ou aspas ("):

$commandResult = ''ls -l'';
echo $commandResult; // Will output 'ls -l';

Agora, você provavelmente fez algo assim: (Código preguiçoso abaixo, não seguro contra injeção de SQL, mas é apenas um exemplo).

$query = 'SELECT * FROM sometable ORDER BY ' . 'list_price';

Mas esqueci de colocar aspas em torno dele, levando a duas coisas:

  • O PHP não forneceu um erro de sintaxe porque é uma sintaxe válida.
  • Você recebe o comando do shell com falha acima.

Pesquise em sua base de código por qualquer referência de list_price e verifique se ela está entre aspas simples ou citações.

    
por 16.06.2009 / 16:16
2

Você está usando backticks ao redor de list_price, sem citá-los? Esse pode ser o seu problema.

    
por 16.06.2009 / 15:37
1

Você deve estar ignorando alguma coisa, sem ofensa significava. Talvez você possa tentar criar o shell script list_price para que ele possa escrever algum arquivo de log de como e quando foi executado?

    
por 16.06.2009 / 15:31