> For the complete documentation index, see [llms.txt](https://ret2basic.gitbook.io/ctfnote/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ret2basic.gitbook.io/ctfnote/red-teaming/exploitation/tty.md).

# TTY

## Step 1: Upgrade to TTY shell

In the **remote** shell, upgrade the shell to TTY:

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

{% hint style="info" %}
**Step 1 is sufficient in most scenarios.** If you plan to use things like Vim or Nano for privesc, then you need to complete all steps.
{% endhint %}

## Step 2: Export terminal environmental variables

In your **local** shell, check the environmental variable `$TERM`:

```bash
$ echo $TERM
xterm-256color
```

In the **remote** shell, export the environmental variables `$TERM` and `$SHELL`:

```bash
export TERM=xterm-256color
export SHELL=/bin/bash
```

## Step 3: Set up terminal size

In your **local** shell, check terminal **rows** and **columns**:

```bash
$ stty size
36 145
```

In the **remote** shell, press **ctrl+z** to bring the current session to **background**:

```bash
^Z
[1]+  Stopped        nc -nlvp 443
```

Now you are brought back to the **local** shell. Bring the reverse shell to **foreground**:

```bash
$ stty raw -echo;fg
nc -nlvp 443
$                reset
```

Adjust the **terminal size**:

```bash
stty rows 36 columns 145
```
