Snarf is a software suite to help increase the value of man-in-the-middle attacks. Many historical applications of techniques like SMB-Relay rely on assumptions, and relegate these attacks to exploitation, rather than the discovery / enumeration phase of the penetration test. While Snarf doesn't introduce new vulnerabilities, it does introduce a new capability to capitalize on exploiting familiar vulnerabilities.
Check out our NOLAcon '14 presentation for a decent intro to the concept.
Check out a 'live' demo of Snarf in action to get a better sense for how it works.
At its core, Snarf has one key principle in play: when you MITM something, don't throw it away. Don't just try to lob a payload through it and hope it works. Instead, we relay a connection for a client, and keep the connection to the server when the client is done. We hold onto it, and provide a facility to jack in additional tools to that same, preserved connection. This way, once we middle a connection, we can explore it. Use multiple tools, assess what privileges or rights we have, etc. -- all to give the penetration tester more direct control of the situation.
You will need several key things. First, Snarf relies on iptables, so it is Linux-specific. It may be possible to move it to something like PF, but that is currently unknown. At any rate, here is a list of basic requirements:
In most Linux distributions, the only thing you'll have to do is install Node. In a Debian-derived distribution, this would look something like this (works in Kali):
$ sudo apt-get install nodejs
Here's the basic process:
Do a man-in-the-middle -- Linux must be routing the traffic of your victim
Run Snarf as root, binding to your LAN IP
$ sudo node snarf.js
Run the iptables rule to move traffic to SNARF's chain:
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 445 -j SNARF
Open a web browser to http://localhost:4001/
Wait for a connection to come through
Either wait for the connection to "complete" or "expire" it manually with the provided buttons
Connect your own tools (e.g., for SMB use smbclient, net, Metasploit, etc.) to 127.0.0.1. (Note, the username and password you use don't matter -- Snarf will authenticate it no matter what. The resulting session will use the snarfed connection to the server and, with it, the victim's credentials)