> For the complete documentation index, see [llms.txt](https://viperone.gitbook.io/pentest-everything/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://viperone.gitbook.io/pentest-everything/everything/everything-linux/shell-upgrades.md).

# Shell Upgrades

### Most reliable

Lacks some functions but reliable and easy

```bash
/usr/bin/script -qc /bin/bash /dev/null
```

### Python

Lacks some functions but reliable and easy

```python
python -c 'import pty; pty.spawn("/bin/bash")'
/usr/bin/python -c 'import pty; pty.spawn("/bin/bash")'

# Python 3
python3 -c 'import pty; pty.spawn("/bin/bash")'
/usr/bin/python3 -c 'import pty; pty.spawn("/bin/bash")'
```

### Spawn TTY Shell

SSH like functions, preffered method of upgrading the shell

```bash
# Spawn Python shell
python -c 'import pty; pty.spawn("/bin/bash")'

# Background the shell
Ctrl + Z

# Get current Rows and Columns
stty -a | head -n1 | cut -d ';' -f 2-3 | cut -b2- | sed 's/; /\n/'

# Bring shell back to the foreground
stty raw -echo; fg

# Set size for the remote shell 
# (where ROWS and COLS are the values from the 3rd command)
stty rows ROWS cols COLS

# Add some colours
export TERM=xterm-256color

# Reload bash to apply the TERM variable
exec /bin/bash
```

### Spawn TTY Shell #2

Similar to above, slightly less function but easier to implement.

```python
# Spawn Python shell
python -c 'import pty;pty.spawn("/bin/bash")'

# Give terminal functions
export TERM=xterm

# Background the shell
Ctrl + Z

# Bring shell back to the foreground 
stty raw -echo; fg
```
