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
data/lib/ronin/fuzzing/fuzzer.rb
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
3
|
-
#
|
|
4
|
-
# This file is part of Ronin Support.
|
|
5
|
-
#
|
|
6
|
-
# Ronin Support is free software: you can redistribute it and/or modify
|
|
7
|
-
# it under the terms of the GNU Lesser General Public License as published
|
|
8
|
-
# by the Free Software Foundation, either version 3 of the License, or
|
|
9
|
-
# (at your option) any later version.
|
|
10
|
-
#
|
|
11
|
-
# Ronin Support is distributed in the hope that it will be useful,
|
|
12
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
-
# GNU Lesser General Public License for more details.
|
|
15
|
-
#
|
|
16
|
-
# You should have received a copy of the GNU Lesser General Public License
|
|
17
|
-
# along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
|
|
18
|
-
#
|
|
19
|
-
|
|
20
|
-
require 'ronin/fuzzing/fuzzing'
|
|
21
|
-
require 'ronin/extensions/regexp'
|
|
22
|
-
|
|
23
|
-
require 'strscan'
|
|
24
|
-
|
|
25
|
-
module Ronin
|
|
26
|
-
module Fuzzing
|
|
27
|
-
#
|
|
28
|
-
# Fuzzing class that incrementally fuzzes a String, given substitution
|
|
29
|
-
# rules.
|
|
30
|
-
#
|
|
31
|
-
# @api semipublic
|
|
32
|
-
#
|
|
33
|
-
# @since 0.5.0
|
|
34
|
-
#
|
|
35
|
-
class Fuzzer
|
|
36
|
-
|
|
37
|
-
# Patterns and their substitutions
|
|
38
|
-
attr_reader :rules
|
|
39
|
-
|
|
40
|
-
#
|
|
41
|
-
# Initializes a new Fuzzer.
|
|
42
|
-
#
|
|
43
|
-
# @param [Hash{Regexp,String,Symbol => Enumerable,Symbol}] rules
|
|
44
|
-
# Patterns and their substitutions.
|
|
45
|
-
#
|
|
46
|
-
def initialize(rules)
|
|
47
|
-
@rules = {}
|
|
48
|
-
|
|
49
|
-
rules.each do |pattern,substitution|
|
|
50
|
-
pattern = case pattern
|
|
51
|
-
when Regexp then pattern
|
|
52
|
-
when String then Regexp.new(Regexp.escape(pattern))
|
|
53
|
-
when Symbol then Regexp.const_get(pattern.to_s.upcase)
|
|
54
|
-
else
|
|
55
|
-
raise(TypeError,"cannot convert #{pattern.inspect} to a Regexp")
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
substitution = case substitution
|
|
59
|
-
when Enumerable then substitution
|
|
60
|
-
when Symbol then Fuzzing[substitution]
|
|
61
|
-
else
|
|
62
|
-
raise(TypeError,"substitutions must be Enumerable or a Symbol")
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
@rules[pattern] = substitution
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
#
|
|
70
|
-
# Incrementally fuzzes the String.
|
|
71
|
-
#
|
|
72
|
-
# @yield [fuzz]
|
|
73
|
-
# The given block will be passed every fuzzed String.
|
|
74
|
-
#
|
|
75
|
-
# @yieldparam [String] fuzz
|
|
76
|
-
# A fuzzed String.
|
|
77
|
-
#
|
|
78
|
-
# @return [Enumerator]
|
|
79
|
-
# If no block is given, an Enumerator will be returned.
|
|
80
|
-
#
|
|
81
|
-
def each(string)
|
|
82
|
-
return enum_for(__method__,string) unless block_given?
|
|
83
|
-
|
|
84
|
-
@rules.each do |pattern,substitution|
|
|
85
|
-
scanner = StringScanner.new(string)
|
|
86
|
-
indices = []
|
|
87
|
-
|
|
88
|
-
while scanner.scan_until(pattern)
|
|
89
|
-
indices << [scanner.pos - scanner.matched_size, scanner.matched_size]
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
indices.each do |index,length|
|
|
93
|
-
substitution.each do |substitute|
|
|
94
|
-
substitute = case substitute
|
|
95
|
-
when Proc then substitute[string[index,length]]
|
|
96
|
-
when Integer then substitute.chr
|
|
97
|
-
else substitute.to_s
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
fuzzed = string.dup
|
|
101
|
-
fuzzed[index,length] = substitute
|
|
102
|
-
yield fuzzed
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
end
|
|
@@ -1,360 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
3
|
-
#
|
|
4
|
-
# This file is part of Ronin Support.
|
|
5
|
-
#
|
|
6
|
-
# Ronin Support is free software: you can redistribute it and/or modify
|
|
7
|
-
# it under the terms of the GNU Lesser General Public License as published
|
|
8
|
-
# by the Free Software Foundation, either version 3 of the License, or
|
|
9
|
-
# (at your option) any later version.
|
|
10
|
-
#
|
|
11
|
-
# Ronin Support is distributed in the hope that it will be useful,
|
|
12
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
-
# GNU Lesser General Public License for more details.
|
|
15
|
-
#
|
|
16
|
-
# You should have received a copy of the GNU Lesser General Public License
|
|
17
|
-
# along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
|
|
18
|
-
#
|
|
19
|
-
|
|
20
|
-
require 'set'
|
|
21
|
-
|
|
22
|
-
module Ronin
|
|
23
|
-
#
|
|
24
|
-
# Contains class-methods which generate malicious data for fuzzing.
|
|
25
|
-
#
|
|
26
|
-
# @see Fuzzing.[]
|
|
27
|
-
#
|
|
28
|
-
# @since 0.4.0
|
|
29
|
-
#
|
|
30
|
-
module Fuzzing
|
|
31
|
-
# Short String lengths
|
|
32
|
-
SHORT_LENGTHS = SortedSet[1, 100, 500, 1_000, 10_000]
|
|
33
|
-
|
|
34
|
-
# Long String lengths
|
|
35
|
-
LONG_LENGTHS = SortedSet[
|
|
36
|
-
128, 255, 256, 257, 511, 512, 513, 1023, 1024, 2048, 2049, 4095,
|
|
37
|
-
4096, 4097, 5_000, 10_000, 20_000, 32762, 32763, 32764, 32765, 32766,
|
|
38
|
-
32767, 32768, 32769,
|
|
39
|
-
0xffff-2, 0xffff-1, 0xffff, 0xffff+1, 0xffff+2,
|
|
40
|
-
99_999, 100_000, 500_000, 1_000_000
|
|
41
|
-
]
|
|
42
|
-
|
|
43
|
-
# Null bytes in various encodings
|
|
44
|
-
NULL_BYTES = ['%00', '%u0000', "\x00"]
|
|
45
|
-
|
|
46
|
-
# Newline characters
|
|
47
|
-
NEW_LINES = ["\n", "\r", "\n\r"]
|
|
48
|
-
|
|
49
|
-
# Format String flags
|
|
50
|
-
FORMAT_STRINGS = ['%p', '%s', '%n']
|
|
51
|
-
|
|
52
|
-
#
|
|
53
|
-
# Returns a fuzzer method.
|
|
54
|
-
#
|
|
55
|
-
# @param [Symbol] name
|
|
56
|
-
# The name of the fuzzer to return.
|
|
57
|
-
#
|
|
58
|
-
# @return [Enumerator]
|
|
59
|
-
# An Enumerator for the fuzzer method.
|
|
60
|
-
#
|
|
61
|
-
# @raise [NoMethodError]
|
|
62
|
-
# The fuzzing method could not be found.
|
|
63
|
-
#
|
|
64
|
-
# @api semipublic
|
|
65
|
-
#
|
|
66
|
-
def self.[](name)
|
|
67
|
-
if (!respond_to?(name) || Module.respond_to?(name))
|
|
68
|
-
raise(NoMethodError,"no such fuzzing method: #{name}")
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
return enum_for(name)
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
module_function
|
|
75
|
-
|
|
76
|
-
#
|
|
77
|
-
# Various bad-strings.
|
|
78
|
-
#
|
|
79
|
-
# @yield [string]
|
|
80
|
-
# The given block will be passed each bad-string.
|
|
81
|
-
#
|
|
82
|
-
# @yieldparam [String] string
|
|
83
|
-
# A bad-string containing known control characters, deliminators
|
|
84
|
-
# or null-bytes (see {NULL_BYTES}), of varying length
|
|
85
|
-
# (see {SHORT_LENGTHS} and {LONG_LENGTHS}).
|
|
86
|
-
#
|
|
87
|
-
def bad_strings(&block)
|
|
88
|
-
yield ''
|
|
89
|
-
|
|
90
|
-
chars = [
|
|
91
|
-
'A', 'a', '1', '<', '>', '"', "'", '/', "\\", '?', '=', 'a=', '&',
|
|
92
|
-
'.', ',', '(', ')', ']', '[', '%', '*', '-', '+', '{', '}',
|
|
93
|
-
"\x14", "\xfe", "\xff"
|
|
94
|
-
]
|
|
95
|
-
|
|
96
|
-
chars.each do |c|
|
|
97
|
-
LONG_LENGTHS.each { |length| yield c * length }
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
yield '!@#$%%^#$%#$@#$%$$@#$%^^**(()'
|
|
101
|
-
yield '%01%02%03%04%0a%0d%0aADSF'
|
|
102
|
-
yield '%01%02%03@%04%0a%0d%0aADSF'
|
|
103
|
-
|
|
104
|
-
NULL_BYTES.each do |c|
|
|
105
|
-
SHORT_LENGTHS.each { |length| yield c * length }
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
yield "%\xfe\xf0%\x00\xff"
|
|
109
|
-
yield "%\xfe\xf0%\x00\xff" * 20
|
|
110
|
-
|
|
111
|
-
SHORT_LENGTHS.each do |length|
|
|
112
|
-
yield "\xde\xad\xbe\xef" * length
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
yield "\n\r" * 100
|
|
116
|
-
yield "<>" * 500
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
#
|
|
120
|
-
# Various format-strings.
|
|
121
|
-
#
|
|
122
|
-
# @yield [fmt_string]
|
|
123
|
-
# The given block will be passed each format-string.
|
|
124
|
-
#
|
|
125
|
-
# @yieldparam [String] fmt_string
|
|
126
|
-
# A format-string containing format operators (see {FORMAT_STRINGS}).
|
|
127
|
-
#
|
|
128
|
-
def format_strings(&block)
|
|
129
|
-
FORMAT_STRINGS.each do |fmt|
|
|
130
|
-
yield fmt
|
|
131
|
-
yield fmt * 100
|
|
132
|
-
yield fmt * 500
|
|
133
|
-
yield "\"#{fmt}\"" * 500
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
#
|
|
138
|
-
# Various bad paths and directory traversals.
|
|
139
|
-
#
|
|
140
|
-
# @yield [path]
|
|
141
|
-
# The given block will be passed each path.
|
|
142
|
-
#
|
|
143
|
-
# @yieldparam [String] path
|
|
144
|
-
# A known bad path.
|
|
145
|
-
#
|
|
146
|
-
def bad_paths(&block)
|
|
147
|
-
padding = 'A' * 5_000
|
|
148
|
-
|
|
149
|
-
yield "/.:/#{padding}\x00\x00"
|
|
150
|
-
yield "/.../#{padding}\x00\x00"
|
|
151
|
-
|
|
152
|
-
yield "\\\\*"
|
|
153
|
-
yield "\\\\?\\"
|
|
154
|
-
|
|
155
|
-
yield "/\\" * 5_000
|
|
156
|
-
yield '/.' * 5_000
|
|
157
|
-
|
|
158
|
-
NULL_BYTES.each do |c|
|
|
159
|
-
if c.start_with?('%')
|
|
160
|
-
yield "#{c}/"
|
|
161
|
-
yield "/#{c}"
|
|
162
|
-
yield "/#{c}/"
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
#
|
|
168
|
-
# The range of bit-fields.
|
|
169
|
-
#
|
|
170
|
-
# @yield [bitfield]
|
|
171
|
-
# The given block will be passed each bit-field.
|
|
172
|
-
#
|
|
173
|
-
# @yieldparam [String] bitfield
|
|
174
|
-
# A bit-field (8bit - 64bit).
|
|
175
|
-
#
|
|
176
|
-
def bit_fields(&block)
|
|
177
|
-
("\x00".."\xff").each do |c|
|
|
178
|
-
yield c
|
|
179
|
-
yield c << c # x2
|
|
180
|
-
yield c << c # x4
|
|
181
|
-
yield c << c # x8
|
|
182
|
-
end
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
#
|
|
186
|
-
# The range of signed bit-fields.
|
|
187
|
-
#
|
|
188
|
-
# @yield [bitfield]
|
|
189
|
-
# The given block will be passed each bit-field.
|
|
190
|
-
#
|
|
191
|
-
# @yieldparam [String] bitfield
|
|
192
|
-
# A signed bit-field (8bit - 64bit).
|
|
193
|
-
#
|
|
194
|
-
def signed_bit_fields(&block)
|
|
195
|
-
("\x80".."\xff").each do |c|
|
|
196
|
-
yield c
|
|
197
|
-
yield c << c # x2
|
|
198
|
-
yield c << c # x4
|
|
199
|
-
yield c << c # x8
|
|
200
|
-
end
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
#
|
|
204
|
-
# The range of unsigned 8bit integers.
|
|
205
|
-
#
|
|
206
|
-
# @yield [int]
|
|
207
|
-
# The given block will be passed each integer.
|
|
208
|
-
#
|
|
209
|
-
# @yieldparam [String] int
|
|
210
|
-
# A unsigned 8bit integer.
|
|
211
|
-
#
|
|
212
|
-
def uint8(&block)
|
|
213
|
-
("\x00".."\xff").each(&block)
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
#
|
|
217
|
-
# The range of unsigned 16bit integers.
|
|
218
|
-
#
|
|
219
|
-
# @yield [int]
|
|
220
|
-
# The given block will be passed each integer.
|
|
221
|
-
#
|
|
222
|
-
# @yieldparam [String] int
|
|
223
|
-
# A unsigned 16bit integer.
|
|
224
|
-
#
|
|
225
|
-
def uint16
|
|
226
|
-
uint8 { |c| yield c * 2 }
|
|
227
|
-
end
|
|
228
|
-
|
|
229
|
-
#
|
|
230
|
-
# The range of unsigned 32bit integers.
|
|
231
|
-
#
|
|
232
|
-
# @yield [int]
|
|
233
|
-
# The given block will be passed each integer.
|
|
234
|
-
#
|
|
235
|
-
# @yieldparam [String] int
|
|
236
|
-
# A unsigned 32bit integer.
|
|
237
|
-
#
|
|
238
|
-
def uint32
|
|
239
|
-
uint8 { |c| yield c * 4 }
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
#
|
|
243
|
-
# The range of unsigned 64bit integers.
|
|
244
|
-
#
|
|
245
|
-
# @yield [int]
|
|
246
|
-
# The given block will be passed each integer.
|
|
247
|
-
#
|
|
248
|
-
# @yieldparam [String] int
|
|
249
|
-
# A unsigned 64bit integer.
|
|
250
|
-
#
|
|
251
|
-
def uint64
|
|
252
|
-
uint8 { |c| yield c * 8 }
|
|
253
|
-
end
|
|
254
|
-
|
|
255
|
-
#
|
|
256
|
-
# The range of signed 8bit integers.
|
|
257
|
-
#
|
|
258
|
-
# @yield [int]
|
|
259
|
-
# The given block will be passed each integer.
|
|
260
|
-
#
|
|
261
|
-
# @yieldparam [String] int
|
|
262
|
-
# A signed 8bit integer.
|
|
263
|
-
#
|
|
264
|
-
def int8(&block)
|
|
265
|
-
("\x00".."\x70").each(&block)
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
#
|
|
269
|
-
# The range of signed 16bit integers.
|
|
270
|
-
#
|
|
271
|
-
# @yield [int]
|
|
272
|
-
# The given block will be passed each integer.
|
|
273
|
-
#
|
|
274
|
-
# @yieldparam [String] int
|
|
275
|
-
# A signed 16bit integer.
|
|
276
|
-
#
|
|
277
|
-
def int16
|
|
278
|
-
int8 { |c| yield c * 2 }
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
#
|
|
282
|
-
# The range of signed 32bit integers.
|
|
283
|
-
#
|
|
284
|
-
# @yield [int]
|
|
285
|
-
# The given block will be passed each integer.
|
|
286
|
-
#
|
|
287
|
-
# @yieldparam [String] int
|
|
288
|
-
# A signed 32bit integer.
|
|
289
|
-
#
|
|
290
|
-
def int32
|
|
291
|
-
int8 { |c| yield c * 4 }
|
|
292
|
-
end
|
|
293
|
-
|
|
294
|
-
#
|
|
295
|
-
# The range of signed 64bit integers.
|
|
296
|
-
#
|
|
297
|
-
# @yield [int]
|
|
298
|
-
# The given block will be passed each integer.
|
|
299
|
-
#
|
|
300
|
-
# @yieldparam [String] int
|
|
301
|
-
# A signed 64bit integer.
|
|
302
|
-
#
|
|
303
|
-
def int64
|
|
304
|
-
int8 { |c| yield c * 8 }
|
|
305
|
-
end
|
|
306
|
-
|
|
307
|
-
#
|
|
308
|
-
# The range of negative-signed 8bit integers.
|
|
309
|
-
#
|
|
310
|
-
# @yield [int]
|
|
311
|
-
# The given block will be passed each integer.
|
|
312
|
-
#
|
|
313
|
-
# @yieldparam [String] int
|
|
314
|
-
# A negative-signed 8bit integer.
|
|
315
|
-
#
|
|
316
|
-
def sint8(&block)
|
|
317
|
-
("\x80".."\xff").each(&block)
|
|
318
|
-
end
|
|
319
|
-
|
|
320
|
-
#
|
|
321
|
-
# The range of negative-signed 16bit integers.
|
|
322
|
-
#
|
|
323
|
-
# @yield [int]
|
|
324
|
-
# The given block will be passed each integer.
|
|
325
|
-
#
|
|
326
|
-
# @yieldparam [String] int
|
|
327
|
-
# A negative-signed 16bit integer.
|
|
328
|
-
#
|
|
329
|
-
def sint16
|
|
330
|
-
sint8 { |c| yield c * 2 }
|
|
331
|
-
end
|
|
332
|
-
|
|
333
|
-
#
|
|
334
|
-
# The range of negative-signed 32bit integers.
|
|
335
|
-
#
|
|
336
|
-
# @yield [int]
|
|
337
|
-
# The given block will be passed each integer.
|
|
338
|
-
#
|
|
339
|
-
# @yieldparam [String] int
|
|
340
|
-
# A negative-signed 32bit integer.
|
|
341
|
-
#
|
|
342
|
-
def sint32
|
|
343
|
-
sint8 { |c| yield c * 4 }
|
|
344
|
-
end
|
|
345
|
-
|
|
346
|
-
#
|
|
347
|
-
# The range of negative-signed 64bit integers.
|
|
348
|
-
#
|
|
349
|
-
# @yield [int]
|
|
350
|
-
# The given block will be passed each integer.
|
|
351
|
-
#
|
|
352
|
-
# @yieldparam [String] int
|
|
353
|
-
# A negative-signed 64bit integer.
|
|
354
|
-
#
|
|
355
|
-
def sint64
|
|
356
|
-
sint8 { |c| yield c * 8 }
|
|
357
|
-
end
|
|
358
|
-
|
|
359
|
-
end
|
|
360
|
-
end
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
3
|
-
#
|
|
4
|
-
# This file is part of Ronin Support.
|
|
5
|
-
#
|
|
6
|
-
# Ronin Support is free software: you can redistribute it and/or modify
|
|
7
|
-
# it under the terms of the GNU Lesser General Public License as published
|
|
8
|
-
# by the Free Software Foundation, either version 3 of the License, or
|
|
9
|
-
# (at your option) any later version.
|
|
10
|
-
#
|
|
11
|
-
# Ronin Support is distributed in the hope that it will be useful,
|
|
12
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
-
# GNU Lesser General Public License for more details.
|
|
15
|
-
#
|
|
16
|
-
# You should have received a copy of the GNU Lesser General Public License
|
|
17
|
-
# along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
|
|
18
|
-
#
|
|
19
|
-
|
|
20
|
-
require 'ronin/fuzzing/fuzzing'
|
|
21
|
-
require 'ronin/extensions/regexp'
|
|
22
|
-
|
|
23
|
-
require 'combinatorics/list_comprehension'
|
|
24
|
-
require 'combinatorics/power_set'
|
|
25
|
-
require 'combinatorics/generator'
|
|
26
|
-
require 'strscan'
|
|
27
|
-
require 'set'
|
|
28
|
-
|
|
29
|
-
module Ronin
|
|
30
|
-
module Fuzzing
|
|
31
|
-
#
|
|
32
|
-
# Fuzzer class that permutates over every mutation of a String, given
|
|
33
|
-
# mutation rules.
|
|
34
|
-
#
|
|
35
|
-
# @api semipublic
|
|
36
|
-
#
|
|
37
|
-
# @since 0.5.0
|
|
38
|
-
#
|
|
39
|
-
class Mutator
|
|
40
|
-
|
|
41
|
-
# Mutation rules
|
|
42
|
-
attr_reader :rules
|
|
43
|
-
|
|
44
|
-
#
|
|
45
|
-
# Initialize the Mutator.
|
|
46
|
-
#
|
|
47
|
-
# @param [Hash{Regexp,String,Symbol => Symbol,Enumerable}] rules
|
|
48
|
-
# The patterns and substitutions to mutate the String with.
|
|
49
|
-
#
|
|
50
|
-
# @raise [TypeError]
|
|
51
|
-
# A mutation pattern was not a Regexp, String or Symbol.
|
|
52
|
-
# A mutation substitution was not a Symbol or Enumerable.
|
|
53
|
-
#
|
|
54
|
-
def initialize(rules)
|
|
55
|
-
@rules = {}
|
|
56
|
-
|
|
57
|
-
rules.each do |pattern,mutation|
|
|
58
|
-
pattern = case pattern
|
|
59
|
-
when Regexp
|
|
60
|
-
pattern
|
|
61
|
-
when String
|
|
62
|
-
Regexp.new(Regexp.escape(pattern))
|
|
63
|
-
when Symbol
|
|
64
|
-
Regexp.const_get(pattern.to_s.upcase)
|
|
65
|
-
else
|
|
66
|
-
raise(TypeError,"cannot convert #{pattern.inspect} to a Regexp")
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
mutation = case mutation
|
|
70
|
-
when Enumerable
|
|
71
|
-
mutation
|
|
72
|
-
when Symbol
|
|
73
|
-
Ronin::Fuzzing[mutation]
|
|
74
|
-
else
|
|
75
|
-
raise(TypeError,"mutation #{mutation.inspect} must be a Symbol or Enumerable")
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
@rules[pattern] = mutation
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
#
|
|
83
|
-
# Permutes over every possible mutation of the String.
|
|
84
|
-
#
|
|
85
|
-
# @param [String] string
|
|
86
|
-
# The String to be mutated.
|
|
87
|
-
#
|
|
88
|
-
# @yield [mutant]
|
|
89
|
-
# The given block will be yielded every possible mutant String.
|
|
90
|
-
#
|
|
91
|
-
# @yieldparam [String] mutant
|
|
92
|
-
# A mutated String.
|
|
93
|
-
#
|
|
94
|
-
# @return [Enumerator]
|
|
95
|
-
# If no block is given, an Enumerator will be returned.
|
|
96
|
-
#
|
|
97
|
-
def each(string)
|
|
98
|
-
return enum_for(__method__,string) unless block_given?
|
|
99
|
-
|
|
100
|
-
matches = Set[]
|
|
101
|
-
|
|
102
|
-
@rules.each do |pattern,mutation|
|
|
103
|
-
scanner = StringScanner.new(string)
|
|
104
|
-
|
|
105
|
-
while scanner.scan_until(pattern)
|
|
106
|
-
length = scanner.matched_size
|
|
107
|
-
index = scanner.pos - length
|
|
108
|
-
original = scanner.matched
|
|
109
|
-
|
|
110
|
-
mutator = Combinatorics::Generator.new do |g|
|
|
111
|
-
mutation.each do |mutate|
|
|
112
|
-
g.yield case mutate
|
|
113
|
-
when Proc
|
|
114
|
-
mutate.call(original)
|
|
115
|
-
when Integer
|
|
116
|
-
mutate.chr
|
|
117
|
-
else
|
|
118
|
-
mutate.to_s
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
matches << [index, length, mutator]
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
matches.powerset do |submatches|
|
|
128
|
-
# ignore the empty Set
|
|
129
|
-
next if submatches.empty?
|
|
130
|
-
|
|
131
|
-
# sort the submatches by index
|
|
132
|
-
submatches = submatches.sort_by { |index,length,mutator| index }
|
|
133
|
-
sets = []
|
|
134
|
-
prev_index = 0
|
|
135
|
-
|
|
136
|
-
submatches.each do |index,length,mutator|
|
|
137
|
-
# add the previous substring to the set of Strings
|
|
138
|
-
if index > prev_index
|
|
139
|
-
sets << [string[prev_index,index - prev_index]]
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
# add the mutator to the set of Strings
|
|
143
|
-
sets << mutator
|
|
144
|
-
|
|
145
|
-
prev_index = index + length
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
# add the remaining substring to the set of Strings
|
|
149
|
-
if prev_index < string.length
|
|
150
|
-
sets << [string[prev_index..-1]]
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
sets.comprehension { |strings| yield strings.join }
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
return nil
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
end
|
|
160
|
-
end
|
|
161
|
-
end
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
3
|
-
#
|
|
4
|
-
# This file is part of Ronin Support.
|
|
5
|
-
#
|
|
6
|
-
# Ronin Support is free software: you can redistribute it and/or modify
|
|
7
|
-
# it under the terms of the GNU Lesser General Public License as published
|
|
8
|
-
# by the Free Software Foundation, either version 3 of the License, or
|
|
9
|
-
# (at your option) any later version.
|
|
10
|
-
#
|
|
11
|
-
# Ronin Support is distributed in the hope that it will be useful,
|
|
12
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
-
# GNU Lesser General Public License for more details.
|
|
15
|
-
#
|
|
16
|
-
# You should have received a copy of the GNU Lesser General Public License
|
|
17
|
-
# along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
|
|
18
|
-
#
|
|
19
|
-
|
|
20
|
-
module Ronin
|
|
21
|
-
module Fuzzing
|
|
22
|
-
#
|
|
23
|
-
# Fuzzing class that generates repeated data.
|
|
24
|
-
#
|
|
25
|
-
# @api semipublic
|
|
26
|
-
#
|
|
27
|
-
# @since 0.5.0
|
|
28
|
-
#
|
|
29
|
-
class Repeater
|
|
30
|
-
|
|
31
|
-
# The lengths to repeat the data by
|
|
32
|
-
attr_reader :lengths
|
|
33
|
-
|
|
34
|
-
#
|
|
35
|
-
# Initializes a new Repeater.
|
|
36
|
-
#
|
|
37
|
-
# @param [Enumerable, Integer] lengths
|
|
38
|
-
# The lengths to repeat the data by.
|
|
39
|
-
#
|
|
40
|
-
# @raise [TypeError]
|
|
41
|
-
# `lengths` must either be Enumerable or an Integer.
|
|
42
|
-
#
|
|
43
|
-
def initialize(lengths)
|
|
44
|
-
@lengths = case lengths
|
|
45
|
-
when Integer
|
|
46
|
-
[lengths]
|
|
47
|
-
when Enumerable
|
|
48
|
-
lengths
|
|
49
|
-
else
|
|
50
|
-
raise(TypeError,"argument must be Enumerable or an Integer")
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
#
|
|
55
|
-
# Enumerates through each length of repeated data.
|
|
56
|
-
#
|
|
57
|
-
# @param [#*] repeatable
|
|
58
|
-
# The repeatable data.
|
|
59
|
-
#
|
|
60
|
-
# @yield [repeated]
|
|
61
|
-
# The given block will be passed every repeated String.
|
|
62
|
-
#
|
|
63
|
-
# @yieldparam [String] repeated
|
|
64
|
-
# A repeated version of the String.
|
|
65
|
-
#
|
|
66
|
-
# @return [Enumerator]
|
|
67
|
-
# If no block is given, an Enumerator will be returned.
|
|
68
|
-
#
|
|
69
|
-
def each(repeatable)
|
|
70
|
-
return enum_for(__method__,repeatable) unless block_given?
|
|
71
|
-
|
|
72
|
-
@lengths.each do |length|
|
|
73
|
-
yield(repeatable * length)
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
return nil
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|