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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access