Comportamento estranho do script de logon do Bash

Oct 06 2020

No momento, estou criando um honeypot que registrará todas as entradas do usuário assim que ele fizer login com êxito por meio de SSH.

Veja como funciona: Eu tenho o adminshell padrão do meu usuário honeypot definido para um script bash:

admin:x:1001:1001::/home/admin:/home/admin/HoneyPot/spawner.sh

O spawner.shscript seguirá em frente e iniciará um exceptscript e gravará a saída usando script.

#!/bin/bash
cd /home/admin/HoneyPot/template/

pwd
script -c "./script.exp" -t 2> timing.log -a output.session #start recording session, execute except script
echo "we should not get here"

Aqui estão as primeiras linhas de script.exp:

#!/usr/bin/expect -f
#
# This Expect script was generated by autoexpect on Mon Oct  5 13:55:35 
# boilerplate comments and code:

set force_conservative 0  ;# set to 1 to force conservative mode even if
              ;# script wasn't run conservatively originally
if {$force_conservative} { set send_slow {1 .1} proc send {ignore arg} { sleep .1 exp_send -s -- $arg
    }
}

# start of my code

set timeout -1
spawn emulator #emulator is a simh emulator executable. not a shell script.
...
interact

Quando executo o script usando ./template.shas adminusing bash, o script funciona perfeitamente bem. No entanto, quando faço o login usando su, isso acontece:

austin@ubuntu:~$ su admin
Password: 
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
...

Por que meu script bash não funciona com o shell do usuário definido para ele? Não há chamadas recursivas dentro do meu script, e o scriptcomando deve estar bloqueando!

E para o caso de alguém estar preocupado, esta máquina não tem conectividade de rede de saída. Ele só pode receber conexões SSH. Sim, eu sei que um usuário pode escapar disso. Isso está sendo executado em uma VM.

Respostas

1 laktak Oct 06 2020 at 01:35

Eu acho que você está usando um script sem nenhuma coisa em algum lugar.

Veja esta resposta :

Se a função execl () falhar devido a um erro equivalente ao erro [ENOEXEC] definido no volume System Interfaces de POSIX.1-2008, o shell deve executar um comando equivalente a ter um shell invocado com o nome do caminho resultante da pesquisa como seu primeiro operando, com quaisquer argumentos restantes passados ​​para o novo shell, exceto que o valor de "$ 0" no novo shell pode ser definido para o nome do comando. Se o arquivo executável não for um arquivo de texto, o shell pode ignorar a execução deste comando. Nesse caso, ele deve escrever uma mensagem de erro e deve retornar um status de saída de 126.

em seu spawner.shanúncio echo "$@"para obter mais dicas.

OK, então a resposta é mais complicada, mas isso deve ajudar. Em spawner.shadicione um topo:

if [[ $1 == -c ]]; then exec bash "$@"
fi