* telnet module should not return success when it finds something other than telnet
* telnet module should not return success when it finds something other than telnet
* Adds verification step for POP3 banners
* Add validation for IMAP banners & fix some formatting problems
* Verify SMTP banners exist and are successful
* Add check for is_dnp3 flag which seems to be working as expected
* Fix dropping SCAN_APPLICATION_ERROR in IMAP
* Fix dropping SCAN_APPLICATION_ERROR in POP3
* Fix dropping SCAN_APPLICATION_ERROR in SMTP
* Add protocol and blacklist indicators to email protocols
Co-authored-by: Elliot Cubit <elliotcubit@elliots-mbp.lan>
So that we can advertise a slightly more expansive default set of
signature/hash algorithms in the signature_algorithms extension of
the TLS Client Hello, provide an option to use a pre-defined override.
This also splits up the TLS connection helper in tls.go, so that the
tls.Config can be modified by a scanner module.
If the --max-redirects value is exceeded, we return
SCAN_APPLICATION_ERROR with "Too many redirect" as the error message.
Add an option to suppress this error, and return success even if we
exceed the maximum specified number of redirects.
The Scanner.config struct is a configuration for all instances of
Scanner. Scanner.Scan() is called concurrently by multiple worker
goroutines; while Scanner is dereferenced before the call, the config
struct is a pointer, and so modifications to it will affect all other
running scans done with that Scanner.
Make sure we treat it as immutable during anything invoked by
Scanner.Scan() in the http module.
https://github.com/zmap/zgrab2/pull/245
The goroutine running the monitor isn't actually closed. This PR updates
the API to allow that Goroutine to properly block program exit. This can
be leveraged as we continue to make the configuration non-global.
This updates MakeMonitor() to take the channel size as a parameter,
instead of reading it from the global `config` object. Unfortunately,
the caller of MakeMonitor() doesn't actually have access to the global,
since it's in a different package (bin vs the root package). Luckily,
there doesn't appear to be a reason to have a buffer in this channel.
This updates the caller to pass a hardcoded size of 1.
This abstracts more of the help text into the ScanModule definition,
removing some more of the need for `zgrab2.AddCommand()`
https://github.com/zmap/zgrab2/pull/248
If both an IP address and a domain are specified for a scan, have the
HTTP scanner use a fake resolver in the DialContext, so that we always
scan the intended IP and Domain name pair.
However, make sure redirects still function as normal, so only use our
fake resolver if the domain name matches the original targeted domain
name.
In addition, the custom resolver is only used if the network specified
is one that supports domain names.
This adds a custom resolver, that will always resolve to the specified
ip address. The intended usage is for when doing name-based scans,
but have a specified IP address as well. This will provide a resolver
that can be added to a Dialer, that will cause all DNS lookups to match
the specified IP address.
Commit a38194a added an optional port override as part of the
scan target. The HTTP and IPP modules, however, still compose
the URL (and select http vs https) by ignoring the override.
This checks for the override, and if present uses the scan target
port. Otherwise, it falls back to the config port.
https://github.com/zmap/zgrab2/pull/233
* Add support to HTTP for setting local interface
* Add net import
* use correct flag
* better CLI flag name
* Remove logged `\n`
* Remove extranneous if statement
Move ZGrab2's main function to a library, and call it in cmd/zgrab2
after importing all of our modules. Consumes of ZGrab2 as a library can
use the same approach to provide custom sets of modules, without having
to hack the build system or reimplement main.
https://github.com/zmap/zgrab2/pull/224
This pins dependencies via go mod init. Regular builds should still
work, so this won't affect CI. It overrides the default set of deps for
ZFlags, to point to v1.4.0-beta.1. This gets the ParseCommandLine
function.
The previous patch allows the port to be specified in the
`ScanTarget{}`.
Since the port option in the Config may not be the port currently being
scanned, delete the `GetPort()` function provided by each module.
The `GetPort()` function is also not used. While we could just change
the meaning of this function, to mean "Return the port in the Config",
it is probably better to go ahead and just remove all references to it
as there are no users.
The port field is tied to the configuration of each instance of
`Scanner` struct. However, applications using zgrab2 scan modules may
want to specify specific ports to scan, without needing to initialize a
whole new module.
This patch adds a pointer to a uint describing a port to `ScanTarget{}`.
If that is nil, the specified port will override the port in the Config.