ronin-support 0.5.1 → 1.0.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.editorconfig +11 -0
- data/.github/workflows/ruby.yml +27 -0
- data/.gitignore +7 -6
- data/.mailmap +1 -0
- data/.ruby-version +1 -0
- data/.yardopts +1 -2
- data/ChangeLog.md +533 -137
- data/Gemfile +20 -20
- data/README.md +137 -61
- data/Rakefile +29 -10
- data/data/text/homoglyphs/ascii.txt +8 -0
- data/data/text/homoglyphs/cyrillic.txt +33 -0
- data/data/text/homoglyphs/full_width.txt +81 -0
- data/data/text/homoglyphs/greek.txt +21 -0
- data/data/text/homoglyphs/latin_numbers.txt +14 -0
- data/data/text/homoglyphs/punctuation.txt +7 -0
- data/data/text/patterns/network/public_suffix.rb.erb +44 -0
- data/examples/ssl_proxy.rb +38 -0
- data/examples/tcp_proxy.rb +41 -0
- data/gemspec.yml +25 -15
- data/lib/ronin/support/archive/core_ext/file.rb +118 -0
- data/lib/ronin/{formatting/sql.rb → support/archive/core_ext.rb} +6 -7
- data/lib/ronin/support/archive/mixin.rb +213 -0
- data/lib/ronin/support/archive/tar/reader.rb +135 -0
- data/lib/ronin/support/archive/tar/writer.rb +197 -0
- data/lib/ronin/support/archive/tar.rb +155 -0
- data/lib/ronin/support/archive/zip/reader/entry.rb +134 -0
- data/lib/ronin/support/archive/zip/reader/statistics.rb +76 -0
- data/lib/ronin/support/archive/zip/reader.rb +273 -0
- data/lib/ronin/support/archive/zip/writer.rb +175 -0
- data/lib/ronin/support/archive/zip.rb +105 -0
- data/lib/ronin/support/archive.rb +211 -0
- data/lib/ronin/support/binary/array.rb +255 -0
- data/lib/ronin/support/binary/bit_flip.rb +147 -0
- data/lib/ronin/support/binary/buffer.rb +2027 -0
- data/lib/ronin/support/binary/byte_slice.rb +324 -0
- data/lib/ronin/support/binary/core_ext/array.rb +75 -0
- data/lib/ronin/support/binary/core_ext/float.rb +80 -0
- data/lib/ronin/support/binary/core_ext/integer.rb +305 -0
- data/lib/ronin/support/binary/core_ext/io.rb +38 -0
- data/lib/ronin/support/binary/core_ext/string.rb +115 -0
- data/lib/ronin/{formatting/extensions/text.rb → support/binary/core_ext.rb} +9 -9
- data/lib/ronin/support/binary/cstring.rb +259 -0
- data/lib/ronin/support/binary/ctypes/aggregate_type.rb +98 -0
- data/lib/ronin/support/binary/ctypes/arch/arm/big_endian.rb +77 -0
- data/lib/ronin/support/binary/ctypes/arch/arm.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/arm64/big_endian.rb +77 -0
- data/lib/ronin/support/binary/ctypes/arch/arm64.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/mips/little_endian.rb +77 -0
- data/lib/ronin/support/binary/ctypes/arch/mips.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/mips64/little_endian.rb +77 -0
- data/lib/ronin/support/binary/ctypes/arch/mips64.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/ppc.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/ppc64.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/x86.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch/x86_64.rb +75 -0
- data/lib/ronin/support/binary/ctypes/arch.rb +30 -0
- data/lib/ronin/support/binary/ctypes/array_object_type.rb +164 -0
- data/lib/ronin/support/binary/ctypes/array_type.rb +232 -0
- data/lib/ronin/support/binary/ctypes/big_endian.rb +195 -0
- data/lib/ronin/support/binary/ctypes/char_type.rb +59 -0
- data/lib/ronin/support/binary/ctypes/char_types.rb +39 -0
- data/lib/ronin/support/binary/ctypes/enum_type.rb +181 -0
- data/lib/ronin/support/binary/ctypes/float32_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/float64_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/float_type.rb +62 -0
- data/lib/ronin/support/binary/ctypes/int16_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/int32_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/int64_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/int8_type.rb +41 -0
- data/lib/ronin/support/binary/ctypes/int_type.rb +62 -0
- data/lib/ronin/support/binary/ctypes/little_endian.rb +195 -0
- data/lib/ronin/support/binary/ctypes/mixin.rb +135 -0
- data/lib/ronin/support/binary/ctypes/native.rb +205 -0
- data/lib/ronin/support/binary/ctypes/network.rb +29 -0
- data/lib/ronin/support/binary/ctypes/object_type.rb +55 -0
- data/lib/ronin/support/binary/ctypes/os/bsd.rb +65 -0
- data/lib/ronin/support/binary/ctypes/os/freebsd.rb +215 -0
- data/lib/ronin/support/binary/ctypes/os/linux.rb +193 -0
- data/lib/ronin/support/binary/ctypes/os/macos.rb +151 -0
- data/lib/ronin/support/binary/ctypes/os/netbsd.rb +147 -0
- data/lib/ronin/support/binary/ctypes/os/openbsd.rb +168 -0
- data/lib/ronin/support/binary/ctypes/os/unix.rb +78 -0
- data/lib/ronin/support/binary/ctypes/os/windows.rb +125 -0
- data/lib/ronin/support/binary/ctypes/os.rb +125 -0
- data/lib/ronin/support/binary/ctypes/scalar_type.rb +200 -0
- data/lib/ronin/support/binary/ctypes/string_type.rb +143 -0
- data/lib/ronin/support/binary/ctypes/struct_object_type.rb +173 -0
- data/lib/ronin/support/binary/ctypes/struct_type.rb +359 -0
- data/lib/ronin/support/binary/ctypes/type.rb +193 -0
- data/lib/ronin/support/binary/ctypes/type_resolver.rb +206 -0
- data/lib/ronin/support/binary/ctypes/uint16_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/uint32_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/uint64_type.rb +50 -0
- data/lib/ronin/support/binary/ctypes/uint8_type.rb +41 -0
- data/lib/ronin/support/binary/ctypes/uint_type.rb +59 -0
- data/lib/ronin/support/binary/ctypes/unbounded_array_type.rb +258 -0
- data/lib/ronin/support/binary/ctypes/union_object_type.rb +173 -0
- data/lib/ronin/support/binary/ctypes/union_type.rb +261 -0
- data/lib/ronin/support/binary/ctypes.rb +462 -0
- data/lib/ronin/support/binary/hexdump/core_ext/file.rb +118 -0
- data/lib/ronin/support/binary/hexdump/core_ext/string.rb +115 -0
- data/lib/ronin/support/binary/hexdump/core_ext.rb +20 -0
- data/lib/ronin/support/binary/hexdump/parser.rb +492 -0
- data/lib/ronin/support/binary/hexdump.rb +20 -0
- data/lib/ronin/support/binary/memory.rb +268 -0
- data/lib/ronin/support/binary/packet.rb +33 -0
- data/lib/ronin/support/binary/stack.rb +256 -0
- data/lib/ronin/support/binary/stream/methods.rb +1755 -0
- data/lib/ronin/support/binary/stream.rb +151 -0
- data/lib/ronin/support/binary/struct/member.rb +86 -0
- data/lib/ronin/support/binary/struct.rb +830 -0
- data/lib/ronin/support/binary/template.rb +284 -0
- data/lib/ronin/support/binary/union.rb +162 -0
- data/lib/ronin/support/binary.rb +26 -0
- data/lib/ronin/support/cli/ansi.rb +330 -0
- data/lib/ronin/support/cli/io_shell/core_ext/io.rb +67 -0
- data/lib/ronin/{fuzzing/extensions.rb → support/cli/io_shell/core_ext.rb} +6 -7
- data/lib/ronin/support/cli/io_shell.rb +161 -0
- data/lib/ronin/support/cli/printing.rb +216 -0
- data/lib/ronin/support/cli.rb +20 -0
- data/lib/ronin/support/compression/core_ext/file.rb +70 -0
- data/lib/ronin/support/compression/core_ext/string.rb +101 -0
- data/lib/ronin/{formatting/html.rb → support/compression/core_ext.rb} +6 -7
- data/lib/ronin/support/compression/gzip/reader.rb +70 -0
- data/lib/ronin/support/compression/gzip/writer.rb +74 -0
- data/lib/ronin/support/compression/gzip.rb +105 -0
- data/lib/ronin/support/compression/mixin.rb +180 -0
- data/lib/ronin/{network/extensions/esmtp/net.rb → support/compression/zlib.rb} +9 -10
- data/lib/ronin/support/compression.rb +174 -0
- data/lib/ronin/{extensions → support/core_ext}/enumerable.rb +5 -6
- data/lib/ronin/{extensions → support/core_ext}/file.rb +11 -34
- data/lib/ronin/support/core_ext/integer.rb +37 -0
- data/lib/ronin/support/core_ext/ipaddr.rb +65 -0
- data/lib/ronin/{extensions → support/core_ext}/kernel.rb +10 -9
- data/lib/ronin/{extensions → support/core_ext}/resolv.rb +5 -28
- data/lib/ronin/{extensions → support/core_ext}/string.rb +117 -57
- data/lib/ronin/support/core_ext.rb +33 -0
- data/lib/ronin/support/crypto/cert.rb +522 -0
- data/lib/ronin/support/crypto/cert_chain.rb +204 -0
- data/lib/ronin/support/crypto/cipher/aes.rb +71 -0
- data/lib/ronin/support/crypto/cipher/aes128.rb +54 -0
- data/lib/ronin/support/crypto/cipher/aes256.rb +54 -0
- data/lib/ronin/support/crypto/cipher.rb +194 -0
- data/lib/ronin/support/crypto/core_ext/file.rb +660 -0
- data/lib/ronin/support/crypto/core_ext/string.rb +548 -0
- data/lib/ronin/{binary.rb → support/crypto/core_ext.rb} +7 -8
- data/lib/ronin/support/crypto/hmac.rb +48 -0
- data/lib/ronin/support/crypto/key/dh.rb +122 -0
- data/lib/ronin/support/crypto/key/dsa.rb +103 -0
- data/lib/ronin/support/crypto/key/ec.rb +99 -0
- data/lib/ronin/support/crypto/key/methods.rb +163 -0
- data/lib/ronin/support/crypto/key/rsa.rb +169 -0
- data/lib/ronin/support/crypto/key.rb +105 -0
- data/lib/ronin/support/crypto/mixin.rb +620 -0
- data/lib/ronin/{network/extensions/http/net.rb → support/crypto/openssl.rb} +9 -10
- data/lib/ronin/support/crypto.rb +779 -0
- data/lib/ronin/support/encoding/base16/core_ext/string.rb +63 -0
- data/lib/ronin/support/encoding/base16/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/base16.rb +82 -0
- data/lib/ronin/support/encoding/base32/core_ext/string.rb +63 -0
- data/lib/ronin/support/encoding/base32/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/base32.rb +164 -0
- data/lib/ronin/support/encoding/base64/core_ext/string.rb +76 -0
- data/lib/ronin/support/encoding/base64/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/base64.rb +78 -0
- data/lib/ronin/support/encoding/c/core_ext/integer.rb +82 -0
- data/lib/ronin/support/encoding/c/core_ext/string.rb +125 -0
- data/lib/ronin/support/encoding/c/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/c.rb +277 -0
- data/lib/ronin/support/encoding/core_ext/string.rb +107 -0
- data/lib/ronin/support/encoding/core_ext.rb +33 -0
- data/lib/ronin/support/encoding/hex/core_ext/integer.rb +82 -0
- data/lib/ronin/support/encoding/hex/core_ext/string.rb +133 -0
- data/lib/ronin/support/encoding/hex/core_ext.rb +22 -0
- data/lib/ronin/support/encoding/hex.rb +248 -0
- data/lib/ronin/support/encoding/html/core_ext/integer.rb +106 -0
- data/lib/ronin/support/encoding/html/core_ext/string.rb +130 -0
- data/lib/ronin/support/encoding/html/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/html.rb +233 -0
- data/lib/ronin/support/encoding/http/core_ext/integer.rb +95 -0
- data/lib/ronin/support/encoding/http/core_ext/string.rb +129 -0
- data/lib/ronin/support/encoding/http/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/http.rb +241 -0
- data/lib/ronin/support/encoding/js/core_ext/integer.rb +67 -0
- data/lib/ronin/support/encoding/js/core_ext/string.rb +125 -0
- data/lib/ronin/support/encoding/js/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/js.rb +279 -0
- data/lib/ronin/support/encoding/powershell/core_ext/integer.rb +87 -0
- data/lib/ronin/support/encoding/powershell/core_ext/string.rb +145 -0
- data/lib/ronin/support/encoding/powershell/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/powershell.rb +297 -0
- data/lib/ronin/support/encoding/punycode/core_ext/string.rb +63 -0
- data/lib/ronin/support/encoding/punycode/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/punycode.rb +76 -0
- data/lib/ronin/support/encoding/quoted_printable/core_ext/string.rb +75 -0
- data/lib/ronin/support/encoding/quoted_printable/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/quoted_printable.rb +102 -0
- data/lib/ronin/support/encoding/ruby/core_ext/string.rb +129 -0
- data/lib/ronin/{formatting/binary.rb → support/encoding/ruby/core_ext.rb} +6 -7
- data/lib/ronin/support/encoding/ruby.rb +235 -0
- data/lib/ronin/support/encoding/shell/core_ext/integer.rb +89 -0
- data/lib/ronin/support/encoding/shell/core_ext/string.rb +134 -0
- data/lib/ronin/support/encoding/shell/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/shell.rb +293 -0
- data/lib/ronin/{network/extensions → support/encoding}/smtp.rb +7 -7
- data/lib/ronin/support/encoding/sql/core_ext/string.rb +114 -0
- data/lib/ronin/{formatting/http.rb → support/encoding/sql/core_ext.rb} +6 -7
- data/lib/ronin/support/encoding/sql.rb +124 -0
- data/lib/ronin/support/encoding/uri/core_ext/integer.rb +149 -0
- data/lib/ronin/support/encoding/uri/core_ext/string.rb +195 -0
- data/lib/ronin/support/encoding/uri/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/uri.rb +424 -0
- data/lib/ronin/support/encoding/uuencoding/core_ext/string.rb +73 -0
- data/lib/ronin/support/encoding/uuencoding/core_ext.rb +19 -0
- data/lib/ronin/support/encoding/uuencoding.rb +70 -0
- data/lib/ronin/support/encoding/xml/core_ext/integer.rb +100 -0
- data/lib/ronin/support/encoding/xml/core_ext/string.rb +124 -0
- data/lib/ronin/support/encoding/xml/core_ext.rb +20 -0
- data/lib/ronin/support/encoding/xml.rb +328 -0
- data/lib/ronin/support/encoding.rb +46 -0
- data/lib/ronin/support/home.rb +88 -0
- data/lib/ronin/support/mixin.rb +42 -0
- data/lib/ronin/support/network/asn/dns_record.rb +112 -0
- data/lib/ronin/support/network/asn/list.rb +269 -0
- data/lib/ronin/support/network/asn/record.rb +164 -0
- data/lib/ronin/support/network/asn/record_set.rb +226 -0
- data/lib/ronin/support/network/asn.rb +88 -0
- data/lib/ronin/{binary/hexdump.rb → support/network/core_ext.rb} +6 -7
- data/lib/ronin/support/network/dns/idn.rb +38 -0
- data/lib/ronin/support/network/dns/mixin.rb +941 -0
- data/lib/ronin/support/network/dns/resolver.rb +707 -0
- data/lib/ronin/support/network/dns.rb +1109 -0
- data/lib/ronin/support/network/domain.rb +70 -0
- data/lib/ronin/support/network/email_address.rb +574 -0
- data/lib/ronin/support/network/esmtp/mixin.rb +115 -0
- data/lib/ronin/support/network/exceptions.rb +43 -0
- data/lib/ronin/support/network/ftp/mixin.rb +106 -0
- data/lib/ronin/support/network/host.rb +1473 -0
- data/lib/ronin/support/network/http/cookie.rb +245 -0
- data/lib/ronin/support/network/http/core_ext/uri/http.rb +63 -0
- data/lib/ronin/support/network/http/core_ext.rb +19 -0
- data/lib/ronin/support/network/http/mixin.rb +890 -0
- data/lib/ronin/support/network/http/request.rb +215 -0
- data/lib/ronin/support/network/http/set_cookie.rb +210 -0
- data/lib/ronin/support/network/http/user_agents.rb +115 -0
- data/lib/ronin/support/network/http.rb +2582 -0
- data/lib/ronin/support/network/imap/mixin.rb +133 -0
- data/lib/ronin/support/network/ip/mixin.rb +114 -0
- data/lib/ronin/support/network/ip.rb +540 -0
- data/lib/ronin/support/network/ip_range/cidr.rb +252 -0
- data/lib/ronin/support/network/ip_range/glob.rb +309 -0
- data/lib/ronin/support/network/ip_range/range.rb +249 -0
- data/lib/ronin/support/network/ip_range.rb +284 -0
- data/lib/ronin/support/network/mixin.rb +58 -0
- data/lib/ronin/support/network/packet.rb +27 -0
- data/lib/ronin/support/network/pop3/mixin.rb +113 -0
- data/lib/ronin/support/network/proxy.rb +602 -0
- data/lib/ronin/support/network/public_suffix/list.rb +339 -0
- data/lib/ronin/support/network/public_suffix/suffix.rb +118 -0
- data/lib/ronin/support/network/public_suffix/suffix_set.rb +150 -0
- data/lib/ronin/support/network/public_suffix.rb +41 -0
- data/lib/ronin/support/network/smtp/email.rb +190 -0
- data/lib/ronin/support/network/smtp/mixin.rb +290 -0
- data/lib/ronin/{extensions/meta.rb → support/network/smtp.rb} +6 -7
- data/lib/ronin/support/network/ssl/local_cert.rb +114 -0
- data/lib/ronin/support/network/ssl/local_key.rb +84 -0
- data/lib/ronin/support/network/ssl/mixin.rb +740 -0
- data/lib/ronin/{network/extensions/imap/net.rb → support/network/ssl/openssl.rb} +9 -10
- data/lib/ronin/support/network/ssl/proxy.rb +296 -0
- data/lib/ronin/support/network/ssl.rb +173 -0
- data/lib/ronin/support/network/tcp/mixin.rb +400 -0
- data/lib/ronin/support/network/tcp/proxy.rb +435 -0
- data/lib/ronin/support/network/tcp.rb +443 -0
- data/lib/ronin/support/network/telnet/mixin.rb +150 -0
- data/lib/ronin/support/network/telnet.rb +90 -0
- data/lib/ronin/support/network/tld/list.rb +266 -0
- data/lib/ronin/support/network/tld.rb +41 -0
- data/lib/ronin/support/network/tls/mixin.rb +670 -0
- data/lib/ronin/support/network/tls/proxy.rb +135 -0
- data/lib/ronin/support/network/tls.rb +53 -0
- data/lib/ronin/support/network/udp/mixin.rb +389 -0
- data/lib/ronin/support/network/udp/proxy.rb +192 -0
- data/lib/ronin/support/network/udp.rb +435 -0
- data/lib/ronin/support/network/unix/mixin.rb +273 -0
- data/lib/ronin/support/network.rb +37 -0
- data/lib/ronin/support/path.rb +136 -0
- data/lib/ronin/{network/extensions/dns/net.rb → support/text/core_ext/regexp.rb} +8 -9
- data/lib/ronin/support/text/core_ext/string.rb +46 -0
- data/lib/ronin/support/text/core_ext.rb +23 -0
- data/lib/ronin/support/text/entropy/core_ext/string.rb +45 -0
- data/lib/ronin/support/text/entropy/core_ext.rb +19 -0
- data/lib/ronin/support/text/entropy.rb +66 -0
- data/lib/ronin/support/text/erb/mixin.rb +44 -0
- data/lib/ronin/support/text/erb.rb +19 -0
- data/lib/ronin/support/text/homoglyph/core_ext/string.rb +108 -0
- data/lib/ronin/{formatting/digest.rb → support/text/homoglyph/core_ext.rb} +6 -7
- data/lib/ronin/{network/http/exceptions/unknown_request.rb → support/text/homoglyph/exceptions.rb} +10 -9
- data/lib/ronin/support/text/homoglyph/table.rb +228 -0
- data/lib/ronin/support/text/homoglyph.rb +142 -0
- data/lib/ronin/support/text/mixin.rb +31 -0
- data/lib/ronin/support/text/patterns/credentials.rb +75 -0
- data/lib/ronin/support/text/patterns/crypto.rb +67 -0
- data/lib/ronin/support/text/patterns/file_system.rb +93 -0
- data/lib/ronin/support/text/patterns/language.rb +37 -0
- data/lib/ronin/support/text/patterns/network/public_suffix.rb +44 -0
- data/lib/ronin/support/text/patterns/network.rb +140 -0
- data/lib/ronin/support/text/patterns/numeric.rb +52 -0
- data/lib/ronin/support/text/patterns/pii.rb +105 -0
- data/lib/ronin/support/text/patterns/source_code.rb +148 -0
- data/lib/ronin/support/text/patterns.rb +25 -0
- data/lib/ronin/support/text/random/mixin.rb +437 -0
- data/lib/ronin/support/text/random.rb +419 -0
- data/lib/ronin/support/text/typo/core_ext/string.rb +123 -0
- data/lib/ronin/support/text/typo/core_ext.rb +19 -0
- data/lib/ronin/support/text/typo/exceptions.rb +28 -0
- data/lib/ronin/support/text/typo/generator.rb +161 -0
- data/lib/ronin/support/text/typo.rb +260 -0
- data/lib/ronin/support/text.rb +26 -0
- data/lib/ronin/support/version.rb +6 -7
- data/lib/ronin/support.rb +20 -15
- data/ronin-support.gemspec +3 -1
- metadata +462 -369
- data/.gemtest +0 -0
- data/lib/ronin/binary/hexdump/parser.rb +0 -403
- data/lib/ronin/binary/struct.rb +0 -567
- data/lib/ronin/binary/template.rb +0 -454
- data/lib/ronin/extensions/ip_addr.rb +0 -217
- data/lib/ronin/extensions/meta/object.rb +0 -24
- data/lib/ronin/extensions/regexp.rb +0 -157
- data/lib/ronin/extensions.rb +0 -29
- data/lib/ronin/formatting/extensions/binary/array.rb +0 -61
- data/lib/ronin/formatting/extensions/binary/base64.rb +0 -106
- data/lib/ronin/formatting/extensions/binary/file.rb +0 -77
- data/lib/ronin/formatting/extensions/binary/float.rb +0 -65
- data/lib/ronin/formatting/extensions/binary/integer.rb +0 -180
- data/lib/ronin/formatting/extensions/binary/string.rb +0 -345
- data/lib/ronin/formatting/extensions/binary.rb +0 -26
- data/lib/ronin/formatting/extensions/digest/file.rb +0 -129
- data/lib/ronin/formatting/extensions/digest/string.rb +0 -86
- data/lib/ronin/formatting/extensions/digest.rb +0 -21
- data/lib/ronin/formatting/extensions/html/integer.rb +0 -142
- data/lib/ronin/formatting/extensions/html/string.rb +0 -194
- data/lib/ronin/formatting/extensions/html.rb +0 -21
- data/lib/ronin/formatting/extensions/http/integer.rb +0 -69
- data/lib/ronin/formatting/extensions/http/string.rb +0 -110
- data/lib/ronin/formatting/extensions/http.rb +0 -21
- data/lib/ronin/formatting/extensions/sql/string.rb +0 -128
- data/lib/ronin/formatting/extensions/sql.rb +0 -20
- data/lib/ronin/formatting/extensions/text/array.rb +0 -137
- data/lib/ronin/formatting/extensions/text/string.rb +0 -297
- data/lib/ronin/formatting/extensions.rb +0 -24
- data/lib/ronin/formatting/text.rb +0 -20
- data/lib/ronin/formatting.rb +0 -25
- data/lib/ronin/fuzzing/extensions/string.rb +0 -209
- data/lib/ronin/fuzzing/fuzzer.rb +0 -110
- data/lib/ronin/fuzzing/fuzzing.rb +0 -360
- data/lib/ronin/fuzzing/mutator.rb +0 -161
- data/lib/ronin/fuzzing/repeater.rb +0 -81
- data/lib/ronin/fuzzing/template.rb +0 -133
- data/lib/ronin/fuzzing.rb +0 -21
- data/lib/ronin/mixin.rb +0 -89
- data/lib/ronin/network/dns.rb +0 -201
- data/lib/ronin/network/esmtp.rb +0 -113
- data/lib/ronin/network/extensions/dns.rb +0 -20
- data/lib/ronin/network/extensions/esmtp.rb +0 -20
- data/lib/ronin/network/extensions/http/uri/http.rb +0 -228
- data/lib/ronin/network/extensions/http.rb +0 -21
- data/lib/ronin/network/extensions/imap.rb +0 -20
- data/lib/ronin/network/extensions/pop3/net.rb +0 -24
- data/lib/ronin/network/extensions/pop3.rb +0 -20
- data/lib/ronin/network/extensions/smtp/net.rb +0 -24
- data/lib/ronin/network/extensions/ssl/net.rb +0 -24
- data/lib/ronin/network/extensions/ssl.rb +0 -20
- data/lib/ronin/network/extensions/tcp/net.rb +0 -24
- data/lib/ronin/network/extensions/tcp.rb +0 -20
- data/lib/ronin/network/extensions/telnet/net.rb +0 -24
- data/lib/ronin/network/extensions/telnet.rb +0 -20
- data/lib/ronin/network/extensions/udp/net.rb +0 -24
- data/lib/ronin/network/extensions/udp.rb +0 -20
- data/lib/ronin/network/extensions.rb +0 -29
- data/lib/ronin/network/ftp.rb +0 -149
- data/lib/ronin/network/http/exceptions.rb +0 -20
- data/lib/ronin/network/http/http.rb +0 -1127
- data/lib/ronin/network/http/proxy.rb +0 -330
- data/lib/ronin/network/http.rb +0 -22
- data/lib/ronin/network/imap.rb +0 -158
- data/lib/ronin/network/mixins/dns.rb +0 -55
- data/lib/ronin/network/mixins/esmtp.rb +0 -164
- data/lib/ronin/network/mixins/ftp.rb +0 -155
- data/lib/ronin/network/mixins/http.rb +0 -227
- data/lib/ronin/network/mixins/imap.rb +0 -156
- data/lib/ronin/network/mixins/mixin.rb +0 -58
- data/lib/ronin/network/mixins/pop3.rb +0 -149
- data/lib/ronin/network/mixins/smtp.rb +0 -159
- data/lib/ronin/network/mixins/ssl.rb +0 -148
- data/lib/ronin/network/mixins/tcp.rb +0 -368
- data/lib/ronin/network/mixins/telnet.rb +0 -208
- data/lib/ronin/network/mixins/udp.rb +0 -381
- data/lib/ronin/network/mixins/unix.rb +0 -279
- data/lib/ronin/network/mixins.rb +0 -29
- data/lib/ronin/network/network.rb +0 -45
- data/lib/ronin/network/pop3.rb +0 -124
- data/lib/ronin/network/proxy.rb +0 -578
- data/lib/ronin/network/smtp/email.rb +0 -174
- data/lib/ronin/network/smtp/smtp.rb +0 -230
- data/lib/ronin/network/smtp.rb +0 -22
- data/lib/ronin/network/ssl.rb +0 -186
- data/lib/ronin/network/tcp/proxy.rb +0 -417
- data/lib/ronin/network/tcp/tcp.rb +0 -443
- data/lib/ronin/network/tcp.rb +0 -21
- data/lib/ronin/network/telnet.rb +0 -264
- data/lib/ronin/network/udp/proxy.rb +0 -191
- data/lib/ronin/network/udp/udp.rb +0 -450
- data/lib/ronin/network/udp.rb +0 -21
- data/lib/ronin/network/unix.rb +0 -286
- data/lib/ronin/network.rb +0 -31
- data/lib/ronin/path.rb +0 -137
- data/lib/ronin/spec/ui/output.rb +0 -22
- data/lib/ronin/support/inflector.rb +0 -92
- data/lib/ronin/support/support.rb +0 -42
- data/lib/ronin/templates/erb.rb +0 -78
- data/lib/ronin/templates/template.rb +0 -169
- data/lib/ronin/templates.rb +0 -21
- data/lib/ronin/ui/output/helpers.rb +0 -296
- data/lib/ronin/ui/output/output.rb +0 -146
- data/lib/ronin/ui/output/terminal/color.rb +0 -124
- data/lib/ronin/ui/output/terminal/raw.rb +0 -103
- data/lib/ronin/ui/output/terminal.rb +0 -21
- data/lib/ronin/ui/output.rb +0 -21
- data/lib/ronin/ui/shell.rb +0 -286
- data/lib/ronin/wordlist.rb +0 -287
- data/spec/binary/hexdump/helpers/hexdumps/ascii.bin +0 -0
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_decimal_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/hexdump_repeated.txt +0 -6
- data/spec/binary/hexdump/helpers/hexdumps/od_decimal_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_decimal_ints.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_decimal_quads.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_decimal_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_doubles.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_floats.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_hex_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_hex_ints.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_hex_quads.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_hex_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_named_chars.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_octal_bytes.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_octal_ints.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_octal_quads.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_octal_shorts.txt +0 -17
- data/spec/binary/hexdump/helpers/hexdumps/od_repeated.txt +0 -6
- data/spec/binary/hexdump/helpers/hexdumps/repeated.bin +0 -1
- data/spec/binary/hexdump/helpers/hexdumps.rb +0 -13
- data/spec/binary/hexdump/parser_spec.rb +0 -302
- data/spec/binary/struct_spec.rb +0 -496
- data/spec/binary/template_spec.rb +0 -414
- data/spec/extensions/enumerable_spec.rb +0 -24
- data/spec/extensions/file_spec.rb +0 -63
- data/spec/extensions/ip_addr_spec.rb +0 -203
- data/spec/extensions/kernel_spec.rb +0 -30
- data/spec/extensions/regexp_spec.rb +0 -482
- data/spec/extensions/resolv_spec.rb +0 -18
- data/spec/extensions/string_spec.rb +0 -179
- data/spec/formatting/binary/array_spec.rb +0 -26
- data/spec/formatting/binary/base64_spec.rb +0 -50
- data/spec/formatting/binary/float_spec.rb +0 -34
- data/spec/formatting/binary/integer_spec.rb +0 -166
- data/spec/formatting/binary/string_spec.rb +0 -197
- data/spec/formatting/digest/string_spec.rb +0 -82
- data/spec/formatting/html/integer_spec.rb +0 -66
- data/spec/formatting/html/string_spec.rb +0 -103
- data/spec/formatting/http/integer_spec.rb +0 -42
- data/spec/formatting/http/string_spec.rb +0 -76
- data/spec/formatting/sql/string_spec.rb +0 -75
- data/spec/formatting/text/array_spec.rb +0 -105
- data/spec/formatting/text/string_spec.rb +0 -162
- data/spec/fuzzing/extensions/string_spec.rb +0 -87
- data/spec/fuzzing/fuzzer_spec.rb +0 -109
- data/spec/fuzzing/fuzzing_spec.rb +0 -24
- data/spec/fuzzing/mutator_spec.rb +0 -112
- data/spec/fuzzing/repeater_spec.rb +0 -57
- data/spec/fuzzing/template_spec.rb +0 -54
- data/spec/mixin_spec.rb +0 -53
- data/spec/network/dns_spec.rb +0 -201
- data/spec/network/ftp_spec.rb +0 -81
- data/spec/network/http/http_spec.rb +0 -466
- data/spec/network/http/proxy_spec.rb +0 -148
- data/spec/network/network_spec.rb +0 -8
- data/spec/network/proxy_spec.rb +0 -121
- data/spec/network/shared/unix_server.rb +0 -31
- data/spec/network/smtp/email_spec.rb +0 -100
- data/spec/network/ssl_spec.rb +0 -70
- data/spec/network/tcp/proxy_spec.rb +0 -116
- data/spec/network/tcp/tcp_spec.rb +0 -273
- data/spec/network/telnet_spec.rb +0 -67
- data/spec/network/udp/udp_spec.rb +0 -271
- data/spec/network/unix_spec.rb +0 -183
- data/spec/path_spec.rb +0 -86
- data/spec/spec_helper.rb +0 -9
- data/spec/support/inflector_spec.rb +0 -22
- data/spec/support_spec.rb +0 -8
- data/spec/templates/classes/example_erb.rb +0 -11
- data/spec/templates/classes/example_template.rb +0 -35
- data/spec/templates/erb_spec.rb +0 -21
- data/spec/templates/helpers/data/includes/_relative.erb +0 -1
- data/spec/templates/helpers/data/templates/example.erb +0 -1
- data/spec/templates/helpers/data.rb +0 -9
- data/spec/templates/template_spec.rb +0 -54
- data/spec/ui/classes/test_shell.rb +0 -22
- data/spec/ui/output_spec.rb +0 -32
- data/spec/ui/shell_spec.rb +0 -83
- data/spec/wordlist_spec.rb +0 -151
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/network/http/user_agents'
|
|
20
|
+
require 'ronin/support/network/http/cookie'
|
|
21
|
+
|
|
22
|
+
require 'net/http'
|
|
23
|
+
require 'uri/query_params'
|
|
24
|
+
|
|
25
|
+
module Ronin
|
|
26
|
+
module Support
|
|
27
|
+
module Network
|
|
28
|
+
class HTTP
|
|
29
|
+
#
|
|
30
|
+
# Handles building HTTP request objects.
|
|
31
|
+
#
|
|
32
|
+
# @api private
|
|
33
|
+
#
|
|
34
|
+
# @since 1.0.0
|
|
35
|
+
#
|
|
36
|
+
module Request
|
|
37
|
+
#
|
|
38
|
+
# Builds the [Request-URI], aka path + query string, for a HTTP
|
|
39
|
+
# request.
|
|
40
|
+
#
|
|
41
|
+
# [Request-URI]: https://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1.2
|
|
42
|
+
#
|
|
43
|
+
# @param [String] path
|
|
44
|
+
# The path of the request.
|
|
45
|
+
#
|
|
46
|
+
# @param [String, nil] query
|
|
47
|
+
# The optional query string for the request.
|
|
48
|
+
#
|
|
49
|
+
# @param [Hash{Symbol => Object},
|
|
50
|
+
# Hash{String => Object}, nil] query_params
|
|
51
|
+
# Additional query params for the request.
|
|
52
|
+
#
|
|
53
|
+
# @return [String]
|
|
54
|
+
#
|
|
55
|
+
def self.request_uri(path, query: nil, query_params: nil)
|
|
56
|
+
if query_params
|
|
57
|
+
query = URI::QueryParams.dump(query_params)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
if query
|
|
61
|
+
# append the query-string onto the path
|
|
62
|
+
path += if path.include?('?') then "&#{query}"
|
|
63
|
+
else "?#{query}"
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
return path
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Request methods and `Net::HTTP` request classes.
|
|
71
|
+
METHODS = {
|
|
72
|
+
copy: Net::HTTP::Copy,
|
|
73
|
+
delete: Net::HTTP::Delete,
|
|
74
|
+
get: Net::HTTP::Get,
|
|
75
|
+
head: Net::HTTP::Head,
|
|
76
|
+
lock: Net::HTTP::Lock,
|
|
77
|
+
mkcol: Net::HTTP::Mkcol,
|
|
78
|
+
move: Net::HTTP::Move,
|
|
79
|
+
options: Net::HTTP::Options,
|
|
80
|
+
patch: Net::HTTP::Patch,
|
|
81
|
+
post: Net::HTTP::Post,
|
|
82
|
+
propfind: Net::HTTP::Propfind,
|
|
83
|
+
proppatch: Net::HTTP::Proppatch,
|
|
84
|
+
put: Net::HTTP::Put,
|
|
85
|
+
trace: Net::HTTP::Trace,
|
|
86
|
+
unlock: Net::HTTP::Unlock
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
#
|
|
90
|
+
# Creates a new `Net::HTTP` request.
|
|
91
|
+
#
|
|
92
|
+
# @param [:copy, :delete, :get, :head, :lock, :mkcol, :move,
|
|
93
|
+
# :options, :patch, :post, :propfind, :proppatch, :put,
|
|
94
|
+
# :trace, :unlock] method
|
|
95
|
+
# The HTTP request method to use.
|
|
96
|
+
#
|
|
97
|
+
# @param [String] path
|
|
98
|
+
#
|
|
99
|
+
# @param [String, nil] query
|
|
100
|
+
# The query-string to append to the request path.
|
|
101
|
+
#
|
|
102
|
+
# @param [Hash, nil] query_params
|
|
103
|
+
# The query-params to append to the request path.
|
|
104
|
+
#
|
|
105
|
+
# @param [String, nil] user
|
|
106
|
+
# The user to authenticate as.
|
|
107
|
+
#
|
|
108
|
+
# @param [String, nil] password
|
|
109
|
+
# The password to authenticate with.
|
|
110
|
+
#
|
|
111
|
+
# @param [Hash{Symbol => String}, Hash{String => String}, nil] headers
|
|
112
|
+
# Additional HTTP header names and values to add to the request.
|
|
113
|
+
#
|
|
114
|
+
# @param [String, :random, :chrome, :chrome_linux, :chrome_macos,
|
|
115
|
+
# :chrome_windows, :chrome_iphone, :chrome_ipad,
|
|
116
|
+
# :chrome_android, :firefox, :firefox_linux, :firefox_macos,
|
|
117
|
+
# :firefox_windows, :firefox_iphone, :firefox_ipad,
|
|
118
|
+
# :firefox_android, :safari, :safari_macos, :safari_iphone,
|
|
119
|
+
# :safari_ipad, :edge, :linux, :macos, :windows, :iphone,
|
|
120
|
+
# :ipad, :android, nil] user_agent
|
|
121
|
+
# The `User-Agent` header value for the request.
|
|
122
|
+
#
|
|
123
|
+
# @param [String, Hash{String => String}, Cookie, nil] cookie
|
|
124
|
+
# Additional `Cookie` header. If a `Hash` is given, it will be
|
|
125
|
+
# converted to a `String` using {Cookie}. If the cookie value is
|
|
126
|
+
# empty, the `Cookie` header will not be set.
|
|
127
|
+
#
|
|
128
|
+
# @param [String, nil] body
|
|
129
|
+
# The body of the request.
|
|
130
|
+
#
|
|
131
|
+
# @param [Hash, String, nil] form_data
|
|
132
|
+
# The form data that may be sent in the body of the request.
|
|
133
|
+
#
|
|
134
|
+
# @return [Net::HTTP::Copy,
|
|
135
|
+
# Net::HTTP::Delete,
|
|
136
|
+
# Net::HTTP::Get,
|
|
137
|
+
# Net::HTTP::Head,
|
|
138
|
+
# Net::HTTP::Lock,
|
|
139
|
+
# Net::HTTP::Mkcol,
|
|
140
|
+
# Net::HTTP::Move,
|
|
141
|
+
# Net::HTTP::Options,
|
|
142
|
+
# Net::HTTP::Patch,
|
|
143
|
+
# Net::HTTP::Post,
|
|
144
|
+
# Net::HTTP::Propfind,
|
|
145
|
+
# Net::HTTP::Proppatch,
|
|
146
|
+
# Net::HTTP::Put,
|
|
147
|
+
# Net::HTTP::Trace,
|
|
148
|
+
# Net::HTTP::Unlock]
|
|
149
|
+
# The built HTTP request object.
|
|
150
|
+
#
|
|
151
|
+
def self.build(method,path, # query string keyword arguments
|
|
152
|
+
query: nil,
|
|
153
|
+
query_params: nil,
|
|
154
|
+
# Basic-Auth keyword arguments
|
|
155
|
+
user: nil,
|
|
156
|
+
password: nil,
|
|
157
|
+
# Header keyword arguments
|
|
158
|
+
headers: nil,
|
|
159
|
+
user_agent: nil,
|
|
160
|
+
cookie: nil,
|
|
161
|
+
# request body keyword arguments
|
|
162
|
+
body: nil,
|
|
163
|
+
form_data: nil)
|
|
164
|
+
request_class = METHODS.fetch(method) do
|
|
165
|
+
raise(ArgumentError,"unknown HTTP request method: #{method.inspect}")
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
request = request_class.new(
|
|
169
|
+
request_uri(path, query: query, query_params: query_params),
|
|
170
|
+
headers
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
if user
|
|
174
|
+
user = user.to_s
|
|
175
|
+
password = password.to_s if password
|
|
176
|
+
|
|
177
|
+
request.basic_auth(user,password)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
if user_agent
|
|
181
|
+
request['User-Agent'] = case user_agent
|
|
182
|
+
when Symbol then UserAgents[user_agent]
|
|
183
|
+
else user_agent
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
if cookie && !cookie.empty?
|
|
188
|
+
request['Cookie'] = case cookie
|
|
189
|
+
when Hash then HTTP::Cookie.new(cookie).to_s
|
|
190
|
+
else cookie.to_s
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
if form_data
|
|
195
|
+
case form_data
|
|
196
|
+
when String
|
|
197
|
+
request.content_type = 'application/x-www-form-urlencoded'
|
|
198
|
+
request.body = form_data
|
|
199
|
+
else
|
|
200
|
+
request.form_data = form_data
|
|
201
|
+
end
|
|
202
|
+
elsif body
|
|
203
|
+
case body
|
|
204
|
+
when IO, StringIO then request.body_stream = body
|
|
205
|
+
else request.body = body
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
return request
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
end
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/network/http/cookie'
|
|
20
|
+
|
|
21
|
+
require 'time'
|
|
22
|
+
|
|
23
|
+
module Ronin
|
|
24
|
+
module Support
|
|
25
|
+
module Network
|
|
26
|
+
class HTTP
|
|
27
|
+
#
|
|
28
|
+
# Parses and generates `Set-Cookie` header values.
|
|
29
|
+
#
|
|
30
|
+
# @api public
|
|
31
|
+
#
|
|
32
|
+
# @since 1.0.0
|
|
33
|
+
#
|
|
34
|
+
class SetCookie < Cookie
|
|
35
|
+
|
|
36
|
+
# The `Max-Age` cookie attribute.
|
|
37
|
+
#
|
|
38
|
+
# @return [Integer, nil]
|
|
39
|
+
attr_reader :max_age
|
|
40
|
+
|
|
41
|
+
# The `Expires` cookie attribute.
|
|
42
|
+
#
|
|
43
|
+
# @return [Time, nil]
|
|
44
|
+
attr_reader :expires
|
|
45
|
+
|
|
46
|
+
# The `Domain` cookie attribute.
|
|
47
|
+
#
|
|
48
|
+
# @return [String, nil]
|
|
49
|
+
attr_reader :domain
|
|
50
|
+
|
|
51
|
+
# The `Path` cookie attribute.
|
|
52
|
+
#
|
|
53
|
+
# @return [String, nil]
|
|
54
|
+
attr_reader :path
|
|
55
|
+
|
|
56
|
+
# The `SameSite` cookie attribute.
|
|
57
|
+
#
|
|
58
|
+
# @return [:strict, :lax, :none]
|
|
59
|
+
attr_reader :same_site
|
|
60
|
+
|
|
61
|
+
# The `HttpOnly` flag.
|
|
62
|
+
#
|
|
63
|
+
# @return [true, nil]
|
|
64
|
+
attr_reader :http_only
|
|
65
|
+
|
|
66
|
+
# The `Secure` flag.
|
|
67
|
+
#
|
|
68
|
+
# @return [true, nil]
|
|
69
|
+
attr_reader :secure
|
|
70
|
+
|
|
71
|
+
#
|
|
72
|
+
# Initializes the `Set-Cookie` object.
|
|
73
|
+
#
|
|
74
|
+
# @param [Hash{String => String}] params
|
|
75
|
+
#
|
|
76
|
+
# @param [Time, nil] expires
|
|
77
|
+
# The parsed `Expires` value.
|
|
78
|
+
#
|
|
79
|
+
# @param [Integer, nil] max_age
|
|
80
|
+
# The parsed `Max-Age` value.
|
|
81
|
+
#
|
|
82
|
+
# @param [String, nil] path
|
|
83
|
+
# The parsed `Path` value.
|
|
84
|
+
#
|
|
85
|
+
# @param [String, nil] domain
|
|
86
|
+
# The parsed `Domain` value.
|
|
87
|
+
#
|
|
88
|
+
# @param [true, nil] http_only
|
|
89
|
+
# Indicates the `HttpOnly` flag is enabled.
|
|
90
|
+
#
|
|
91
|
+
# @param [true, nil] secure
|
|
92
|
+
# Indicates the `Secure` flag is enabled.
|
|
93
|
+
#
|
|
94
|
+
# @param [:strict, :lax, :none, nil] same_site
|
|
95
|
+
# The parsed `SameSite` value.
|
|
96
|
+
#
|
|
97
|
+
def initialize(params, expires: nil,
|
|
98
|
+
max_age: nil,
|
|
99
|
+
path: nil,
|
|
100
|
+
domain: nil,
|
|
101
|
+
http_only: nil,
|
|
102
|
+
secure: nil,
|
|
103
|
+
same_site: nil)
|
|
104
|
+
super(params)
|
|
105
|
+
|
|
106
|
+
@expires = expires
|
|
107
|
+
@max_age = max_age
|
|
108
|
+
@path = path
|
|
109
|
+
@domain = domain
|
|
110
|
+
@http_only = http_only
|
|
111
|
+
@secure = secure
|
|
112
|
+
@same_site = same_site
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Mapping of `SameSite` values to Symbols.
|
|
116
|
+
SAME_SITE = {
|
|
117
|
+
'None' => :none,
|
|
118
|
+
'Strict' => :strict,
|
|
119
|
+
'Lax' => :lax
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
#
|
|
123
|
+
# Parses a `Set-Cookie` string.
|
|
124
|
+
#
|
|
125
|
+
# @param [String] string
|
|
126
|
+
# The raw `Set-Cookie` string.
|
|
127
|
+
#
|
|
128
|
+
# @return [Cookie]
|
|
129
|
+
# The parsed cookie.
|
|
130
|
+
#
|
|
131
|
+
# @raise [ArgumentError]
|
|
132
|
+
# The string contained an unknown `SameSite` value or flag.
|
|
133
|
+
#
|
|
134
|
+
def self.parse(string)
|
|
135
|
+
kwargs = {}
|
|
136
|
+
params = {}
|
|
137
|
+
|
|
138
|
+
string.split(/;\s+/) do |field|
|
|
139
|
+
if field.include?('=')
|
|
140
|
+
key, value = field.split('=',2)
|
|
141
|
+
|
|
142
|
+
case key
|
|
143
|
+
when 'Max-Age' then kwargs[:max_age] = value.to_i
|
|
144
|
+
when 'Expires' then kwargs[:expires] = Time.parse(value)
|
|
145
|
+
when 'Path' then kwargs[:path] = value
|
|
146
|
+
when 'Domain' then kwargs[:domain] = value
|
|
147
|
+
when 'SameSite'
|
|
148
|
+
kwargs[:same_site] = SAME_SITE.fetch(value) do
|
|
149
|
+
raise(ArgumentError,"unrecognized SameSite value: #{value.inspect}")
|
|
150
|
+
end
|
|
151
|
+
else
|
|
152
|
+
params[unescape(key)] = unescape(value)
|
|
153
|
+
end
|
|
154
|
+
else
|
|
155
|
+
case field
|
|
156
|
+
when 'HttpOnly' then kwargs[:http_only] = true
|
|
157
|
+
when 'Secure' then kwargs[:secure] = true
|
|
158
|
+
else
|
|
159
|
+
raise(ArgumentError,"unrecognized Cookie flag: #{field.inspect}")
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
return new(params,**kwargs)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
#
|
|
168
|
+
# Determines if the `HttpOnly` flag is set.
|
|
169
|
+
#
|
|
170
|
+
# @return [Boolean]
|
|
171
|
+
#
|
|
172
|
+
def http_only?
|
|
173
|
+
@http_only == true
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
#
|
|
177
|
+
# Determines if the `Secure` flag is set.
|
|
178
|
+
#
|
|
179
|
+
# @return [Boolean]
|
|
180
|
+
#
|
|
181
|
+
def secure?
|
|
182
|
+
@secure == true
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
#
|
|
186
|
+
# Converts the cookie back into a `Set-Cookie` value.
|
|
187
|
+
#
|
|
188
|
+
# @return [String]
|
|
189
|
+
# The formatted cookie.
|
|
190
|
+
#
|
|
191
|
+
def to_s
|
|
192
|
+
string = super()
|
|
193
|
+
string << "; Max-Age=#{@max_age}" if @max_age
|
|
194
|
+
string << "; Expires=#{@expires.httpdate}" if @expires
|
|
195
|
+
string << "; Path=#{@path}" if @path
|
|
196
|
+
string << "; Domain=#{@domain}" if @domain
|
|
197
|
+
string << "; SameSite=#{@same_site.to_s.capitalize}" if @same_site
|
|
198
|
+
|
|
199
|
+
if @secure then string << '; Secure'
|
|
200
|
+
elsif @http_only then string << '; HttpOnly'
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
string
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
end
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
module Ronin
|
|
20
|
+
module Support
|
|
21
|
+
module Network
|
|
22
|
+
class HTTP
|
|
23
|
+
#
|
|
24
|
+
# Contains built-in `User-Agent` strings for {HTTP}.
|
|
25
|
+
#
|
|
26
|
+
# @api semipublic
|
|
27
|
+
#
|
|
28
|
+
# @since 1.0.0
|
|
29
|
+
#
|
|
30
|
+
module UserAgents
|
|
31
|
+
# Built-in `User-Agent` strings for impersonating various browsers.
|
|
32
|
+
ALIASES = {
|
|
33
|
+
chrome_linux: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36',
|
|
34
|
+
chrome_macos: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36',
|
|
35
|
+
chrome_windows: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36',
|
|
36
|
+
chrome_iphone: 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/102.0.5005.87 Mobile/15E148 Safari/604.1',
|
|
37
|
+
chrome_ipad: 'Mozilla/5.0 (iPad; CPU OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/102.0.5005.87 Mobile/15E148 Safari/604.1',
|
|
38
|
+
chrome_android: 'Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.99 Mobile Safari/537.36',
|
|
39
|
+
|
|
40
|
+
firefox_linux: 'Mozilla/5.0 (Linux x86_64; rv:101.0) Gecko/20100101 Firefox/101.0',
|
|
41
|
+
firefox_macos: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 12.4; rv:101.0) Gecko/20100101 Firefox/101.0',
|
|
42
|
+
firefox_windows: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0',
|
|
43
|
+
firefox_iphone: 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/101.0 Mobile/15E148 Safari/605.1.15',
|
|
44
|
+
firefox_ipad: 'Mozilla/5.0 (iPad; CPU OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/101.0 Mobile/15E148 Safari/605.1.15',
|
|
45
|
+
|
|
46
|
+
firefox_android: 'Mozilla/5.0 (Android 12; Mobile; rv:68.0) Gecko/68.0 Firefox/101.0',
|
|
47
|
+
|
|
48
|
+
safari_macos: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 12_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15',
|
|
49
|
+
safari_iphone: 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
|
|
50
|
+
safari_ipad: 'Mozilla/5.0 (iPad; CPU OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1',
|
|
51
|
+
|
|
52
|
+
edge: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36 Edg/102.0.1245.33'
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
#
|
|
56
|
+
# Returns a `User-Agent` string for the given ID.
|
|
57
|
+
#
|
|
58
|
+
# @param [:random, :chrome, :chrome_linux, :chrome_macos,
|
|
59
|
+
# :chrome_windows, :chrome_iphone, :chrome_ipad,
|
|
60
|
+
# :chrome_android, :firefox, :firefox_linux, :firefox_macos,
|
|
61
|
+
# :firefox_windows, :firefox_iphone, :firefox_ipad,
|
|
62
|
+
# :firefox_android, :safari, :safari_macos, :safari_iphone,
|
|
63
|
+
# :safari_ipad, :edge, :linux, :macos, :windows, :iphone,
|
|
64
|
+
# :ipad, :android] id
|
|
65
|
+
# The new `User-Agent` string to use. The acceptable values are:
|
|
66
|
+
# * `:random` - a random value from {ALIASES} will be returned.
|
|
67
|
+
# * `:chrome` - a random Chrome `User-Agent` from {ALIASES} will be
|
|
68
|
+
# returned.
|
|
69
|
+
# * `:firefox` - a random Firefox `User-Agent` from {ALIASES} will
|
|
70
|
+
# be returned.
|
|
71
|
+
# * `:safari` - a random Safari `User-Agent` from {ALIASES} will be
|
|
72
|
+
# returned.
|
|
73
|
+
# * `:linux` - a random Linux `User-Agent` from {ALIASES} will be
|
|
74
|
+
# returned.
|
|
75
|
+
# * `:macos` - a random macOS `User-Agent` from {ALIASES} will be
|
|
76
|
+
# returned.
|
|
77
|
+
# * `:windows` - a random Windows `User-Agent` from {ALIASES} will
|
|
78
|
+
# be returned.
|
|
79
|
+
# * `:iphone` - a random iPhone `User-Agent` from {ALIASES} will
|
|
80
|
+
# be returned.
|
|
81
|
+
# * `:ipad` - a random iPad `User-Agent` from {ALIASES} will
|
|
82
|
+
# be returned.
|
|
83
|
+
# * `:android` - a random Android `User-Agent` from {ALIASES} will
|
|
84
|
+
# be returned.
|
|
85
|
+
# * Otherwise, the `User-Agent` String in {ALIASES} with the
|
|
86
|
+
# matching ID will be returned.
|
|
87
|
+
#
|
|
88
|
+
# @return [String]
|
|
89
|
+
# The `User-Agent` string for the given `id`.
|
|
90
|
+
#
|
|
91
|
+
# @raise [ArgumentError]
|
|
92
|
+
# The given `User-Agent` ID was not a known ID or wasn't a Symbol.
|
|
93
|
+
#
|
|
94
|
+
def self.[](id)
|
|
95
|
+
case id
|
|
96
|
+
when :random
|
|
97
|
+
ALIASES.values.sample
|
|
98
|
+
when :chrome, :firefox, :safari # prefix
|
|
99
|
+
ALIASES.select { |k,v| k =~ /^#{id}_/ }.values.sample
|
|
100
|
+
when :linux, :macos, :windows,
|
|
101
|
+
:iphone, :ipad, :android # suffix
|
|
102
|
+
ALIASES.select { |k,v| k =~ /_#{id}$/ }.values.sample
|
|
103
|
+
when Symbol
|
|
104
|
+
ALIASES.fetch(id) do
|
|
105
|
+
raise(ArgumentError,"unknown user agent alias: #{id.inspect}")
|
|
106
|
+
end
|
|
107
|
+
else
|
|
108
|
+
raise(ArgumentError,"User-Agent ID must be a Symbol")
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|