Spesso durante una CTF, dopo aver ottenuto l’accesso alla macchina per esempio attraverso una reverse/bind shell, ci ritroviamo di fronte ad una shell non interattiva che ci offre quindi un’esperienza limitata; è sempre bene perciò cercare di ottenerne una interattiva.
Prima vediamo come ottenere una shell TTY:

$ python -c 'import pty; pty.spawn("/bin/sh")'
$ echo os.system('/bin/bash')
$ /bin/bash -i
$ perl —e 'exec "/bin/sh";'
$ perl: exec "/bin/sh";
$ ruby: exec "/bin/sh"
$ lua: os.execute('/bin/sh')
$ :!bash (da Vim)
$ :set shell=/bin/bash:shell (da Vim)
$ CTRO+R CTRL+X reset; /bin/bash 1>&0 2>&0 (da Nano)

Ovviamente ogni /bin/bash può essere sostituito da /bin/sh se la shell bash non fosse disponibile

A questo punto possiamo ottenere una shell completamente interattiva:

# Metto in background la shell corrente
CTRL-z

# Controllo il numero di righe e colonne nel terminale host
$ stty -a

# Imposto parametri del terminale come new line etc
$ stty raw -echo

# Ritorno alla shell
$ fg + ENTER

# Imposto variabili di ambiente per usare colori etc
$ reset
$ export SHELL=bash
$ export TERM=xterm-256color

# Imposto righe e colonne con i valori ricavati prima
$ stty rows [num] columns [num]