<?php
echotop
("Ncat for Netcat Users");
?>

<h2>Contents:</h2>
<ul>
<li><a href="#intro">Introduction</a></li>
<li><a href="#tips">General Tips</a></li>
<li><a href="#mapping">Mapping of Netcat options to Ncat options</a></li>
<li><a href="#newoptions">New Ncat options</a></li>
<li><a href="#ssl">SSL Support</a></li>
<li><a href="#proxy">Proxy Support</a></li>
<li><a href="#relays">Netcat Relays</a></li>
<li><a href="#resources">Resources</a></li>
</ul>

<h2><a id="intro"></a>Introduction:</h2>
With the release of <a href="http://nmap.org/5/">Nmap 5.00</a>, the new <a href="http://nmap.org/ncat/">Ncat</a> tool has been officially released.  Ncat is meant to be a modern implementation of <a href="http://nc110.sourceforge.net/">Netcat</a> using Nmap's mature networking libraries, combining the best features of the various Netcat derivatives into one new tool.  While Ncat is an extremely versatile tool with many amazing new features, it is not quite 100% reverse-compatible with the original Netcat.  I decided that it would be helpful to make some kind of chart or guide mapping how to do common Netcat tasks using Ncat, and this is the result.
<p />
Some of the new features in Ncat compared to the original Netcat are:<br />
<ul>
<li>IPv6 support</li>
<li>SSL support</li>
<li>Proxy support (both using a proxy and acting as one!)</li>
<li>Ability to chain Ncat's together</li>
<li>Ability to specify specific hosts to allow or deny access to in listen mode</li>
<li>Connection brokering</li>
<li>SCTP support</li>
</ul>
<h2><a id="tips"></a>General Tips:</h2>
<ul>
<li>As of Ncat 5.20, the &quot;<code>-p</code>&quot; option can now be used to specify the local port to listen on in listen mode, in order to be reverse-compatible with the original Netcat.  This allows for Ncat to be used as a drop-in replacement for most Netcat examples out there!  However, the &quot;<code>-s</code>&quot; option cannot be used to specify the local IP address to listen on.  Instead, simply provide the IP address without preceding it with &quot;<code>-s</code>&quot;.</li>
<li>If a host to listen on isn't specified, Ncat listens on all local interfaces.  If a port to listen on isn't specified, Ncat listens on port 31337 by default.</li>
<li>By default, timing arguments are in milliseconds! Append "s", "m", or "h" to the value to specify seconds, minutes, or hours, respectively.  Note that this is going to change to seconds in an upcoming version of Ncat (newer than 5.30BETA1).</li>
<li>By default, Ncat accepts up to 100 simultaneous connections! Use "<code>-m1</code>" (that's a numeral one) to limit it to 1 like the original Netcat.</li>
<li>When using &quot;<code>-e, --exec</code>&quot; to execute commands, it is necessary to specify the full path to any executables used.  Using &quot;<code>-c, --sh-exec</code>&quot; executes via /bin/sh and takes advantage of the PATH enviornment variable.</li>
<li>UDP mode does not support SSL or connection brokering, likely due to its stateless nature.</li>
<li>Command execution (<code>-e, --exec</code> and <code>-c, --sh-exec</code>) cannot be used with connection brokering (<code>--broker</code>).</li>
<li>As of Ncat 5.20, Ncat's command execution options <i>can</i> be used with SSL (<code>--ssl</code>) and Ncat's output options (<code>-o</code> and <code>-x</code>)!</li>
<li>The original stable version of Ncat (5.00) did not properly set the return value based on whether the connection was successful or not.  This has been fixed in Ncat 5.20.</li>
</ul>

<h2><a id="mapping"></a>Mapping of Netcat options to Ncat options:</h2>
<table border="3" cellspacing="3" cellpadding="3">
<tr><th>Netcat Option</th><th>Netcat Description</th><th>Ncat Equivilent</th><th>Ncat Description</th></tr>
<tr><td style="white-space: nowrap"><code>-d</code></td><td>[Windows only] detach from console, stealth mode</td><td><code>[none]</code></td><td>[DIFFERENT!] <code>-d, --delay</code> specifies the wait between read/writes in Ncat</td></tr>
<tr><td style="white-space: nowrap"><code>-e prog</code></td><td>inbound program to exec [dangerous!!]</td><td style="white-space: nowrap"><code>-e, --exec &lt;command&gt;</code></td><td>Alternatively, use <code>-c, --sh-exec</code> to execute via /bin/sh</td></tr>
<tr><td style="white-space: nowrap"><code>-g gateway</code></td><td>source-routing hop point[s], up to 8</td><td style="white-space: nowrap"><code>-g hop1[,hop2,...]</code></td><td>Loose source routing hop points (8 max)</td></tr>
<tr><td style="white-space: nowrap"><code>-G num</code></td><td>source-routing pointer: 4, 8, 12, ...</td><td style="white-space: nowrap"><code>-G n</code></td><td>Loose source routing hop pointer (4, 8, 12, ...)</td></tr>
<tr><td style="white-space: nowrap"><code>-h</code></td><td>this cruft</td><td style="white-space: nowrap"><code>-h, --help</code></td><td>Display this help screen</td></tr>
<tr><td style="white-space: nowrap"><code>-i secs</code></td><td>delay interval for lines sent, ports scanned</td><td style="white-space: nowrap"><code>-d, --delay &lt;time&gt;</code></td><td>Wait between read/writes</td></tr>
<tr><td style="white-space: nowrap"><code>-l</code></td><td>listen mode, for inbound connects</td><td style="white-space: nowrap"><code>-l, --listen</code></td><td>By default, Ncat will accept 100 simultaneous connections, instead of 1 like the original netcat.  Use <code>-m</code> to specify the maximum number of simultaneous connections.</td></tr>
<tr><td style="white-space: nowrap"><code>-L</code></td><td>[Windows only] listen harder, re-listen on socket close</td><td style="white-space: nowrap"><code>-l -k</code></td><td>With Ncat, use the &quot;<code>-k</code>&quot; (<code>--keep-open</code>) option along with &quot;<code>-l</code>&quot; for the same effect as &quot;<code>-L</code>&quot;. Also is supported on all platforms with Ncat!</td></tr>
<tr><td style="white-space: nowrap"><code>-n</code></td><td>numeric-only IP addresses, no DNS</td><td style="white-space: nowrap"><code>-n, --nodns</code></td><td>Do not resolve hostnames via DNS</td></tr>
<tr><td style="white-space: nowrap"><code>-o file</code></td><td>hex dump of traffic</td><td style="white-space: nowrap"><code>-x, --hex-dump</code></td><td>[DIFFERENT!] With Ncat, &quot;<code>-o</code>&quot; saves the text-based data to a file (like running &quot;<code>ncat [host] [port] | tee [filename]</code>&quot;; use &quot;<code>-x</code>&quot; to save the data in hex.  Note the hex output is slightly different from the original netcat!</td></tr>
<tr><td style="white-space: nowrap"><code>-p port</code></td><td>local port number</td><td style="white-space: nowrap"><code>-p, --source-port &lt;port&gt;</code></td><td>Specify source port for client mode; not required (but works for reverse-compatibility with the original Netcat) in server mode!</td></tr>
<tr><td style="white-space: nowrap"><code>-r</code></td><td>randomize local and remote ports</td><td style="white-space: nowrap"><code>[none]</code></td><td>No equivilent since this is only used for port scanning (which is what nmap is for)</td></tr>
<tr><td style="white-space: nowrap"><code>-s addr</code></td><td>local source address</td><td style="white-space: nowrap"><code>-s, --source &lt;addr&gt;</code></td><td>Specify source address to use for client mode; not used in server mode!</td></tr>
<tr><td style="white-space: nowrap"><code>-t</code></td><td>answer TELNET negotiation</td><td style="white-space: nowrap"><code>-t, --telnet</code></td><td>Answer Telnet negotiations (all platforms)</td></tr>
<tr><td style="white-space: nowrap"><code>-u</code></td><td>UDP mode</td><td style="white-space: nowrap"><code>-u, --udp</code></td><td>Use UDP instead of default TCP</td></tr>
<tr><td style="white-space: nowrap"><code>-v</code></td><td>verbose [use twice to be more verbose]</td><td style="white-space: nowrap"><code>-v, --verbose</code></td><td>Issue once (-v) for connection information, twice (-vv) for code debugging information, or three times (-vvv) for both</td></tr>
<tr><td style="white-space: nowrap"><code>-w secs</code></td><td>timeout for connects and final net reads</td><td style="white-space: nowrap"><code>-w, --wait &lt;time&gt;</code></td><td>Connect timeout</td></tr>
<tr><td style="white-space: nowrap"><code>-z</code></td><td>zero-I/O mode [used for scanning]</td><td style="white-space: nowrap"><code>--send-only --recv-only</code></td><td>No direct equivilent since this is only used for port scanning (which is what nmap is for), but using --send-only and --recv-only together is the same thing</td></tr>
<tr><td colspan="2">port numbers can be individual or ranges: m-n [inclusive]</td><td colspan="2">Only individual ports are supported</td></tr>
</table>

<h2><a id="newoptions"></a>New Ncat options:</h2>
<table border="3" cellspacing="3" cellpadding="3">
<tr><th>Ncat option</th><th>Description</th></tr>
<tr><td style="white-space: nowrap"><code>-4</code></td><td>Use IPv4 only (default).</td></tr>
<tr><td style="white-space: nowrap"><code>-6</code></td><td>Use IPv6 only.</td></tr>
<tr><td style="white-space: nowrap"><code>-C, --crlf</code></td><td>Use CRLF for EOL sequence (useful for HTTP).</td></tr>
<tr><td style="white-space: nowrap"><code>-c, --sh-exec &lt;command&gt;</code></td><td>Executes specified command via /bin/sh (allows omission of absolute paths, etc.).</td></tr>
<tr><td style="white-space: nowrap"><code>-m, --max-conns &lt;n&gt;</code></td><td>Maximum n simultaneous connections (default is 100).</td></tr>
<tr><td style="white-space: nowrap"><code>-k, --keep-open</code></td><td>Accept multiple connections in listen mode (similar to &quot;<code>-L</code>&quot; in original Windows netcat).</td></tr>
<tr><td style="white-space: nowrap"><code>--send-only</code></td><td>Only send data, ignoring received; quit on EOF.</td></tr>
<tr><td style="white-space: nowrap"><code>--recv-only</code></td><td>Only receive data, never send anything.</td></tr>
<tr><td style="white-space: nowrap"><code>--allow &lt;host&gt;[,&lt;host&gt;,...]</code></td><td>Allow specific hosts to connect to Ncat (can use Nmap-style host specification).</td></tr>
<tr><td style="white-space: nowrap"><code>--allow-file &lt;file&gt;</code></td><td>A file of hosts allowed to connect to Ncat (one per line).</td></tr>
<tr><td style="white-space: nowrap"><code>--deny &lt;host&gt;[,&lt;host&gt;,...]</code></td><td>Hosts to be denied from connecting to Ncat (can use Nmap-style host specification).</td></tr>
<tr><td style="white-space: nowrap"><code>--deny-file &lt;file&gt;</code></td><td>A file of hosts denied from connecting to Ncat (one per line).</td></tr>
<tr><td style="white-space: nowrap"><code>--broker</code></td><td>Enable Ncat's Connection Brokering mode, allowing multiple parties to connect to a centralized Ncat server and communicate with each other (automatically implies listen mode).</td></tr>
<tr><td style="white-space: nowrap"><code>--chat</code></td><td>Start a simple Ncat chat server using Connection Brokering, giving each user a unique ID and escaping characters that could mess up the terminal.</td></tr>
<tr><td style="white-space: nowrap"><code>--proxy &lt;addr[:port]&gt;</code></td><td>Specify address of host to proxy through.</td></tr>
<tr><td style="white-space: nowrap"><code>--proxy-type &lt;type&gt;</code></td><td>Specify proxy type (&quot;http&quot; or &quot;socks4&quot;).  Listen mode currently only supports acting as an HTTP proxy, and there is currently no Windows support.</td></tr>
<tr><td style="white-space: nowrap"><code>--proxy-auth &lt;username&gt;:&lt;password&gt;</code></td><td>Authenticate with HTTP or SOCKS4 proxy server using specified credentials, or require the specified credentials in listen mode.</td></tr>
<tr><td style="white-space: nowrap"><code>--sctp</code></td><td>Use SCTP instead of default TCP. SCTP support is implemented in TCP compatible mode.</td></tr>
<tr><td style="white-space: nowrap"><code>--ssl</code></td><td>Connect or listen with SSL.  Not supported over UDP.</td></tr>
<tr><td style="white-space: nowrap"><code>--ssl-cert &lt;file&gt;</code></td><td>Specify SSL certificate file (PEM) for listening or authenticating with a server (one will be generated on the fly if none specified).</td></tr>
<tr><td style="white-space: nowrap"><code>--ssl-key &lt;file&gt;</code></td><td>Specify SSL private key (PEM) file that goes with the certifcate.</td></tr>
<tr><td style="white-space: nowrap"><code>--ssl-verify</code></td><td>Verify trust and domain name of certifcates.</td></tr>
<tr><td style="white-space: nowrap"><code>--ssl-trustfile &lt;file&gt;</code></td><td>PEM file containing trusted SSL certificates.</td></tr>
</table>


<br />

<h2><a id="ssl"></a>SSL Support:</h2>

<p>Ncat supports SSL, which is useful for many different scenarios, such as securely tranferring files or connecting to SSL-enabled services.  For basic file transfer, just add the &quot;<code>--ssl</code>&quot; option to both the listener and the client.  This will transparently generate a one-time certificate for the connection.  To do manual fingerprint verification, use &quot;<code>-v, --verbose</code>&quot; to see the SHA-1 fingerprint, or use an already-generated certificate (such as one created with openssl) with the &quot;<code>--ssl-cert</code>&quot; and &quot;<code>--ssl-key</code>&quot; options.</p>

<p>Pushing a file from a listener to a client over SSL:</p>

<div class="codebox">
<code>
listener&gt;&nbsp;ncat -v -l --ssl --send-only [LocalPort] &lt; [filename]<br />
client&gt;&nbsp;&nbsp;&nbsp;ncat -v --ssl --recv-only [RemoteIPaddr] [RemotePort] &gt; [filename]
</code></div>

<p>As of version 5.20, Ncat now supports acting as an SSL wrapper around a non-SSL service!  One usage case for this feature is setting up an encrypted tunnel for VNC traffic.  While there are tons of tutorials on how to set up SSH tunnels for VNC traffic, such a setup can be difficult on Windows systems due to the lack of easy-to-use, well-supported, open-source SSH servers for Windows.  However, Ncat is just a simple executable!  To set up SSL-enabled VNC, you have to use a listener-to-client relay on both the host running the VNC server and the client running the VNC client.  However, there is a bug that prevents VNC from working over Ncat, which seems to be fixed in versions 5.30BETA1 and later.</p>

<!--  THIS ISN'T WORKING...HOPEFULLY I'LL FIGURE IT OUT SOON!
<p>On the Windows host running VNC, you could set up the Ncat wrapper by creating a new Windows service as follows:</p>

<div class="codebox">
<code>
sc \\[hostname] create NcatWrapper binpath= &quot;cmd.exe /k c:\ncat.exe -l -k -p 5950 -c ^&quot;ncat.exe 127.0.0.1 5900^&quot;&quot;
</code></div>

<p>[explain]  [show client side]</p>
-->

<p>See the <a href="http://nmap.org/ncat/guide/ncat-ssl.html">SSL page</a> of the official <a href="http://nmap.org/ncat/guide/">Ncat guide</a> for more information and examples.</p>

<h2><a id="proxy"></a>Proxy Support:</h2>

<p>Ncat is able to connect through an HTTP or SOCKS proxy, and is able to act as an HTTP proxy in listen mode.  While acting as an HTTP proxy, Ncat supports the access control options, as well as <code>--proxy-auth</code> to require username/password authentication.  For example, here is how to implement a simple HTTP proxy on port 8080 that only accepts connections from a specific network (192.168.1.0/24), also requiring the username &quot;ncatuser&quot; and password &quot;s3cr3tpass&quot;:</p>

<div class="codebox">
<code>
ncat -l -k --proxy-type http --proxy-auth ncatuser:s3cr3tpass --allow 192.168.1.0/24 8080
</code></div>

<?php
/*
Theoretically this should enable you to SSH through an HTTP proxy (by SSH-ing to port 31337 on localhost), but I can't get it to work in my test enviornment:
<div class="codebox">
<code>
ncat -l -v -k -c "ncat --proxy [ProxyAddr]:[ProxyPort] [SSH-host] 22"
</code></div>
*/
?>

<h2><a id="relays"></a>Netcat Relays:</h2>

<p>While the following Netcat examples are for a Unix-like system, the Ncat examples will work on all supported platforms, including Windows!</p>

<h3>Listener-to-Client Relay:</h3>

<p>With the original Netcat, you could implement a listener-to-client relay that sends packets from a local port to a port on a remote system as follows:</p>

<div class="codebox">
<code>
mknod backpipe p<br />
nc -l -p [LocalPort] 0&lt;backpipe | nc [TargetIPaddr] [port] &gt; backpipe
</code></div>

<p>With Ncat's ability to chain multiple Ncat's together, you could replace the above with:</p>

<div class="codebox"><code>ncat -l -m1 [LocalPort] -c &quot;ncat [TargetIPaddr] [port]&quot;</code></div>

<p>Without the &quot;<code>-m1</code>&quot; the relay will stay open and allow multiple simultaenous connections!  You could also use Ncat's access control functionality to only allow certain systems to access the relay.</p>

<h3>Listener-to-Listener Relay:</h3>

<p>With the original Netcat, you could implement a listener-to-listener relay that sends packets from any connection on one local port to another local port as follows:</p>

<div class="codebox"><code>
mknod backpipe p<br />
nc -l -p [LocalPort_1] 0&lt;backpipe | nc -l -p [LocalPort_2] &gt; backpipe
</code></div>

<p>With Ncat, you could use Connection Brokering to achieve the same goal:</p>

<div class="codebox"><code>ncat -l --broker -m2 [LocalPort]</code></div>

<p>With Connection Brokering, multiple clients can connect to a single listening port, and any data sent by any client is sent to all of the other clients.  For the purposes of this relay it makes sense to limit Ncat to 2 connections (<code>-m2</code>), but this technique could also be used for broadcasting data from one-to-many.  It might also make sense to use <code>--send-only</code> on the client that is sending data and <code>--recv-only</code> on the client that is receiving.</p>

<h3>Client-to-Client Relay:</h3>

<p>With the original Netcat, you could implement a client-to-client relay that sends packets from a connection to one local port to the connection on another local port as follows:</p>

<div class="codebox"><code>
mknod backpipe p<br />
nc [PreviousHopIPaddr] [port] 0&lt;backpipe | nc [NextHopIPaddr] [port2] &gt; backpipe
</code></div>

<p>Using Ncat, the same relay can be implemented as follows:</p>

<div class="codebox"><code>ncat [PreviousHopIPaddr] [port] -c &quot;ncat [NextHopIPaddr] [port2]&quot;</code></div>

<p>This takes advantage of the ability to chain multiple Ncat's together, similar to the listener-to-client relay.</p>

<h2><a id="resources"></a>Resources:</h2>

<ul>
<li><a href="http://nmap.org/ncat/guide/">Ncat Users' Guide</a></li>
<li><a href="http://nmap.org/ncat/man.html">Ncat Man Page</a></li>
<li><a href="http://www.sans.org/resources/sec560/netcat_cheat_sheet_v1.pdf">Netcat Cheat Sheet (by Ed Skoudis) (PDF)</a></li>
</ul>

<p><i>The Netcat relay examples used on this page are based on examples by Ed Skoudis.</i></p>
<?php
append
();

Firefox 3 - Download Now! Get Thunderbird!
Valid XHTML 1.1! Powered by PHP
View Source