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.   
							 | 
						||
| 
								 | 
							
								
							 |