ffuf

package
v1.1.1-0...-cd6c8f0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 22, 2020 License: MIT Imports: 24 Imported by: 0

Documentation

Index

Constants

View Source
const (
	//VERSION holds the current version number
	VERSION = "1.2.0-git"
)

Variables

This section is empty.

Functions

func FileExists

func FileExists(path string) bool

FileExists checks if the filepath exists and is not a directory

func GetDbClient

func GetDbClient() *scribble.Driver

func RandomString

func RandomString(n int) string

RandomString returns a random string of length of parameter n

func ReturnAll

func ReturnAll(db *scribble.Driver, folder string) []string

func ReturnTmpFolder

func ReturnTmpFolder(conf *Config) string

func UniqStringSlice

func UniqStringSlice(inslice []string) []string

UniqStringSlice returns an unordered slice of unique strings. The duplicates are dropped

func UpdateDB

func UpdateDB(db *scribble.Driver, folder string, name string, results ResultDB)

Types

type Config

type Config struct {
	AutoCalibration        bool                      `json:"autocalibration"`
	AutoCalibrationStrings []string                  `json:"autocalibration_strings"`
	Cancel                 context.CancelFunc        `json:"-"`
	Colors                 bool                      `json:"colors"`
	CommandKeywords        []string                  `json:"-"`
	CommandLine            string                    `json:"cmdline"`
	ConfigFile             string                    `json:"configfile"`
	Context                context.Context           `json:"-"`
	Data                   string                    `json:"postdata"`
	Delay                  optRange                  `json:"delay"`
	DirSearchCompat        bool                      `json:"dirsearch_compatibility"`
	Extensions             []string                  `json:"extensions"`
	Filters                map[string]FilterProvider `json:"filters"`
	FollowRedirects        bool                      `json:"follow_redirects"`
	Headers                map[string]string         `json:"headers"`
	IgnoreBody             bool                      `json:"ignorebody"`
	IgnoreWordlistComments bool                      `json:"ignore_wordlist_comments"`
	InputMode              string                    `json:"inputmode"`
	InputNum               int                       `json:"cmd_inputnum"`
	InputProviders         []InputProviderConfig     `json:"inputproviders"`
	Matchers               map[string]FilterProvider `json:"matchers"`
	MaxTime                int                       `json:"maxtime"`
	MaxTimeJob             int                       `json:"maxtime_job"`
	Method                 string                    `json:"method"`
	OutputDirectory        string                    `json:"outputdirectory"`
	OutputFile             string                    `json:"outputfile"`
	OutputFormat           string                    `json:"outputformat"`
	OutputCreateEmptyFile  bool                      `json:"OutputCreateEmptyFile"`
	OutputSaveToDB         bool                      `json:"OutputSaveToDB"`
	OutputFilter           bool                      `json:"OutputFilter"`

	ProgressFrequency int    `json:"-"`
	ProxyURL          string `json:"proxyurl"`
	Quiet             bool   `json:"quiet"`
	Rate              int64  `json:"rate"`
	Recursion         bool   `json:"recursion"`
	RecursionDepth    int    `json:"recursion_depth"`
	ReplayProxyURL    string `json:"replayproxyurl"`
	StopOn403         bool   `json:"stop_403"`
	StopOnAll         bool   `json:"stop_all"`
	StopOnErrors      bool   `json:"stop_errors"`
	Threads           int    `json:"threads"`
	Timeout           int    `json:"timeout"`
	Url               string `json:"url"`
	Verbose           bool   `json:"verbose"`

	Waf1 bool `json:"waf1"`
	Waf2 bool `json:"waf2"`
}

func ConfigFromOptions

func ConfigFromOptions(parseOpts *ConfigOptions, ctx context.Context, cancel context.CancelFunc) (*Config, error)

ConfigFromOptions parses the values in ConfigOptions struct, ensures that the values are sane, and creates a Config struct out of them.

func NewConfig

func NewConfig(ctx context.Context, cancel context.CancelFunc) Config

func (*Config) SetContext

func (c *Config) SetContext(ctx context.Context, cancel context.CancelFunc)

type ConfigOptions

type ConfigOptions struct {
	Filter  FilterOptions
	General GeneralOptions
	HTTP    HTTPOptions
	Input   InputOptions
	Matcher MatcherOptions
	Output  OutputOptions
}

func NewConfigOptions

func NewConfigOptions() *ConfigOptions

NewConfigOptions returns a newly created ConfigOptions struct with default values

func ReadConfig

func ReadConfig(configFile string) (*ConfigOptions, error)

func ReadDefaultConfig

func ReadDefaultConfig() (*ConfigOptions, error)

type FilterOptions

type FilterOptions struct {
	Lines  string
	Regexp string
	Size   string
	Status string
	Words  string
}

type FilterProvider

type FilterProvider interface {
	Filter(response *Response) (bool, error)
	Repr() string
}

FilterProvider is a generic interface for both Matchers and Filters

type GeneralOptions

type GeneralOptions struct {
	AutoCalibration        bool
	AutoCalibrationStrings []string
	Colors                 bool
	ConfigFile             string `toml:"-"`
	Delay                  string
	MaxTime                int
	MaxTimeJob             int
	Quiet                  bool
	Rate                   int
	ShowVersion            bool `toml:"-"`
	StopOn403              bool
	StopOnAll              bool
	StopOnErrors           bool
	Threads                int
	Verbose                bool

	Waf1 bool
	Waf2 bool
}

type HTTPOptions

type HTTPOptions struct {
	Cookies         []string
	Data            string
	FollowRedirects bool
	Headers         []string
	IgnoreBody      bool
	Method          string
	ProxyURL        string
	Recursion       bool
	RecursionDepth  int
	ReplayProxyURL  string
	Timeout         int
	URL             string
}

type InputOptions

type InputOptions struct {
	DirSearchCompat        bool
	Extensions             string
	IgnoreWordlistComments bool
	InputMode              string
	InputNum               int
	Inputcommands          []string
	Request                string
	RequestProto           string
	Wordlists              []string
}

type InputProvider

type InputProvider interface {
	AddProvider(InputProviderConfig) error
	Next() bool
	Position() int
	Reset()
	Value() map[string][]byte
	Total() int
}

InputProvider interface handles the input data for RunnerProvider

type InputProviderConfig

type InputProviderConfig struct {
	Name    string `json:"name"`
	Keyword string `json:"keyword"`
	Value   string `json:"value"`
}

type InternalInputProvider

type InternalInputProvider interface {
	Keyword() string
	Next() bool
	Position() int
	ResetPosition()
	IncrementPosition()
	Value() []byte
	Total() int
}

InternalInputProvider interface handles providing input data to InputProvider

type Job

type Job struct {
	Config               *Config
	ErrorMutex           sync.Mutex
	Input                InputProvider
	Runner               RunnerProvider
	ReplayRunner         RunnerProvider
	Output               OutputProvider
	Counter              int
	ErrorCounter         int
	SpuriousErrorCounter int
	Total                int
	Running              bool
	RunningJob           bool
	Count403             int
	Count429             int
	Error                string
	Rate                 *RateThrottle
	// contains filtered or unexported fields
}

Job ties together Config, Runner, Input and Output

func NewJob

func NewJob(conf *Config) *Job

func (*Job) CalibrateResponses

func (j *Job) CalibrateResponses() ([]Response, error)

CalibrateResponses returns slice of Responses for randomly generated filter autocalibration requests

func (*Job) CheckStop

func (j *Job) CheckStop()

CheckStop stops the job if stopping conditions are met

func (*Job) Next

func (j *Job) Next()

Stop current, resume to next

func (*Job) Start

func (j *Job) Start()

Start the execution of the Job

func (*Job) Stop

func (j *Job) Stop()

Stop the execution of the Job

type MatcherOptions

type MatcherOptions struct {
	Lines  string
	Regexp string
	Size   string
	Status string
	Words  string
}

type Multierror

type Multierror struct {
	// contains filtered or unexported fields
}

func NewMultierror

func NewMultierror() Multierror

NewMultierror returns a new Multierror

func (*Multierror) Add

func (m *Multierror) Add(err error)

func (*Multierror) ErrorOrNil

func (m *Multierror) ErrorOrNil() error

type OutputOptions

type OutputOptions struct {
	DebugLog              string
	OutputDirectory       string
	OutputFile            string
	OutputFormat          string
	OutputCreateEmptyFile bool
	OutputSaveToDB        bool
	OutputFilter          bool
}

type OutputProvider

type OutputProvider interface {
	Banner()
	Finalize() error
	Progress(status Progress)
	Info(infostring string)
	Error(errstring string)
	Warning(warnstring string)
	Result(resp Response)
	SaveToUseLater(resp Response)
}

OutputProvider is responsible of providing output from the RunnerProvider

type Progress

type Progress struct {
	StartedAt  time.Time
	ReqCount   int
	ReqTotal   int
	ReqSec     int64
	QueuePos   int
	QueueTotal int
	ErrorCount int
}

type QueueJob

type QueueJob struct {
	Url string
	// contains filtered or unexported fields
}

type RateThrottle

type RateThrottle struct {
	RateAdjustment    float64
	RateAdjustmentPos int
	Config            *Config
	RateMutex         sync.Mutex
	// contains filtered or unexported fields
}

func NewRateThrottle

func NewRateThrottle(conf *Config) *RateThrottle

func (*RateThrottle) Adjust

func (r *RateThrottle) Adjust()

Adjust changes the RateAdjustment value, which is multiplier of second to pause between requests in a thread

func (*RateThrottle) CurrentRate

func (r *RateThrottle) CurrentRate() int64

CurrentRate calculates requests/second value from circular list of rate

func (*RateThrottle) Throttle

func (r *RateThrottle) Throttle()

func (*RateThrottle) Tick

func (r *RateThrottle) Tick(start, end time.Time)

rateTick adds a new duration measurement tick to rate counter

type Request

type Request struct {
	Method   string
	Host     string
	Url      string
	Headers  map[string]string
	Data     []byte
	Input    map[string][]byte
	Position int
	Raw      string
}

Request holds the meaningful data that is passed for runner for making the query

func NewRequest

func NewRequest(conf *Config) Request

type Response

type Response struct {
	StatusCode    int64
	Headers       map[string][]string
	Data          []byte
	ContentLength int64
	ContentWords  int64
	ContentLines  int64
	ContentClean  int64
	Cancelled     bool
	Request       *Request
	Raw           string
	ResultFile    string
}

Response struct holds the meaningful data returned from request and is meant for passing to filters

func NewResponse

func NewResponse(httpresp *http.Response, req *Request) Response

func (*Response) GetRedirectLocation

func (resp *Response) GetRedirectLocation(absolute bool) string

GetRedirectLocation returns the redirect location for a 3xx redirect HTTP response

type ResultDB

type ResultDB struct {
	Rname          string   `json:"rname"`
	RstatusCode    int64    `json:"rstatus"`
	RContentLength int64    `json:"rlength"`
	RContentWords  int64    `json:"rwords"`
	RContentLines  int64    `json:"rlines"`
	RcleanLen      int64    `json:"rlen"`
	OriginalRes    Response `json:"response"`
}

type RunnerProvider

type RunnerProvider interface {
	Prepare(input map[string][]byte) (Request, error)
	Execute(req *Request) (Response, error)
}

RunnerProvider is an interface for request executors

type ValueRange

type ValueRange struct {
	Min, Max int64
}

func ValueRangeFromString

func ValueRangeFromString(instr string) (ValueRange, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL