Releases: zmap/zgrab2
v1.0.0
We're very excited to release v1 of ZGrab2! We feel the module/framework API has stabilized to the point we feel comfortable with making this our first major release.
What's Changed
- Retry Postgres scans without TLS if the TLS connection attempt errors by @UnknownEclipse in #573
- 66 add memcached module by @nicholasingino in #551
- Implement a DNS and per-IP Target Rate Limit by @phillip-stephens in #572
- Group CLI flags and make --help text for modules descriptive by @phillip-stephens in #571
- replace blocked cloudflare.com test with working domain by @phillip-stephens in #585
- Fix "Application Options" mutliple module parsing by @phillip-stephens in #578
- Fix integration tests on Github Runner by @phillip-stephens in #586
- feat(http): add
SkipHostrequest option by @UnknownEclipse in #580 - feat(siemens): add custom readtimeout by flag by @zsbahtiar in #584
- Normalize scanning module variable usage by @Seanstoppable in #595
- Add port to ScanResponse output by @Seanstoppable in #596
- Make verbose a base flag by @Seanstoppable in #599
- Add additional tests for http by @Seanstoppable in #606
- Phillip/98 metadata file improvements by @phillip-stephens in #607
- Update ZFlags by @phillip-stephens in #608
- Add support for HTTP/2 and HTTP/2 over clear-text by @phillip-stephens in #581
- Return all the TLS handshake details we have even if handshake fails by @phillip-stephens in #613
- Added better docs for the Scanner interface by @phillip-stephens in #615
- feat(ssh): Improve SSH_MSG_KEXINIT composition by @TrueSkrillor in #616
- Fix Lint issues and add a test for memcached's SnakeToCamel by @phillip-stephens in #630
- bugfix: MySQL Empty Packet Check by @GQW19 in #627
- MySQL Length Check for Version 9 Packets by @GQW19 in #631
- memcached boundry check bug fix + Checks for magic byte and opcode validations by @merterdemir in #629
- Add some helpful info to the top of our README by @phillip-stephens in #634
- Add ManageSieve Module by @BMKprIT in #617
- initialize monitor map and avoid accessing before checking membership by @phillip-stephens in #647
- Fix failing IPP/Cups integration test by @phillip-stephens in #649
- Fix bug with Oracle when used with multiple module by @phillip-stephens in #648
- validate pptp magic cookie in responses by @phillip-stephens in #650
New Contributors
- @nicholasingino made their first contribution in #551
- @zsbahtiar made their first contribution in #584
- @GQW19 made their first contribution in #627
- @merterdemir made their first contribution in #629
- @BMKprIT made their first contribution in #617
Full Changelog: v0.2.0...v1.0.0
v1.0.0-RC3
Primary Changes
- Validate the magic cookie in responses for the PPTP module to validate responses are from PPTP services in #650
- Fixes a bug where the
multiplemodule could seg fault under specific conditions In #647 - Adds a ManageSieve module by @BMKprIT in #617 (Thanks for the contribution!)
- Adds bounds checking and other improvements to
memcachedby @merterdemir in #629 - Adds bounds checking to MySQL packets by @GQW19 in #631
- Improve SSH_MSG_KEXINIT composition by @TrueSkrillor in #616
Smaller Changes/Dependency Bumps
- Added better docs for the Scanner interface by @phillip-stephens in #615
- build(deps): bump golang.org/x/term from 0.35.0 to 0.36.0 by @dependabot[bot] in #622
- build(deps): bump golang.org/x/crypto from 0.42.0 to 0.43.0 by @dependabot[bot] in #621
- build(deps): bump golang.org/x/time from 0.13.0 to 0.14.0 by @dependabot[bot] in #623
- build(deps): bump golang.org/x/net from 0.44.0 to 0.46.0 by @dependabot[bot] in #619
- Fix Lint issues and add a test for memcached's SnakeToCamel by @phillip-stephens in #630
- build(deps): bump actions/upload-artifact from 4 to 5 by @dependabot[bot] in #625
- build(deps): bump actions/download-artifact from 5 to 6 by @dependabot[bot] in #626
- build(deps): bump golangci/golangci-lint-action from 8.0.0 to 9.0.0 by @dependabot[bot] in #636
- build(deps): bump golang.org/x/sys from 0.37.0 to 0.38.0 by @dependabot[bot] in #637
- Add some helpful info to the top of our README by @phillip-stephens in #634
- Add ManageSieve Module by @BMKprIT in #617
- build(deps): bump golang.org/x/crypto from 0.43.0 to 0.44.0 by @dependabot[bot] in #639
- build(deps): bump golang.org/x/net from 0.46.0 to 0.47.0 by @dependabot[bot] in #641
- build(deps): bump golang.org/x/crypto from 0.44.0 to 0.45.0 by @dependabot[bot] in #643
- build(deps): bump actions/checkout from 5 to 6 by @dependabot[bot] in #645
- build(deps): bump golangci/golangci-lint-action from 9.0.0 to 9.1.0 by @dependabot[bot] in #646
- Fix failing IPP/Cups integration test by @phillip-stephens in #649
- Fix bug with Oracle when used with multiple module by @phillip-stephens in #648
New Contributors
- @GQW19 made their first contribution in #627
- @merterdemir made their first contribution in #629
- @BMKprIT made their first contribution in #617
Full Changelog: v1.0.0-RC2...v1.0.0-RC3
v1.0.0-RC2
This RC2 v1 introduces HTTP/2 support, additional info in metadata, adding the port scanned in Scan Output, as well as upgrading a number of dependencies and bug fixes.
New Features
- Adds support for scanning servers that only support HTTP/2 and h2c (http2 over plain-text)
- Adds the port scanned to each output line. This is helpful when port can be defined as a tool-wide CLI flag, passed in as an input line, or defined differently for different modules in
multiplemodule scans and will help users disambiguate what was scanned - Adds more info to the metadata, specifically exactly what ZGrab2 CLI args were used for a scan.
Bug Fixes
- A regression was introduced in v0.2.0 where if a TLS handshake failed after collecting some info, only an error would be returned. The old behavior was that any info from the TLS handshake would be returned with the error, yielding more handshake details on these failing connections.
- Fixes an issue where the
Application Optionsfield on themultiplemodule wasn't being parsed correctly.
What's Changed
- build(deps): bump golang.org/x/net from 0.41.0 to 0.42.0 by @dependabot[bot] in #575
- replace blocked cloudflare.com test with working domain by @phillip-stephens in #585
- Fix "Application Options" mutliple module parsing by @phillip-stephens in #578
- Fix integration tests on Github Runner by @phillip-stephens in #586
- feat(http): add
SkipHostrequest option by @UnknownEclipse in #580 - feat(siemens): add custom readtimeout by flag by @zsbahtiar in #584
- build(deps): bump github.com/prometheus/client_golang from 1.22.0 to 1.23.0 by @dependabot[bot] in #587
- build(deps): bump golang.org/x/text from 0.27.0 to 0.28.0 by @dependabot[bot] in #593
- build(deps): bump golang.org/x/sys from 0.34.0 to 0.35.0 by @dependabot[bot] in #589
- build(deps): bump golang.org/x/crypto from 0.40.0 to 0.41.0 by @dependabot[bot] in #594
- build(deps): bump golang.org/x/net from 0.42.0 to 0.43.0 by @dependabot[bot] in #592
- Normalize scanning module variable usage by @Seanstoppable in #595
- build(deps): bump actions/download-artifact from 4 to 5 by @dependabot[bot] in #588
- build(deps): bump actions/checkout from 4 to 5 by @dependabot[bot] in #591
- Add port to ScanResponse output by @Seanstoppable in #596
- Bump minimum version for go to 1.24 by @phillip-stephens in #597
- build(deps): bump actions/setup-go from 5 to 6 by @dependabot[bot] in #605
- build(deps): bump golang.org/x/time from 0.12.0 to 0.13.0 by @dependabot[bot] in #600
- build(deps): bump github.com/prometheus/client_golang from 1.23.0 to 1.23.2 by @dependabot[bot] in #603
- build(deps): bump golang.org/x/sys from 0.35.0 to 0.36.0 by @dependabot[bot] in #601
- Make verbose a base flag by @Seanstoppable in #599
- build(deps): bump golang.org/x/text from 0.28.0 to 0.29.0 by @dependabot[bot] in #602
- build(deps): bump actions/attest-build-provenance from 2 to 3 by @dependabot[bot] in #604
- Add additional tests for http by @Seanstoppable in #606
- Phillip/98 metadata file improvements by @phillip-stephens in #607
- build(deps): bump golang.org/x/crypto from 0.41.0 to 0.42.0 by @dependabot[bot] in #610
- build(deps): bump golang.org/x/net from 0.43.0 to 0.44.0 by @dependabot[bot] in #609
- Update ZFlags by @phillip-stephens in #608
- Add support for HTTP/2 and HTTP/2 over clear-text by @phillip-stephens in #581
- build(deps): bump github.com/rogpeppe/go-internal from 1.10.0 to 1.14.1 by @dependabot[bot] in #612
- Return all the TLS handshake details we have even if handshake fails by @phillip-stephens in #613
New Contributors
- @zsbahtiar made their first contribution in #584
Full Changelog: v1.0.0-RC1...v1.0.0-RC2
v1.0.0-RC1
Announcing v1.0 of ZGrab2 in prerelease!
Assuming there's no regressions or bugs reported in the next month or so, we can tag a release version.
Major Changes
- Adds a DNS rate limiter and per-IP rate limiter. These can be used to cap the number of DNS and connections, respectively, a server will receive. Look at the
--helpfor--dns-rate-limitand--server-rate-limitfor more details - Adds a
memcachedscan module for scanning thememcachedprotocol. Thanks to @nicholasingino for this!
Improvements
- Adds CLI flag grouping and more detailed module descriptions in
--help - Adds non-TLS retry to Postgres scans to get servers that don't support TLS. Thanks @UnknownEclipse for this!
New Contributors
- @UnknownEclipse made their first contribution in #573
- @nicholasingino made their first contribution in #551
Full Changelog: v0.2.0...v1.0.0-RC1
v0.2.0
v0.2.0 includes quite a number of changes and improvements over v0.1.8. There were new features added and overall code quality improvements. The most important changes are outlined below.
Breaking Changes
- Addition of
dialerGroupto theScan()module API. This will let ZGrab be used as a library and let clients bring their own dialers/network connections. This theoretically would let you run any application protocol over any transport you want. In practice, several protocols are more tightly coupled and need both a TCP dialer, they'll exchange some info, and then establish a TLS connection. STARTTLS is an example of this. More info in #506. - Made the default behavior for
smtpmore reasonable where it can auto-detect support forEHLOvs.HELOin the banner as well asSTARTTLSsupport. Adds CLI override flags to specify behavior if user wishes to override. Removes --send-ehlo, --send-start-tls and --send-helo since these now auto-detect. Adds --send-X-override flags for overriding. #509
Major Changes/Improvements
- Categorizes the CLI flags for modules to group them into
Application Optionsthat affect all modules,Basic Optionsfor a module that they all share, and module-specific options. Will let users find the flag they need faster. See #479 - Fixed timeout behavior which would let scans run far longer than expected. Provides the user with
--connect-timeoutto control initial connection establishment and--target-timeoutto bound the runtime of a scan against a given input target. See #537 - User can specify
--local-addrand--local-portto bind 1+ IPs to for outgoing connections. See #519 - Changes IPv6 behavior to assume IPv4 and have IPv6 as an optional CLI flag
- Adds support for specifying 1+ DNS resolvers to use for lookups. Default behavior remains to use the OS configured defaults (
/etc/resolv.confon UNIX) See #556 - Add a ZMap-style blocklist. See #553
- Adds a ZMap-style per-second scan status print-out to give constant user feedback on how a scan is proceeding. See #528
New Modules
- AMQP 0.9.1
- PPTP
- MQTT
- socks5
All Changes
- Bump google.golang.org/protobuf from 1.30.0 to 1.33.0 by @dependabot in #414
- build: bump alpine from 3.19 to 3.20 by @dependabot in #442
- New Protocol: AMQP 0.9.1 by @developStorm in #426
- fixed typo in cleanup script by @phillip-stephens in #445
- docs: docker usage by @developStorm in #438
- Fix non-compilation in /lib/ssh/messages_test.go by @phillip-stephens in #446
- style: reformat all go files by @developStorm in #437
- Try to align golang around a single version by @Seanstoppable in #461
- Upgrade golang.org/x/crypto from 0.23.0 to 0.31.0 by @Seanstoppable in #476
- fix: failing ci tests by @developStorm in #478
- Group Basic/TLS Flag Groupings in Modules and interface{} -> any by @phillip-stephens in #479
- build(deps): bump github.com/prometheus/client_golang from 1.14.0 to 1.20.5 by @dependabot in #482
- build(deps): bump golang.org/x/crypto from 0.31.0 to 0.32.0 by @dependabot in #480
- Document the PORT field for CSV-format input by @dlenskiSB in #456
- Upgrade to go 1.23 by @thecsw in #466
- build(deps): bump alpine from 3.20 to 3.21 by @dependabot in #484
- build(deps): bump actions/attest-build-provenance from 1 to 2 by @dependabot in #483
- build(deps): bump docker/build-push-action from 5 to 6 by @dependabot in #453
- Update zgrab's python2 dependency to python3 by @phillip-stephens in #485
- Use bodyTextLen instead of readLen for FailHTTPToHTTPS logic by @Nirusu in #345
- Add support for PPTP by @AlexAQ972 in #470
- Make banner read options configurable via CLI by @svbatalov in #468
- Add support for MQTT v3.1.1 and v5.0 by @AlexAQ972 in #467
- Add support for socks5 by @AlexAQ972 in #471
- Fix ssh by @espegro in #335
- ssh: Port lib/ssh from x/crypto v0.7.0 by @TrueSkrillor in #399
- Bump ubuntu from 16.04 to 24.04 in /docker-runner by @dependabot in #430
- Update Golang minimum version/installation instructions by @phillip-stephens in #488
- Test Automation Performance Improvements + Streamlining by @phillip-stephens in #489
- build(deps): bump golang.org/x/sys from 0.29.0 to 0.30.0 by @dependabot in #490
- build(deps): bump golang.org/x/text from 0.21.0 to 0.22.0 by @dependabot in #491
- build(deps): bump golang.org/x/crypto from 0.32.0 to 0.33.0 by @dependabot in #492
- build(deps): bump golang.org/x/net from 0.34.0 to 0.35.0 by @dependabot in #493
- build(deps): bump github.com/prometheus/client_golang from 1.20.5 to 1.21.0 by @dependabot in #494
- Bump all dependencies by @phillip-stephens in #497
- Generate server certs for MQTT test container by @Seanstoppable in #505
- Don't disable
httpteeafter first header, so that headers of re-directs can be captured and we don't panic by @phillip-stephens in #504 - Upgrade the prometheus dependency by @phillip-stephens in #508
- Fix issues with running subset of integration tests by @phillip-stephens in #510
- Improve SMTP usability by @phillip-stephens in #509
- Add back in EHLO, HELO, and STARTTLS Overrides to SMTP by @phillip-stephens in #512
- Update the zcrypto dependency to bring in TLS 1.3 support by @phillip-stephens in #507
- build(deps): bump github.com/zmap/zcrypto to 4f0ea0eaccac by @developStorm in #513
- modbus - avoid array indexing out-of-bounds by @phillip-stephens in #514
- Fix SHA256 typo by @hegga in #515
- New DialerGroupConfig interface for modules to given greater control over connection (L4/TLS/etc) establishment by @phillip-stephens in #506
- WIP - Add large HTTP file integration test and remove --maxbytes by @phillip-stephens in #516
- Fix redirects not getting followed by @phillip-stephens in #518
- Use context.Deadline in addition to specified timeouts for connections by @phillip-stephens in #517
- build(deps): bump golang.org/x/crypto from 0.36.0 to 0.37.0 by @dependabot in #521
- Throw an error is all we got was a bunch of empty hashes for JARM by @Seanstoppable in #525
- Improve ZGrab Docs/
--helpby @phillip-stephens in #524 - Let user specify local addr(s) and/or local port(s) to be used for making connections by @phillip-stephens in #519
- Remove min() re-declarations by @phillip-stephens in #527
- Add a per-second status similar to ZDNS by @phillip-stephens in #528
- build(deps): bump golang.org/x/net from 0.38.0 to 0.39.0 by @dependabot in #529
- build(deps): bump github.com/prometheus/client_golang from 1.21.1 to 1.22.0 by @dependabot in #530
- Move setting global TLS parameters to init() so it's run once and -race won't complain by @phillip-stephens in #532
- Remove unused single local addr by @phillip-stephens in #531
- Stabilize conn timeout unit tests by @phillip-stephens in #536
- Fix Multiple Module regression by @phillip-stephens in #534
- Make timeout behavior user-changeable and easy-to-understand by @phillip-stephens in #537
- Downgrade to using v7 of redis, since v8 is buggy right now by @phillip-stephens in #539
- Give user IP that domain resolves to by @phillip-stephens in #533
- Fix timeout issue with setting ReadDeadline after conn creation by @phillip-stephens in #538
- Parse CAs file only if the file is different from last parsed by @phillip-stephens in #540
- Give accurate status for io-timeout by @phillip-stephens in #541
- build(deps): bump golang.org/x/sys from 0.32.0 to 0.33.0 by @dependabot in #543
- build(deps): bump golang.org/x/net from 0.39.0 to 0.40.0 by @dependabot in #545
- Add several linters to CI and fix found i...
v0.1.8
What's Changed
- Fix panics in Modbus scanner by @bwireman in #265
- ftp: Add support for implicit TLS by @codyprime in #264
- Ecubit/fix false positives in #262
- adds implicit tls bool to smtp result by @bwireman in #266
- Add option to compute http BodySHA256 on decoded BodyText by @twschum in #275
- [DATA-970] Increase buffer size in FTP scanner by @grace-murphy in #279
- telnet: Optionally return result even on error by @codyprime in #277
- improves http body decoding and enforces max length by @bwireman in #295
- fix for smtp module by @aspacewalz in #297
- Fix SMB scanner marshaller panic in #299
- Add option to flush output after each line of output by @cablej in #244
- fix issue 288 by @vl4deee11 in #289
- Fix null results in fox module by @vl4deee11 in #294
- Add NativeOS, NTLM, and GroupName to SMBv1 results in #286
- Feature/portable suites by @mzpqnxow in #302
- [BUGFIX] Set SNI on each redirect to avoid handshake failures / incorrect server name by @mzpqnxow in #306
- Specify arbitrary HTTP headers by @mzpqnxow in #284
- Read probe from file (hex probe support) by @AnthraX1 in #269
- Fix incorrect logging calls that don't do formatting by @Mindavi in #290
- preserve protocols order, specified in ini file for multiple mode by @Meteorite in #243
- Feature fail http to https for known status code and substrings by @mzpqnxow in #308
- First draft of GitHub Action by @engn33r in #309
- Added JARM fingerprinting module by @silascutler in #282
- Add error handling for FTP TLS handshake by @hmcguinn in #314
- README.md - minor typo correction by @TomSellers in #320
- smb: allow dynamic length fields of exact length in #323
- add jarm-go to go.mod by @hmcguinn in #321
- remove masking of s7 protocols errors by @hmcguinn in #322
- Adds --hex option to
bannermodule by @svbatalov in #325 - jarm: update jarm to not fail on handshake failure by @aspacewalz in #328
- Fix http module panic by @vl4deee11 in #327
- mongodb: Use OP_QUERY for buildinfo for wire proto < 6 by @dabdine in #330
- smb: fix panic in ntlmssp when unmarshaling by @codyprime in #333
- Fix link to schemas in README by @fileformat in #340
- Add brackets to IPv6 literals with standard ports in http module by @gigaryte in #329
- Add tls.Config to TLSFlags by @corny in #238
- ipp: nameLength should be uint16, not int16 by @codyprime in #350
- retry-https considered harmful: use original result when retry-https encounters an error by @Nirusu in #357
- Remove source IP option by @dadrian in #356
- Add mongodb dbnames by @dabdine in #332
- Make it a non-fatal error when EncodeGrab fails to marshal data by @jamadden in #355
- Add docker support by @creekorful in #354
- fix: typo in smtp scanner by @Tr4cer0 in #361
- fix: typo in smtp scanner by @MaineK00n in #376
- Add TLS support for redis by @ycamper in #374
- Bump golang.org/x/crypto from 0.0.0-20210322153248-0c34fe9e7dc2 to 0.1.0 by @dependabot in #373
- feat(http-request-body): allow users to specify a request body in the HTTP module by @lc in #380
- Bump golang.org/x/crypto from 0.7.0 to 0.17.0 by @dependabot in #402
- Add body support for invisible characters after encryption by @jiaocoll in #393
- Fixes various problems (mostly syntax) in tests by @duckfez in #391
- fix typo in mssql scanner by @dy7ss in #371
- New functionality for zgrab2-banner: md5, sha1, sha256, base64 by @crazylazyowl in #385
- Add tls output to banner when we have a tls connection by @Seanstoppable in #404
- Permissive TLS parsing by @Seanstoppable in #400
- Deal with non-RFC compliant servers by @ycamper in #375
- Add port number to CSV input and output by @AnthraX1 in #397
- Add Install Instructions for Go v17+ by @landxnsec in #382
- http: allow raw header capture (#347) by @codyprime in #349
- Update config.go by @L4puta in #421
- refactor: improve and align ftp tls error msg by @developStorm in #418
- Docs: Add Module Help Usage to README by @developStorm in #417
- Fix Parser for ModuleIdentificationRequest of s7 Protocol by @developStorm in #423
- Add support for custom DNS server by @developStorm in #422
- Add HaSSH to ssh output by @Seanstoppable in #412
- Fix build instructions by @Weltraumschaf in #383
- patch: getVersionNumber function by @developStorm in #425
- Build: Multi-platform Docker Builds and Integration Test by @developStorm in #428
- Bump actions/setup-go from 2 to 5 by @dependabot in #431
- Bump golang.org/x/sys from 0.15.0 to 0.20.0 by @dependabot in #436
- Bump alpine from 3.16 to 3.19 by @dependabot in #432
- Bump golang.org/x/net from 0.10.0 to 0.25.0 by @dependabot in #435
- Add test steps to build by @Seanstoppable in #411
- Fix tests and boundary condition by @Seanstoppable in #410
- fix: close CPU profile by @testwill in #416
- Add TLS support for fox by @Seanstoppable in #403
- Bump golang from 1.18.3-alpine3.16 to 1.20.4-alpine3.16 by @dependabot in #433
New Contributors
- @twschum made their first contribution in #275
- @grace-murphy made their first contribution in #279
- @aspacewalz made their first contribution in #297
- @cablej made their first contribution in #244
- @vl4deee11 made their first contribution in #289
- @Mindavi made their first contribution in #290
- @engn33r made their first contribution in #309
- @silascutler made their first contribution in #282
- @hmcguinn made their first contribution in #314
- @TomSellers made their first contribution in #320
- @svbatalov made their first contribution in #325
- @dabdine made their first contribution in #330
- @fileformat made their first contribution in #340
- @gigaryte made their first contribution in #329
- @Nirusu made their first contribution in #357
- @jamadden made their first contribution in #355
- @creekorful made their first contribution in #354
- @Tr4cer0 made their first contribution in #361
- @MaineK00n made their first contribution in #376
- @ycamper made their first contribution in #374
- @dependabot made their first contribution in #373
- @lc made their first contribution in #380
- @jiaocoll made their first contribution in #393
- @duckfez made their first contribution in #391
- @dy7ss made their first contribution in #371
- @crazylazyowl made their first contribution in #385
- @Seanstoppable made their first contribution in #404
- @landxnsec made their first co...
Allow for programaitc access of ssh result types
Makes some the types used in the SSH scanner's result exported
Namely:
- KexInitMsg
- Algorithms
- DirectionAlgorithms
v0.1.4
v0.1.2
Adds support for a custom "fake" DNS resolver that can optionally be added to a Dialer. The http scanner now uses the fake DNS resolver to force resolutions to a specified IP address, if both an IP address and domain name are specified in the scan. This fixes the issue where the http scanner would ignore the specified IP address if a domain name was specified.