1
1
Fork 0
mirror of https://github.com/OJ/gobuster.git synced 2024-05-06 11:16:05 +02:00
gobuster/gobustertftp/gobustertftp.go
Christian Mehlmauer 3bb230056c
Dev (#379)
* 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 <firefart@gmail.com>

* 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](https://github.com/golang/term/compare/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] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
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](https://github.com/golang/crypto/compare/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] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
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 <105281+firefart@users.noreply.github.com>

* 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](https://github.com/golang/crypto/compare/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] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
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](https://github.com/golang/crypto/compare/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] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
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](https://github.com/actions/checkout/compare/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] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
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](https://github.com/goreleaser/goreleaser-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: goreleaser/goreleaser-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* readme

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: alexmozzhakov <5459149+alexmozzhakov@users.noreply.github.com>
Co-authored-by: Nicolas Lykke Iversen <nlykkei@gmail.com>
Co-authored-by: Neal Caffery <neal1991@sina.com>
Co-authored-by: n30nx <22144985+n30nx@users.noreply.github.com>
Co-authored-by: IPv4v6 <mail.ipv4v6@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: _Magenta_ <0_magenta_0@mail.ru>
2022-12-19 11:47:58 +01:00

143 lines
3.2 KiB
Go

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
}