Writing the p0f_socket Module
Now,
to write the module itself, first determine
what MSF options a user would need to set. The query needs the host
to fingerprint and the source IP address that makes the
connection—that is, our IP address. For the target IP address,
use RHOST
as a user option. The source IP address
can be autodetected via a method from Pex::Utils
,
but we’ll leave it as an advanced option named
SourceIP
just in case a user wants to specify it.
After p0f is launched with the
-Q
option, it creates a socket file on the
filesystem. The SOCK
user option allows a user to
specify the path to the socket file. A nice feature would be an
“active” mode in which the module
initiates a remote connection to an open port. To enable this, add an
ACTIVE
Boolean user option
that will toggle the functionality, as well as an
RPORT
user option that should be a known open
port. Now, if a user chooses passive mode, the module will have to
wait for a connection to appear in the cache. In that case
we’ll assume the connection will appear close to the
time the user executes the module, so we’ll use an
advanced option named Timeout
with a default value
of 30 seconds to wait for the connection to appear in the cache.
Our Exploit( )
method’s logic
flow is pretty simple. First, it determines whether a user wants
active or passive mode. In active mode it makes a connection, and
then it makes a query to the p0f
socket. If it doesn’t get a response, it will wait in the hope that a connection will ...
Get Network Security Tools now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.