74 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
Forge-socket banner grab
 | 
						|
======
 | 
						|
 | 
						|
This utility, in combination with a kernel module
 | 
						|
(https://github.com/ewust/forge_socket/) will complete the half-open connection
 | 
						|
created by ZMap during a TCP-scan, optionally send a small message, and wait
 | 
						|
for the hosts response. The response is then printed along with their IP
 | 
						|
address on stdout. Periodic status messages appear on stderr.
 | 
						|
 | 
						|
This utility is functionally equivalent to banner-grab-tcp, however, instead of
 | 
						|
having the kernel send a RST packet for the server's SYN+ACK, and
 | 
						|
banner-grab-tcp attempting to start a fresh TCP connection with the host,
 | 
						|
forge-socket will take the parameters of the SYN+ACK packet, and use a kernel
 | 
						|
module to add it as an ESTABLISHED TCP connection socket. Then, the
 | 
						|
forge-socket user-space program can use this socket to send() and recv() as
 | 
						|
normal, and completes the banner-grab process (optionally send a small message,
 | 
						|
and receive the server's response).
 | 
						|
 | 
						|
 | 
						|
 | 
						|
USING:
 | 
						|
-----
 | 
						|
# Install forge-socket to the ZMap root directory:
 | 
						|
cd ./zmap/
 | 
						|
git clone git@github.com:ewust/forge_socket.git
 | 
						|
cd forge_socket
 | 
						|
make
 | 
						|
sudo insmod forge_socket.ko
 | 
						|
 | 
						|
# Don't send RST packets (forge-socket will complete these connections instead)
 | 
						|
sudo iptables -A OUTPUT -p tcp -m tcp --tcp-flags RST,RST RST,RST -j DROP
 | 
						|
 | 
						|
# Use ZMap + forge-socket simultaneously:
 | 
						|
make
 | 
						|
#echo -e -n "GET / HTTP/1.1\r\nHost: %s\r\n\r\n" > http-req
 | 
						|
sudo su
 | 
						|
ulimit -SHn 1000000 && ulimit -SSn 1000000
 | 
						|
zmap -p 80 -B 50M -N 1000 -O extended_file -o - | ./forge-socket -c 8000 -d http-req > http-banners.out
 | 
						|
 | 
						|
 | 
						|
The options are similar to banner-grab-tcp, except there is no connection timeout :)
 | 
						|
 | 
						|
OPTIONS:
 | 
						|
-----
 | 
						|
-c, --concurent         Number of connections that can be going on at once.
 | 
						|
                        This, combined with timeouts, will decide the maximum
 | 
						|
                        rate at which banners are grabbed. If this value
 | 
						|
                        is set higher than 1000, you should use 
 | 
						|
                        `ulimit -SSn 1000000` and `ulimit -SHn 1000000` to
 | 
						|
                        avoid running out of file descriptors (typically capped
 | 
						|
                        at 1024).
 | 
						|
 | 
						|
-r, --read-timeout      Read timeout (seconds). Give up on a host if after
 | 
						|
                        connecting (and optionally sending data), it does
 | 
						|
                        not send any response by this time. Default: 4 seconds.
 | 
						|
 | 
						|
-v, --verbosity         Set status verbosity. Status/error messages are outputed
 | 
						|
                        on stderr. This value can be 0-5, with 5 being the most
 | 
						|
                        verbose (LOG_TRACE). Default: 3 (LOG_INFO)
 | 
						|
 | 
						|
-f, --format            Format to output banner responses. One of 'hex', 'ascii',
 | 
						|
                        or 'base64'. 
 | 
						|
                        'hex' outputs ascii hex characters, e.g. 48656c6c6f.  
 | 
						|
                        'ascii' outputs ascii, without separators, e.g. Hello
 | 
						|
                        'base64' outputs base64 encoding, e.g. SGVsbG8=
 | 
						|
                        Default is base64.
 | 
						|
 | 
						|
-d, --data              Optional data file. This data will be sent to each host
 | 
						|
                        upon successful connection. Currently, this file does 
 | 
						|
                        not allow null characters, but supports up to 4
 | 
						|
                        occurances of the current host's IP address, by replacing
 | 
						|
                        %s with the string (inet_ntoa) of that host's IP address.   
 | 
						|
 |