katnip.legos.url module

URL legos, based on RFC 1738 and others this module containes a basic URL lego, as well as the following specific scheme: HTTP, HTTPS, FTP, FTPS

Todo

URL fragments

class katnip.legos.url.DecimalNumber(value, num_bits=64, signed=False, fuzzable=True, name=None)

Bases: kitty.model.low_level.container.OneOf

Decimal number fuzzing. It’s main strategy is to fuzz both values (integer vulnerabilities) and format (string vulnerabilities).

__init__(value, num_bits=64, signed=False, fuzzable=True, name=None)
Parameters:
  • value – default integer value
  • num_bits – number of bit in the integer (default: 64)
  • signed – can the value be negative (default: False)
  • fuzzable – should fuzz the container (default: True)
  • name – name of container (default: None)
class katnip.legos.url.EmailAddress(username, hostname, fuzz_delim=True, fuzzable=True, name=None)

Bases: kitty.model.low_level.container.Container

Container to fuzz email address

__init__(username, hostname, fuzz_delim=True, fuzzable=True, name=None)
Parameters:
  • username – email username
  • hostname – email hostname
  • fuzz_delim – should fuzz the delimiter (default: True)
  • fuzzable – is the container fuzzable (default: True)
  • name – name of the container (default: None)
classmethod from_string(the_str, fuzz_delims=True, fuzzable=True, name=None)
class katnip.legos.url.EmailUrl(email, scheme='mailto', fuzz_scheme=True, fuzz_user=True, fuzz_host=True, fuzz_delim=True, fuzzable=True, name=None)

Bases: katnip.legos.url.Url

__init__(email, scheme='mailto', fuzz_scheme=True, fuzz_user=True, fuzz_host=True, fuzz_delim=True, fuzzable=True, name=None)
Parameters:
  • email (EmailAddress) – the email address
  • scheme – URL scheme (default: ‘mailto’)
  • fuzz_scheme – should fuzz the URL scheme (default: True)
  • fuzz_user – should fuzz the username (default: True)
  • fuzz_host – should fuzz the host (default: True)
  • fuzz_delim – should fuzz the delimiter (default: True)
  • fuzzable – is the container fuzzable (default: True)
  • name – name of the container (default: None)
classmethod from_string(the_url, fuzz_delims=True, fuzzable=True, name=None)
class katnip.legos.url.FType(the_type, fuzz_delims=True, fuzzable=True, name=None)

Bases: kitty.model.low_level.container.Container

Container to fuzz the FTP Type of FTP URL

ftptype        = "A" | "I" | "D" | "a" | "i" | "d"
__init__(the_type, fuzz_delims=True, fuzzable=True, name=None)
Parameters:
  • the_type (str) – the FTP type
  • fuzz_delims – should fuzz delimiters (default: True)
  • fuzzable – is the container fuzzable (default: True)
  • name – name of the container (default: None)
class katnip.legos.url.FtpUrl(scheme='ftp', login=None, hostport=None, path=None, ftype=None, fuzz_scheme=True, fuzz_delims=True, fuzzable=True, name=None)

Bases: katnip.legos.url.Url

Container to fuzz FTP URLs

ftpurl         = "ftp://" login [ "/" fpath [ ";type=" ftptype ]]
fpath          = fsegment *[ "/" fsegment ]
fsegment       = *[ uchar | "?" | ":" | "@" | "&" | "=" ]
ftptype        -> see FType
__init__(scheme='ftp', login=None, hostport=None, path=None, ftype=None, fuzz_scheme=True, fuzz_delims=True, fuzzable=True, name=None)
Parameters:
  • scheme – URL scheme name (default: ‘ftp’)
  • login (instance of BaseField recommend using Login) – the login information (default: None)
  • hostport (katnip.legos.url.HostPort object (default: None)) – FTP host and port
  • path (katnip.legos.url.Path object (default: None)) – file path
  • ftype (katnip.legos.url.FType object (default: None)) – FTP type
  • fuzz_scheme – should fuzz the URL scheme (default: True)
  • fuzz_delims – should fuzz the delimiters (default: True)
  • fuzzable – is the container fuzzable (default: True)
  • name – name of the container (default: None)
classmethod from_string(the_url, fuzz_delims=True, fuzzable=True, name=None)

Create an FtpUrl Lego from string

Parameters:
  • the_url – the url string
  • fuzz_delims – should fuzz delimiters (default: True)
  • fuzzable – is the container fuzzable (default: True)
  • name – name of the container (default: None)
class katnip.legos.url.HostName(host='', fuzz_delims=False, fuzzable=True, name=None)

Bases: kitty.model.low_level.container.Container

Container to fuzz the hostname

host           = hostname | hostnumber
hostname       = *[ domainlabel "." ] toplabel
__init__(host='', fuzz_delims=False, fuzzable=True, name=None)
Parameters:
  • host (str) – hostname (default: ‘’)
  • fuzz_delims – should fuzz the delimiters (default: False)
  • fuzzable – should fuzz the container (default: True)
  • name – name of container (default: None)
class katnip.legos.url.HostPort(host, port=None, fuzz_host=True, fuzz_port=True, fuzz_delim=True, fuzzable=True, name=None)

Bases: kitty.model.low_level.container.Container

Container for fuzzing the host/port of the URL.

hostport       = host [ ":" port ]
port           = digits
__init__(host, port=None, fuzz_host=True, fuzz_port=True, fuzz_delim=True, fuzzable=True, name=None)
Parameters:
  • host (str or instance of BaseField recommend using HostName) – hostname
  • port – port number (default: None)
  • fuzz_host – should fuzz the hostname (default: True)
  • fuzz_port – should fuzz the port (default: True)
  • fuzz_delim – should fuzz the delimiter (default: True)
  • fuzzable – should fuzz the container (default: True)
  • name – name of container (default: None)
class katnip.legos.url.HttpUrl(scheme='http', login=None, hostport=None, path=None, search=None, fuzz_scheme=True, fuzz_delims=True, fuzzable=True, name=None)

Bases: katnip.legos.url.Url

Container to fuzz Http(s) URL

httpurl        = "http://" hostport [ "/" hpath [ "?" search ]]
hpath          = hsegment *[ "/" hsegment ]
hsegment       = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
search         = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
__init__(scheme='http', login=None, hostport=None, path=None, search=None, fuzz_scheme=True, fuzz_delims=True, fuzzable=True, name=None)
Parameters:
  • scheme – URL scheme name (default: ‘http’)
  • login (instance of BaseField recommend using Login) – the login information (default: None)
  • hostportkatnip.legos.url.HostPort object, must be set (default: None)
  • path – Path object (default: None)
  • search – Search object (default: None)
  • fuzz_scheme – should fuzz the URL scheme (default: True)
  • fuzz_delims – should fuzz the delimiters (default: True)
  • fuzzable – is the container fuzzable (default: True)
  • name – name of the container (default: None)
classmethod from_string(the_url, fuzz_delims=True, fuzzable=True, name=None)

Create an HttpUrl Lego from string

Parameters:
  • the_url – the url string
  • fuzz_delims – should fuzz delimiters (default: True)
  • fuzzable – is the container fuzzable (default: True)
  • name – name of the container (default: None)
class katnip.legos.url.IpUrl(scheme, login, url_path=None, fuzz_scheme=True, fuzz_login=True, fuzz_delims=True, fuzzable=True, name=None)

Bases: katnip.legos.url.Url

IP-based URL

ip-schemepart  = "//" login [ "/" urlpath ]
login -> see Login class
alphadigit     = alpha | digit
hostnumber     = digits "." digits "." digits "." digits
user           = *[ uchar | ";" | "?" | "&" | "=" ]
password       = *[ uchar | ";" | "?" | "&" | "=" ]
urlpath        = *xchar    ; depends on protocol see section 3.1
__init__(scheme, login, url_path=None, fuzz_scheme=True, fuzz_login=True, fuzz_delims=True, fuzzable=True, name=None)
Parameters:
  • scheme (str or instance of BaseField) – url scheme
  • login (str or instance of BaseField recommend using Login) – the login information
  • url_path – the url path (default: None)
  • fuzz_scheme – should fuzz scheme (default: True)
  • fuzz_login – should fuzz login (default: True)
  • fuzz_delims – should fuzz delimiters (default: True)
  • fuzzable – should fuzz the container (default: True)
  • name – name of container (default: None)
class katnip.legos.url.Login(username=None, password=None, fuzz_username=True, fuzz_password=True, fuzz_delims=True, fuzzable=True, name=None)

Bases: kitty.model.low_level.container.Container

Container to fuzz the login part of the URL

login          = [ user [ ":" password ] "@" ]
__init__(username=None, password=None, fuzz_username=True, fuzz_password=True, fuzz_delims=True, fuzzable=True, name=None)
Parameters:
  • username – user name (default: None)
  • password – password (default: None)
  • fuzz_username – should fuzz username (default: True)
  • fuzz_password – should fuzz password (default: True)
  • fuzz_delims – should fuzz delimiters (default: True)
  • fuzzable – should fuzz the container (default: True)
  • name – name of container (default: None)
class katnip.legos.url.Path(path=None, path_delim='/', fuzz_delims=True, fuzzable=True, name=None)

Bases: kitty.model.low_level.container.Container

Container to fuzz the path of the URL

__init__(path=None, path_delim='/', fuzz_delims=True, fuzzable=True, name=None)
Parameters:
  • path (str) – path string
  • path_delim – delimiter in the path str
  • fuzz_delims – should fuzz the delimiters (default: False)
  • name – name of container (default: None)
  • fuzzable – should fuzz the container (default: True)
class katnip.legos.url.Search(search='', fuzz_delims=False, fuzzable=True, name=None)

Bases: kitty.model.low_level.container.Container

Container to fuzz the search part of the URL

Todo

real implementation (parse search string etc.)

__init__(search='', fuzz_delims=False, fuzzable=True, name=None)
Parameters:
  • search – search string (default: ‘’)
  • fuzz_delims – should fuzz the delimiters (default: False)
  • name – name of container (default: None)
  • fuzzable – should fuzz the container (default: True)
class katnip.legos.url.Url(scheme, parts, fuzz_scheme=True, fuzz_parts=True, fuzz_delim=True, fuzzable=True, name=None)

Bases: kitty.model.low_level.container.Container

Base container for fuzzing URLs.

genericurl = scheme ":" schemepart
__init__(scheme, parts, fuzz_scheme=True, fuzz_parts=True, fuzz_delim=True, fuzzable=True, name=None)
Parameters:
  • scheme (str or instance of BaseField) – url scheme
  • parts (str or instance of BaseField) – url parts (i.e. content)
  • fuzz_scheme – should fuzz scheme (default: True)
  • fuzz_parts – should fuzz parts (default: True)
  • fuzz_delim – should fuzz delimiters (default: True)
  • fuzzable – should fuzz the container (default: True)
  • name – name of container (default: None)
katnip.legos.url.url_from_string(url, fuzz_delims=True, fuzzable=True, name=None)

Create a URL from string, only URLs with supported schemes will result in a lego. In the rest of the cases, an exception will be raised.

Parameters:
  • url – the URL string
  • fuzz_delims – should fuzz delimiters (default: True)
  • fuzzable – should the resulted container be fuzzable (default: True)
  • name – name of the resulted container (default: None)