-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* update to go 1.17 * more go 1.17 updates * update sponsors * update makefile * gitignore * remove todo * Fixed errors mixing with progress in stderr by removing progress string with \r * Added --retry option for dir, fuzz, s3 and vhost modes * first dev version * wording * fix retries * update help text * first work for #298 allow for a totalrequests change from within a plugin * use defer * ignore invalid control character urls * add goreleaser * gitignore * output color, better status printing * more color output * fix nil panics * Added support for Google Cloud Storage (GCS) bucket scanning. The scanning finds all public buckets listable by anonymous users * fix gcs module * update readme * go 1.18 * go mod tidy * makefile * readme * readme * better error message * use generics for set * use the new netip type * update version * colors * cspell * improve readability of GobusterVhost (#334) * improve readability of GobusterVhost * fix for the merge side effect * lint * update * update * more work * remove unused method * retries * colored output * Closes issue #349 (#356) * fix version * Closes issue #349 Co-authored-by: firefart <[email protected]> * Closes issue #315 (#359) * Closes issue #315 * Syntax fix * support mtls * readme * check for fuzz keyword * allow for http header fuzzing * better description * new option to not canonicalize header names * basic auth fuzzing * fix typo in vhost command (#361) * update * check error * error handling * dev * enable tls1.0 and 1.1 support * Bump golang.org/x/term from 0.1.0 to 0.2.0 (#369) Bumps [golang.org/x/term](https://github.com/golang/term) from 0.1.0 to 0.2.0. - [Release notes](https://github.com/golang/term/releases) - [Commits](golang/term@v0.1.0...v0.2.0) --- updated-dependencies: - dependency-name: golang.org/x/term dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump golang.org/x/crypto from 0.1.0 to 0.2.0 (#368) Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.1.0 to 0.2.0. - [Release notes](https://github.com/golang/crypto/releases) - [Commits](golang/crypto@v0.1.0...v0.2.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Adds LF after the work end (#373) * typo * Reformat: Add `\n` after the end Co-authored-by: firefart <[email protected]> * Bump golang.org/x/crypto from 0.2.0 to 0.3.0 (#374) Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.2.0 to 0.3.0. - [Release notes](https://github.com/golang/crypto/releases) - [Commits](golang/crypto@v0.2.0...v0.3.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump golang.org/x/crypto from 0.3.0 to 0.4.0 (#376) Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.3.0 to 0.4.0. - [Release notes](https://github.com/golang/crypto/releases) - [Commits](golang/crypto@v0.3.0...v0.4.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump actions/checkout from 3.1.0 to 3.2.0 (#377) Bumps [actions/checkout](https://github.com/actions/checkout) from 3.1.0 to 3.2.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v3.1.0...v3.2.0) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * add tftp mode * better output on tftp mode * Bump goreleaser/goreleaser-action from 3 to 4 (#378) Bumps [goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action) from 3 to 4. - [Release notes](https://github.com/goreleaser/goreleaser-action/releases) - [Commits](goreleaser/goreleaser-action@v3...v4) --- updated-dependencies: - dependency-name: goreleaser/goreleaser-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * readme Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: alexmozzhakov <[email protected]> Co-authored-by: Nicolas Lykke Iversen <[email protected]> Co-authored-by: Neal Caffery <[email protected]> Co-authored-by: n30nx <[email protected]> Co-authored-by: IPv4v6 <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: _Magenta_ <[email protected]>
- Loading branch information
1 parent
af6af44
commit 3bb2300
Showing
13 changed files
with
318 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
package cmd | ||
|
||
import ( | ||
"fmt" | ||
"log" | ||
"strings" | ||
"time" | ||
|
||
"github.com/OJ/gobuster/v3/cli" | ||
"github.com/OJ/gobuster/v3/gobustertftp" | ||
"github.com/OJ/gobuster/v3/libgobuster" | ||
"github.com/spf13/cobra" | ||
) | ||
|
||
// nolint:gochecknoglobals | ||
var cmdTFTP *cobra.Command | ||
|
||
func runTFTP(cmd *cobra.Command, args []string) error { | ||
globalopts, pluginopts, err := parseTFTPOptions() | ||
if err != nil { | ||
return fmt.Errorf("error on parsing arguments: %w", err) | ||
} | ||
|
||
plugin, err := gobustertftp.NewGobusterTFTP(globalopts, pluginopts) | ||
if err != nil { | ||
return fmt.Errorf("error on creating gobustertftp: %w", err) | ||
} | ||
|
||
if err := cli.Gobuster(mainContext, globalopts, plugin); err != nil { | ||
return fmt.Errorf("error on running gobuster: %w", err) | ||
} | ||
return nil | ||
} | ||
|
||
func parseTFTPOptions() (*libgobuster.Options, *gobustertftp.OptionsTFTP, error) { | ||
globalopts, err := parseGlobalOptions() | ||
if err != nil { | ||
return nil, nil, err | ||
} | ||
pluginOpts := gobustertftp.NewOptionsTFTP() | ||
|
||
pluginOpts.Server, err = cmdTFTP.Flags().GetString("server") | ||
if err != nil { | ||
return nil, nil, fmt.Errorf("invalid value for domain: %w", err) | ||
} | ||
|
||
if !strings.Contains(pluginOpts.Server, ":") { | ||
pluginOpts.Server = fmt.Sprintf("%s:69", pluginOpts.Server) | ||
} | ||
|
||
pluginOpts.Timeout, err = cmdTFTP.Flags().GetDuration("timeout") | ||
if err != nil { | ||
return nil, nil, fmt.Errorf("invalid value for timeout: %w", err) | ||
} | ||
|
||
return globalopts, pluginOpts, nil | ||
} | ||
|
||
// nolint:gochecknoinits | ||
func init() { | ||
cmdTFTP = &cobra.Command{ | ||
Use: "tftp", | ||
Short: "Uses TFTP enumeration mode", | ||
RunE: runTFTP, | ||
} | ||
|
||
cmdTFTP.Flags().StringP("server", "s", "", "The target TFTP server") | ||
cmdTFTP.Flags().DurationP("timeout", "", time.Second, "TFTP timeout") | ||
if err := cmdTFTP.MarkFlagRequired("server"); err != nil { | ||
log.Fatalf("error on marking flag as required: %v", err) | ||
} | ||
|
||
cmdTFTP.PersistentPreRun = func(cmd *cobra.Command, args []string) { | ||
configureGlobalOptions() | ||
} | ||
|
||
rootCmd.AddCommand(cmdTFTP) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
package gobustertftp | ||
|
||
import ( | ||
"bufio" | ||
"bytes" | ||
"context" | ||
"fmt" | ||
"strings" | ||
"text/tabwriter" | ||
|
||
"github.com/OJ/gobuster/v3/libgobuster" | ||
|
||
"github.com/pin/tftp/v3" | ||
) | ||
|
||
// GobusterTFTP is the main type to implement the interface | ||
type GobusterTFTP struct { | ||
globalopts *libgobuster.Options | ||
options *OptionsTFTP | ||
} | ||
|
||
// NewGobusterTFTP creates a new initialized NewGobusterTFTP | ||
func NewGobusterTFTP(globalopts *libgobuster.Options, opts *OptionsTFTP) (*GobusterTFTP, error) { | ||
if globalopts == nil { | ||
return nil, fmt.Errorf("please provide valid global options") | ||
} | ||
|
||
if opts == nil { | ||
return nil, fmt.Errorf("please provide valid plugin options") | ||
} | ||
|
||
g := GobusterTFTP{ | ||
options: opts, | ||
globalopts: globalopts, | ||
} | ||
return &g, nil | ||
} | ||
|
||
// Name should return the name of the plugin | ||
func (d *GobusterTFTP) Name() string { | ||
return "TFTP enumeration" | ||
} | ||
|
||
// PreRun is the pre run implementation of gobustertftp | ||
func (d *GobusterTFTP) PreRun(ctx context.Context) error { | ||
_, err := tftp.NewClient(d.options.Server) | ||
if err != nil { | ||
return err | ||
} | ||
return nil | ||
} | ||
|
||
// ProcessWord is the process implementation of gobustertftp | ||
func (d *GobusterTFTP) ProcessWord(ctx context.Context, word string, progress *libgobuster.Progress) error { | ||
c, err := tftp.NewClient(d.options.Server) | ||
if err != nil { | ||
return err | ||
} | ||
c.SetTimeout(d.options.Timeout) | ||
wt, err := c.Receive(word, "octet") | ||
if err != nil { | ||
// file not found | ||
if d.globalopts.Verbose { | ||
progress.ResultChan <- Result{ | ||
Filename: word, | ||
Found: false, | ||
ErrorMessage: err.Error(), | ||
} | ||
} | ||
|
||
return nil | ||
} | ||
result := Result{ | ||
Filename: word, | ||
Found: true, | ||
} | ||
if n, ok := wt.(tftp.IncomingTransfer).Size(); ok { | ||
result.Size = n | ||
} | ||
progress.ResultChan <- result | ||
return nil | ||
} | ||
|
||
func (d *GobusterTFTP) AdditionalWords(word string) []string { | ||
return []string{} | ||
} | ||
|
||
// GetConfigString returns the string representation of the current config | ||
func (d *GobusterTFTP) GetConfigString() (string, error) { | ||
var buffer bytes.Buffer | ||
bw := bufio.NewWriter(&buffer) | ||
tw := tabwriter.NewWriter(bw, 0, 5, 3, ' ', 0) | ||
o := d.options | ||
|
||
if _, err := fmt.Fprintf(tw, "[+] Server:\t%s\n", o.Server); err != nil { | ||
return "", err | ||
} | ||
|
||
if _, err := fmt.Fprintf(tw, "[+] Threads:\t%d\n", d.globalopts.Threads); err != nil { | ||
return "", err | ||
} | ||
|
||
if d.globalopts.Delay > 0 { | ||
if _, err := fmt.Fprintf(tw, "[+] Delay:\t%s\n", d.globalopts.Delay); err != nil { | ||
return "", err | ||
} | ||
} | ||
|
||
if _, err := fmt.Fprintf(tw, "[+] Timeout:\t%s\n", o.Timeout.String()); err != nil { | ||
return "", err | ||
} | ||
|
||
wordlist := "stdin (pipe)" | ||
if d.globalopts.Wordlist != "-" { | ||
wordlist = d.globalopts.Wordlist | ||
} | ||
if _, err := fmt.Fprintf(tw, "[+] Wordlist:\t%s\n", wordlist); err != nil { | ||
return "", err | ||
} | ||
|
||
if d.globalopts.PatternFile != "" { | ||
if _, err := fmt.Fprintf(tw, "[+] Patterns:\t%s (%d entries)\n", d.globalopts.PatternFile, len(d.globalopts.Patterns)); err != nil { | ||
return "", err | ||
} | ||
} | ||
|
||
if d.globalopts.Verbose { | ||
if _, err := fmt.Fprintf(tw, "[+] Verbose:\ttrue\n"); err != nil { | ||
return "", err | ||
} | ||
} | ||
|
||
if err := tw.Flush(); err != nil { | ||
return "", fmt.Errorf("error on tostring: %w", err) | ||
} | ||
|
||
if err := bw.Flush(); err != nil { | ||
return "", fmt.Errorf("error on tostring: %w", err) | ||
} | ||
|
||
return strings.TrimSpace(buffer.String()), nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package gobustertftp | ||
|
||
import ( | ||
"time" | ||
) | ||
|
||
// OptionsTFTP holds all options for the tftp plugin | ||
type OptionsTFTP struct { | ||
Server string | ||
Timeout time.Duration | ||
} | ||
|
||
// NewOptionsTFTP returns a new initialized OptionsTFTP | ||
func NewOptionsTFTP() *OptionsTFTP { | ||
return &OptionsTFTP{} | ||
} |
Oops, something went wrong.