3
@6^ 4                 @   sD   d dl Z d dlZd dlmZ d dlmZmZmZ G dd deZdS )    N)	IPNetwork)
SpiderFootSpiderFootPluginSpiderFootEventc            	   @   s   e Zd ZdZdddddddddZddd	d
dddddZdZdZe fddZ	dd Z
dd Zdd Zdd Zdd Zdd Zdd  Zd!d" ZdS )#sfp_hackertargetzrHackerTarget.com:Footprint,Investigate,Passive:Passive DNS::Search HackerTarget.com for hosts sharing the same IP.FT   d   )cohostsamedomainverifynetblocklookupmaxnetblock	maxcohosthttp_headerstcp_portscanudp_portscanz>Treat co-hosted sites on the same target domain as co-hosting?zMVerify co-hosts are valid by checking if they still resolve to the shared IP.zLook up all IPs on netblocks deemed to be owned by your target for possible blacklisted hosts on the same target subdomain/domain?zyIf looking up owned netblocks, the maximum netblock size to look up all IPs within (CIDR value, 24 = /24, 16 = /16, etc.)zbStop reporting co-hosted sites after this many are found, as it would likely indicate web hosting.z/Retrieve IP HTTP headers using HackerTarget.comzIScan IP for commonly open TCP ports using HackerTarget.com TCP port scan.zIScan IP for commonly open UDP ports using HackerTarget.com UDP port scan.Nr   c             C   s>   || _ | j | _d| _x"t|j D ]}|| | j|< q$W d S )Nr   )sftempStorageresultscohostcountlistkeysopts)selfsfcuserOptsopt r   ;/var/www/spiderfoot.crq.systems/modules/sfp_hackertarget.pysetup5   s
    
zsfp_hackertarget.setupc             C   s
   dddgS )N
IP_ADDRESSNETBLOCK_OWNERDOMAIN_NAME_PARENTr   )r   r   r   r   watchedEvents>   s    zsfp_hackertarget.watchedEventsc             C   s   ddddddddd	d
ddgS )NCO_HOSTED_SITEUDP_PORT_OPENTCP_PORT_OPENr   WEBSERVER_HTTPHEADERSRAW_DNS_RECORDSINTERNET_NAMEINTERNET_NAME_UNRESOLVEDDOMAIN_NAMEAFFILIATE_DOMAIN_NAMEAFFILIATE_INTERNET_NAME"AFFILIATE_INTERNET_NAME_UNRESOLVEDr   )r   r   r   r   producedEventsD   s
    zsfp_hackertarget.producedEventsc             C   s   | j jd| jd | jd d| d d}|d d kr8d S tjd|d tjtjB }|sj| j jd	|  d S tjd
|d }|s| j jd	|  d S | j jdtt	| d |  |S )Nz'https://hackertarget.com/udp-port-scan/_fetchtimeout
_useragentz	theinput=zJ&thetest=udpscan&name_of_nonce_field=&_wp_http_referer=%2Fudp-port-scan%2F)timeout	useragentpostDatacontentz"<pre id="formResponse">(.*?)</pre>zFound no open UDP ports on z(\d+)/udp\s+open\s+r   zFound z open UDP ports on )
r   fetchUrlr   refindall	MULTILINEDOTALLdebugstrlen)r   ipres	html_data
open_portsr   r   r   portScanUDPL   s     zsfp_hackertarget.portScanUDPc             C   s   | j jd| jd | jd d| d d}|d d kr8d S tjd|d tjtjB }|sj| j jd	|  d S tjd
|d }|s| j jd	|  d S | j jdtt	| d |  |S )Nz'https://hackertarget.com/tcp-port-scan/r/   r0   z	theinput=zJ&thetest=tcpscan&name_of_nonce_field=&_wp_http_referer=%2Ftcp-port-scan%2F)r1   r2   r3   r4   z"<pre id="formResponse">(.*?)</pre>zFound no open TCP ports on z(\d+)/tcp\s+open\s+r   zFound z open TCP ports on )
r   r5   r   r6   r7   r8   r9   r:   r;   r<   )r   r=   r>   r?   r@   r   r   r   portScanTCPe   s     zsfp_hackertarget.portScanTCPc             C   s   | j jd| | jd | jd d}|d d krH| j jd| d d d S |d jd	sj| j jd
|  d S t }xP|d j D ]@}d|krq~|jdd j	 }dj
|jddd  }|||< q~W |S )Nz,https://api.hackertarget.com/httpheaders/?q=r0   r/   )r2   r1   r4   z!Unable to fetch HTTP headers for z from HackerTarget.com.FzHTTP/zFound no HTTP headers for z: r      )r   r5   r   error
startswithr:   dict
splitlinessplitlowerjoin)r   r=   r>   headersheaderkvr   r   r   httpHeaders~   s"    zsfp_hackertarget.httpHeadersc             C   s   | j jd| | jd | jd d}|d d krH| j jd| d d d S t }x@|d j D ]0}|j jd	rpq\|j d
kr~q\|j|j  q\W |S )Nz-https://api.hackertarget.com/zonetransfer/?q=r0   r/   )r2   r1   r4   zUnable to fetch DNS zone for z from HackerTarget.com.F; )	r   r5   r   rD   r   rG   striprE   append)r   r=   r>   recordsrecordr   r   r   zoneTransfer   s    zsfp_hackertarget.zoneTransferc             C   s   | j jd| | jd | jd d}|d d kr@| j jdd d S d|d krPd S |d jd	}| j jd
tt| d |  |S )Nz0https://api.hackertarget.com/reverseiplookup/?q=r0   r/   )r2   r1   r4   z)Unable to fetch hackertarget.com content.Fz
No records
zFound z on )r   r5   r   rD   rH   r:   r;   r<   )r   r=   r>   hostsr   r   r   reverseIpLookup   s     z sfp_hackertarget.reverseIpLookupc             C   s^  |j }|j}|j}|| _| jjd| d |  |dkrX|dkrX| jjd| d  d S || jkrz| jjd| d  d S |d	kr| jd
 sd S t|j	| jd k r| jjdt
t|j	 d t
| jd   d S |dkr| j|}|sd S tddj|| j|}| j| xx|D ]n}tjdtjtjB }tj||}	t|	dkrPqt }
xP|	D ]H}| jjd|  |jdr|
j|d d2  n|
j|d |  q\W xt|
D ]}| j j|dddrd}nd}| jd r| jj| r| jjd| d  |d7 }t||| j|}| j| | jj|| jd r|jdrftd || j|}| j| ntd!|| j|}| j| qW qW d S t }|jd"rxTt|D ]2}t
|| jkr|jt
| d| jt
|< qW n|j| d| j|< t }xX|D ]N}| j rd S | j |}
xD|
D ]:}d#|kr@q,| jj!d$|  | jd% s| j j|dd&r| jjd| d'  q,||kr,||kr,| jd r| jj"|| r| jjd| d( |  q,| j#| jd) k r,|d	kr,td|| j|}| j| td*|j$ | j|}| j| ntd*|j$ | j|}| j| |j|j$  |  j#d7  _#q,W | jj%d+dr| j&|}|d k	rtd,t'j(|| j|}| j| | jj%d-dr| j)|}|rx0|D ](}td.|d/ | | j|}| j| qW | jj%d0dr| j*|}|rx0|D ](}td1|d/ | | j|}| j| q(W qW d S )3NzReceived event, z, from r   r   z	Ignoring z, from self.z	Skipping z as already mapped.r    r   r   z$Network size bigger than permitted: z > r!   r'   rW   z^(\S+)\.?\s+\d+\s+IN\s+[AC].*r   z	Matched: .rC   T)includeChildrenincludeParentsr(   r,   r
   zHost z could not be resolved_UNRESOLVED_internettlds	AFFILIATEr+   r*   	NETBLOCK_ zFound something on same IP: r	   )r\   z" because it is on the same domain.z no longer resolves to r   r#   r   r&   r   r$   :r   r%   )+	eventTypemoduledatacurrentEventSrcr   r:   r   r   r   	prefixlenr;   rV   r   rJ   __name__notifyListenersr6   compile
IGNORECASEr9   r7   r<   r   endswithrS   set	getTargetmatchesresolveHostisDomainrE   checkForStoprY   info
validateIPr   rI   getrO   jsondumpsrA   rB   )r   event	eventNamesrcModuleName	eventDatarT   evtrowpatgrpsrX   strdatahostevt_typeqrylistipaddrmyresr=   hiper   eZ	udp_portsportZ	tcp_portsr   r   r   handleEvent   s    





















zsfp_hackertarget.handleEvent)ri   
__module____qualname____doc__r   optdescsr   r   rF   r   r"   r.   rA   rB   rO   rV   rY   r   r   r   r   r   r      s8   	r   )	r6   rw   netaddrr   sflibr   r   r   r   r   r   r   r   <module>   s   