I've seen the python pty trick in a few places, first when taking OSCP labs. However, if you've noticed there's still some problems. 2 years ago at HackFest @r00k did a presentation where he improved the quality of the shell dramatically. Last year at HackFest, @jeffmcjunkin posted further improvements. All credit goes to them, and the excerpt below comes directly from Jeff McJunkin's SEC560 notes.
Update 18/Jul/2018: It looks like a very similar (if not exactly the same) technique is used in the following video, for those of you that want to see it in action. https://youtu.be/5Hj_FkqU0Xc?t=26m15s
Note that after entering the
stty raw -echo, you're not going to see the fg get typed, and your terminal is going to be awful wonkey.
Gaining a comfortable shell with a TTY after gaining a netcat shell: python -c 'import pty; pty.spawn("/bin/bash")' Background the shell by pressing Ctrl-Z (on your local terminal) echo $TERM (on your local terminal) stty -a | head -n1 (on your local terminal) stty raw -echo (on your local terminal) fg export HOME=/your/home/directory export SHELL=/bin/bash export TERM=(whatever output you got from “echo $TERM” above) stty rows X columns Y (using the output from “stty -a | head -n1” above)
echo $TERM should return
xterm-256color on Kali.
The short of the commands listed below, with the exception of possibly the HOME and the X and Y rows.
python -c 'import pty; pty.spawn("/bin/bash")' CTRL-Z stty -a | head -n1 stty raw -echo fg export HOME=/root export SHELL=/bin/bash export TERM=xterm-256color stty rows X columns Y
Enjoy your tab complete, vim, and everything else!