Quando você efetua login por meio de um método normal (no console, por SSH, etc.), o programa que manipula o login define algumas variáveis de ambiente, incluindo HOME . Se você obtiver acesso a um shell não por meio do login, mas ao explorar uma vulnerabilidade em um programa, você obtém o ambiente desse programa, que frequentemente, mas nem sempre, inclui HOME .
No bash, por algum motivo, o comando cd sem argumento usa o valor de HOME como o destino. No entanto, a expansão de til recai no diretório inicial do banco de dados do usuário (por exemplo, /etc/passwd ) se HOME não estiver definido. Portanto, se HOME não estiver definido, cd será reclamado, mas cd ~ será alterado para o diretório pessoal do usuário. cd $HOME corre cd sem argumento quando HOME não está definido.
Quando você está explorando uma vulnerabilidade, não pode contar com o ambiente sendo familiar. É parte do ofício de fazer uma exploração - a parte fácil - passar da capacidade de executar código (por exemplo, ter um shell) para configurar um ambiente conveniente para executar código padrão.


