81 lines
2.0 KiB
Go
81 lines
2.0 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"strings"
|
|
"time"
|
|
|
|
"git.sual.in/casual/gobuster-lib/cli"
|
|
"git.sual.in/casual/gobuster-lib/gobustertftp"
|
|
"git.sual.in/casual/gobuster-lib/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)
|
|
}
|
|
|
|
log := libgobuster.NewLogger(globalopts.Debug)
|
|
if _,err := cli.Gobuster(mainContext, globalopts, plugin, log); err != nil {
|
|
log.Debugf("%#v", err)
|
|
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)
|
|
}
|