author:
Alex Mwaura
Starting list sourced from: http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
When doing any reverse shell, you need to be anonimous as possible. For this, on your target machine, your reverse shell connection should go out on a common well-known port. For instance, if your target machine spawn out a connection on port 1234
you will be caught very fast.
If you’re lucky enough to find a command execution vulnerability during a penetration test, pretty soon afterwards you’ll probably want an interactive shell.
If it’s not possible to add a new account to / SSH key / .rhosts
file in order to login, your next step is likely to be either trowing back a reverse shell or binding a shell to a TCP port.
Your options for creating a reverse shell are limited by the scripting languages installed on the target system – though you could probably upload a binary program too if you’re suitably well prepared.
The examples shown are tailored to Unix-like systems. Some of the examples below should also work on Windows if you use substitute “/bin/sh -i” with “cmd.exe”.
Some versions of bash can send you a reverse shell (this was tested on Ubuntu 10.10):
Here’s a shorter, feature-free version of the perl-reverse-shell:
This was tested under Linux / Python 2.7:
This code assumes that the TCP connection uses file descriptor 3. This worked on my test system. If it doesn’t work, try 4, 5, 6…
If you want a .php file to upload, see the more featureful and robust php-reverse-shell.
Netcat is rarely present on production systems and even if it is there are several version of netcat, some of which don’t support the -e option.
If you have the wrong version of netcat installed, Jeff Price points out here that you might still be able to get your reverse shell back like this:
One of the simplest forms of reverse shell is an xterm session. The following command should be run on the server. It will try to connect back to you (10.0.0.1) on TCP port 6001.
To catch the incoming xterm, start an X-Server (:1 – which listens on TCP port 6001). One way to do this is with Xnest (to be run on your system):
You’ll need to authorise the target to connect to you (command also run on your host):
See also this awesome resource: https://tryhackme.com/room/introtoshells
In the most basic form, NetCat
and Socat
can make easily reverse shells. NetCat
is the traditional Swiss Army Knife
of networking tools. Socat
is like NetCat
on steroids. However, Socat
is rarely installed by default while NetCat
is almost installed on any Linux distribution by default. NetCat
is also know to be unstable by default and can lose easily the network connection. Unstable, as if we press CTRL + C
we break the connection. While Socat
is more robust and has more features, the syntax is pretty hard to grasp.
Metasploit Framework
, see the auxiliary/multi/handler
module.msfvenom
- Is part of the Metasploit Framework
, but shipped as a standalone tools. msfvenom
is used to generate payloads on the fly.PentestMonkey
has also a git repo called Reverse Shell Cheatsheet on GitHub./usr/share/windows-resources/
- Contains various (compiled) utilities to be used on Windows systems. Check out the sub folder binaries for example where you will find nc.exe
, wget.exe
. whoami.exe
.At a high level, we are interested in two kinds of shell when it comes to exploiting a target: reverse
shells, and bind
shells.
As a general rule, reverse
shells are easier to execute and debug, however, we will cover both examples below. Don't worry too much about the syntax here: we will be looking at it in upcoming tasks. Instead, notice the difference between reverse and bind shells in the following simulations.
Bind shells are when the code executed on the target is used to start a listener attached to a shell directly on the target. This would then be opened up to the internet, meaning you can connect to the port that the code has opened and obtain remote code execution that way. This has the advantage of not requiring any configuration on your own network, but may be prevented by firewalls protecting the target.
Reverse shells are when the target is forced to execute code that connects back to your computer. On your own computer you would use one of the tools mentioned in the previous task to set up a listener which would be used to receive the connection. Reverse shells are a good way to bypass firewall rules that may prevent you from connecting to arbitrary ports on the target; however, the drawback is that, when receiving a shell from a machine across the internet, you would need to configure your own network to accept the shell. This, however, will not be a problem on the TryHackMe network due to the method by which we connect into the network.