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,293 @@
|
|
|
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 'strscan'
|
|
20
|
+
|
|
21
|
+
module Ronin
|
|
22
|
+
module Support
|
|
23
|
+
class Encoding < ::Encoding
|
|
24
|
+
#
|
|
25
|
+
# Contains methods for encoding/decoding escaping/unescaping Shell data.
|
|
26
|
+
#
|
|
27
|
+
# @api public
|
|
28
|
+
#
|
|
29
|
+
module Shell
|
|
30
|
+
# Special shell bytes and their escaped Strings.
|
|
31
|
+
ESCAPE_BYTES = {
|
|
32
|
+
0x00 => "\\0", # $'\0'
|
|
33
|
+
0x07 => "\\a", # $'\a'
|
|
34
|
+
0x08 => "\\b", # $'\b'
|
|
35
|
+
0x09 => "\\t", # $'\t'
|
|
36
|
+
0x0a => "\\n", # $'\n'
|
|
37
|
+
0x0b => "\\v", # $'\v'
|
|
38
|
+
0x0c => "\\f", # $'\f'
|
|
39
|
+
0x0d => "\\r", # $'\r'
|
|
40
|
+
0x1B => "\\e", # $'\e'
|
|
41
|
+
0x22 => "\\\"", # \"
|
|
42
|
+
0x23 => "\\#", # \#
|
|
43
|
+
0x5c => "\\\\" # \\
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
#
|
|
47
|
+
# Encodes the byte as a shell character.
|
|
48
|
+
#
|
|
49
|
+
# @param [Integer] byte
|
|
50
|
+
# The byte value to encode.
|
|
51
|
+
#
|
|
52
|
+
# @return [String]
|
|
53
|
+
# The encoded shell character.
|
|
54
|
+
#
|
|
55
|
+
# @raise [RangeError]
|
|
56
|
+
# The byte value is negative.
|
|
57
|
+
#
|
|
58
|
+
# @example
|
|
59
|
+
# Encoding::Shell.encode_byte(0x41)
|
|
60
|
+
# # => "\\x41"
|
|
61
|
+
# Encoding::Shell.encode_byte(0x0a)
|
|
62
|
+
# # => "\\n"
|
|
63
|
+
#
|
|
64
|
+
# @example Encoding unicode characters:
|
|
65
|
+
# Encoding::Shell.encode_byte(1001)
|
|
66
|
+
# # => "\\u1001"
|
|
67
|
+
#
|
|
68
|
+
def self.encode_byte(byte)
|
|
69
|
+
if byte >= 0x00 && byte <= 0xff
|
|
70
|
+
"\\x%.2x" % byte
|
|
71
|
+
elsif byte > 0xff
|
|
72
|
+
"\\u%x" % byte
|
|
73
|
+
else
|
|
74
|
+
raise(RangeError,"#{byte.inspect} out of char range")
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
#
|
|
79
|
+
# Escapes the byte as a shell character.
|
|
80
|
+
#
|
|
81
|
+
# @param [Integer] byte
|
|
82
|
+
# The byte value to escape.
|
|
83
|
+
#
|
|
84
|
+
# @return [String]
|
|
85
|
+
# The escaped shell character.
|
|
86
|
+
#
|
|
87
|
+
# @raise [RangeError]
|
|
88
|
+
# The integer value is negative.
|
|
89
|
+
#
|
|
90
|
+
# @example
|
|
91
|
+
# Encoding::Shell.escape(0x41)
|
|
92
|
+
# # => "A"
|
|
93
|
+
# Encoding::Shell.escape(0x08)
|
|
94
|
+
# # => "\b"
|
|
95
|
+
# Encoding::Shell.escape(0xff)
|
|
96
|
+
# # => "\xff"
|
|
97
|
+
#
|
|
98
|
+
# @example Escaping unicode characters:
|
|
99
|
+
# Encoding::Shell.escape(1001)
|
|
100
|
+
# # => "\\u1001"
|
|
101
|
+
#
|
|
102
|
+
def self.escape_byte(byte)
|
|
103
|
+
if byte >= 0x00 && byte <= 0xff
|
|
104
|
+
ESCAPE_BYTES.fetch(byte) do
|
|
105
|
+
if byte >= 0x20 && byte <= 0x7e
|
|
106
|
+
byte.chr
|
|
107
|
+
else
|
|
108
|
+
encode_byte(byte)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
else
|
|
112
|
+
encode_byte(byte)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Shell characters that must be back-slashed.
|
|
117
|
+
BACKSLASHED_CHARS = {
|
|
118
|
+
'0' => "\0",
|
|
119
|
+
'a' => "\a",
|
|
120
|
+
'b' => "\b",
|
|
121
|
+
'e' => "\e",
|
|
122
|
+
't' => "\t",
|
|
123
|
+
'n' => "\n",
|
|
124
|
+
'v' => "\v",
|
|
125
|
+
'f' => "\f",
|
|
126
|
+
'r' => "\r",
|
|
127
|
+
"'" => "'",
|
|
128
|
+
'"' => '"'
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
#
|
|
132
|
+
# Shell escapes any special characters in the given data.
|
|
133
|
+
#
|
|
134
|
+
# @param [String] data
|
|
135
|
+
# The data to shell escape.
|
|
136
|
+
#
|
|
137
|
+
# @return [String]
|
|
138
|
+
# The shell escaped string.
|
|
139
|
+
#
|
|
140
|
+
# @example
|
|
141
|
+
# Encoding::Shell.escape("hello\nworld")
|
|
142
|
+
# # => "hello\\nworld"
|
|
143
|
+
#
|
|
144
|
+
def self.escape(data)
|
|
145
|
+
escaped = String.new
|
|
146
|
+
|
|
147
|
+
if data.valid_encoding?
|
|
148
|
+
data.each_codepoint do |codepoint|
|
|
149
|
+
escaped << escape_byte(codepoint)
|
|
150
|
+
end
|
|
151
|
+
else
|
|
152
|
+
data.each_byte do |byte|
|
|
153
|
+
escaped << escape_byte(byte)
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
return escaped
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
#
|
|
161
|
+
# Shell unescapes the given data.
|
|
162
|
+
#
|
|
163
|
+
# @param [String] data
|
|
164
|
+
# The data to shell unescape.
|
|
165
|
+
#
|
|
166
|
+
# @return [String]
|
|
167
|
+
# The shell unescaped string.
|
|
168
|
+
#
|
|
169
|
+
# @example
|
|
170
|
+
# "hello\\nworld".shell_unescape
|
|
171
|
+
# # => "hello\nworld"
|
|
172
|
+
#
|
|
173
|
+
def self.unescape(data)
|
|
174
|
+
unescaped = String.new
|
|
175
|
+
scanner = StringScanner.new(data)
|
|
176
|
+
|
|
177
|
+
until scanner.eos?
|
|
178
|
+
unescaped << if (backslash_char = scanner.scan(/\\[0abetnvfr\'\"]/)) # \n
|
|
179
|
+
BACKSLASHED_CHARS[backslash_char[1..]]
|
|
180
|
+
elsif (hex_char = scanner.scan(/\\x[0-9a-fA-F]+/)) # \XX
|
|
181
|
+
hex_char[2..].to_i(16).chr
|
|
182
|
+
elsif (unicode_char = scanner.scan(/\\u[0-9a-fA-F]+/)) # \uXXXX
|
|
183
|
+
unicode_char[2..].to_i(16).chr(Encoding::UTF_8)
|
|
184
|
+
else
|
|
185
|
+
scanner.getch
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
return unescaped
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
#
|
|
193
|
+
# Shell encodes every character in the given data.
|
|
194
|
+
#
|
|
195
|
+
# @param [String] data
|
|
196
|
+
# The data to shell encode.
|
|
197
|
+
#
|
|
198
|
+
# @return [String]
|
|
199
|
+
# The shell encoded String.
|
|
200
|
+
#
|
|
201
|
+
# @example
|
|
202
|
+
# Encoding::Shell.encode("hello world")
|
|
203
|
+
# # => "\\x68\\x65\\x6c\\x6c\\x6f\\x0a\\x77\\x6f\\x72\\x6c\\x64"
|
|
204
|
+
#
|
|
205
|
+
def self.encode(data)
|
|
206
|
+
encoded = String.new
|
|
207
|
+
|
|
208
|
+
if data.valid_encoding?
|
|
209
|
+
data.each_codepoint do |codepoint|
|
|
210
|
+
encoded << encode_byte(codepoint)
|
|
211
|
+
end
|
|
212
|
+
else
|
|
213
|
+
data.each_byte do |byte|
|
|
214
|
+
encoded << encode_byte(byte)
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
return encoded
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
#
|
|
222
|
+
# Alias for {unescape}.
|
|
223
|
+
#
|
|
224
|
+
# @param [String] data
|
|
225
|
+
# The data to shell unescape.
|
|
226
|
+
#
|
|
227
|
+
# @return [String]
|
|
228
|
+
# The shell unescaped string.
|
|
229
|
+
#
|
|
230
|
+
# @see unescape
|
|
231
|
+
#
|
|
232
|
+
def self.decode(data)
|
|
233
|
+
unescape(data)
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
#
|
|
237
|
+
# Converts the given data into a double-quoted shell escaped String.
|
|
238
|
+
#
|
|
239
|
+
# @param [String] data
|
|
240
|
+
# The given data to shell escape and quote.
|
|
241
|
+
#
|
|
242
|
+
# @return [String]
|
|
243
|
+
# The quoted and escaped shell string.
|
|
244
|
+
#
|
|
245
|
+
# @example
|
|
246
|
+
# Encoding::Shell.quote("hello world")
|
|
247
|
+
# # => "\"hello world\""
|
|
248
|
+
# Encoding::Shell.quote("hello\nworld")
|
|
249
|
+
# # => "$'hello\\nworld'"
|
|
250
|
+
#
|
|
251
|
+
def self.quote(data)
|
|
252
|
+
if data =~ /[^[:print:]]/
|
|
253
|
+
"$'#{escape(data)}'"
|
|
254
|
+
else
|
|
255
|
+
"\"#{escape(data)}\""
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
#
|
|
260
|
+
# Removes the quotes an unescapes a shell string.
|
|
261
|
+
#
|
|
262
|
+
# @param [String] data
|
|
263
|
+
# The quoted and escaped shell string to unquote and unescape.
|
|
264
|
+
#
|
|
265
|
+
# @return [String]
|
|
266
|
+
# The un-quoted String if the String begins and ends with quotes, or
|
|
267
|
+
# the same String if it is not quoted.
|
|
268
|
+
#
|
|
269
|
+
# @example
|
|
270
|
+
# Encoding::Shell.unquote("\"hello \\\"world\\\"\"")
|
|
271
|
+
# # => "hello \"world\""
|
|
272
|
+
# Encoding::Shell.unquote("'hello\\'world'")
|
|
273
|
+
# # => "hello'world"
|
|
274
|
+
# Encoding::Shell.unquote("$'hello\\nworld'")
|
|
275
|
+
# # => "hello\nworld"
|
|
276
|
+
#
|
|
277
|
+
def self.unquote(data)
|
|
278
|
+
if (data[0,2] == "$'" && data[-1] == "'")
|
|
279
|
+
unescape(data[2..-2])
|
|
280
|
+
elsif (data[0] == '"' && data[-1] == '"')
|
|
281
|
+
data[1..-2].gsub("\\\"",'"')
|
|
282
|
+
elsif (data[0] == "'" && data[-1] == "'")
|
|
283
|
+
data[1..-2].gsub("\\'","'")
|
|
284
|
+
else
|
|
285
|
+
data
|
|
286
|
+
end
|
|
287
|
+
end
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
require 'ronin/support/encoding/shell/core_ext'
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
#
|
|
2
|
-
# Copyright (c) 2006-
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
3
4
|
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
# Ronin Support is free software: you can redistribute it and/or modify
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
7
6
|
# it under the terms of the GNU Lesser General Public License as published
|
|
8
7
|
# by the Free Software Foundation, either version 3 of the License, or
|
|
9
8
|
# (at your option) any later version.
|
|
10
9
|
#
|
|
11
|
-
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
12
11
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
12
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
13
|
# GNU Lesser General Public License for more details.
|
|
15
14
|
#
|
|
16
15
|
# You should have received a copy of the GNU Lesser General Public License
|
|
17
|
-
# along with
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
18
17
|
#
|
|
19
18
|
|
|
20
|
-
require 'ronin/
|
|
19
|
+
require 'ronin/support/encoding/base64'
|
|
20
|
+
require 'ronin/support/encoding/quoted_printable'
|
|
@@ -0,0 +1,114 @@
|
|
|
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/encoding/sql'
|
|
20
|
+
|
|
21
|
+
class String
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# Escapes an String for SQL.
|
|
25
|
+
#
|
|
26
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
27
|
+
# Additional keyword arguments.
|
|
28
|
+
#
|
|
29
|
+
# @option kwargs [:single, :double, :tick] :quotes (:single)
|
|
30
|
+
# Specifies whether to create a single or double quoted string.
|
|
31
|
+
#
|
|
32
|
+
# @return [String]
|
|
33
|
+
# The escaped String.
|
|
34
|
+
#
|
|
35
|
+
# @raise [ArgumentError]
|
|
36
|
+
# The quotes argument was neither `:single`, `:double` nor `:tick`.
|
|
37
|
+
#
|
|
38
|
+
# @example
|
|
39
|
+
# "O'Brian".sql_escape
|
|
40
|
+
# # => "'O''Brian'"
|
|
41
|
+
#
|
|
42
|
+
# @example Encode with double-quotes:
|
|
43
|
+
# "O'Brian".sql_escape(:double)
|
|
44
|
+
# # => "\"O'Brian\""
|
|
45
|
+
#
|
|
46
|
+
# @api public
|
|
47
|
+
#
|
|
48
|
+
# @see Ronin::Support::Encoding::SQL.escape
|
|
49
|
+
#
|
|
50
|
+
def sql_escape(**kwargs)
|
|
51
|
+
Ronin::Support::Encoding::SQL.escape(self,**kwargs)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
#
|
|
55
|
+
# Unescapes a SQL String.
|
|
56
|
+
#
|
|
57
|
+
# @return [String]
|
|
58
|
+
# The unescaped String.
|
|
59
|
+
#
|
|
60
|
+
# @raise [ArgumentError]
|
|
61
|
+
# The String was not quoted with single, double or tick-mark quotes.
|
|
62
|
+
#
|
|
63
|
+
# @example
|
|
64
|
+
# "'O''Brian'".sql_unescape
|
|
65
|
+
# # => "O'Brian"
|
|
66
|
+
#
|
|
67
|
+
# @api public
|
|
68
|
+
#
|
|
69
|
+
# @see Ronin::Support::Encoding::SQL.unescape
|
|
70
|
+
#
|
|
71
|
+
# @since 1.0.0
|
|
72
|
+
#
|
|
73
|
+
def sql_unescape
|
|
74
|
+
Ronin::Support::Encoding::SQL.unescape(self)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
#
|
|
78
|
+
# Returns the SQL hex-string encoded form of the String.
|
|
79
|
+
#
|
|
80
|
+
# @example
|
|
81
|
+
# "/etc/passwd".sql_encode
|
|
82
|
+
# # => "0x2f6574632f706173737764"
|
|
83
|
+
#
|
|
84
|
+
# @api public
|
|
85
|
+
#
|
|
86
|
+
# @see Ronin::Support::Encoding::SQL.encode
|
|
87
|
+
#
|
|
88
|
+
def sql_encode
|
|
89
|
+
Ronin::Support::Encoding::SQL.encode(self)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
#
|
|
93
|
+
# Returns the SQL decoded form of the String.
|
|
94
|
+
#
|
|
95
|
+
# @example
|
|
96
|
+
# "'Conan O''Brian'".sql_decode
|
|
97
|
+
# # => "Conan O'Brian"
|
|
98
|
+
#
|
|
99
|
+
# @example
|
|
100
|
+
# "2f6574632f706173737764".sql_decode
|
|
101
|
+
# # => "/etc/passwd"
|
|
102
|
+
#
|
|
103
|
+
# @raise
|
|
104
|
+
# The String is neither hex encoded or SQL escaped.
|
|
105
|
+
#
|
|
106
|
+
# @see Ronin::Support::Encoding::SQL.decode
|
|
107
|
+
#
|
|
108
|
+
# @api public
|
|
109
|
+
#
|
|
110
|
+
def sql_decode
|
|
111
|
+
Ronin::Support::Encoding::SQL.decode(self)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
end
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
#
|
|
2
|
-
# Copyright (c) 2006-
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
3
4
|
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
# Ronin Support is free software: you can redistribute it and/or modify
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
7
6
|
# it under the terms of the GNU Lesser General Public License as published
|
|
8
7
|
# by the Free Software Foundation, either version 3 of the License, or
|
|
9
8
|
# (at your option) any later version.
|
|
10
9
|
#
|
|
11
|
-
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
12
11
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
12
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
13
|
# GNU Lesser General Public License for more details.
|
|
15
14
|
#
|
|
16
15
|
# You should have received a copy of the GNU Lesser General Public License
|
|
17
|
-
# along with
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
18
17
|
#
|
|
19
18
|
|
|
20
|
-
require 'ronin/
|
|
19
|
+
require 'ronin/support/encoding/sql/core_ext/string'
|
|
@@ -0,0 +1,124 @@
|
|
|
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
|
+
class Encoding < ::Encoding
|
|
22
|
+
module SQL
|
|
23
|
+
# The quote styles and their quote characters.
|
|
24
|
+
QUOTE_STYLES = {
|
|
25
|
+
single: "'",
|
|
26
|
+
double: '"',
|
|
27
|
+
tick: '`'
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
#
|
|
31
|
+
# Escapes a String for SQL.
|
|
32
|
+
#
|
|
33
|
+
# @param [String] data
|
|
34
|
+
# The String to SQL escape.
|
|
35
|
+
#
|
|
36
|
+
# @param [:single, :double, :tick] quotes
|
|
37
|
+
# Specifies whether to create a single or double quoted string.
|
|
38
|
+
#
|
|
39
|
+
# @return [String]
|
|
40
|
+
# The SQL escaped string.
|
|
41
|
+
#
|
|
42
|
+
# @raise [ArgumentError]
|
|
43
|
+
# The quotes argument was neither `:single`, `:double` nor `:tick`.
|
|
44
|
+
#
|
|
45
|
+
def self.escape(data, quotes: :single)
|
|
46
|
+
char = QUOTE_STYLES.fetch(quotes) do
|
|
47
|
+
raise(ArgumentError,"invalid quoting style #{quotes.inspect}")
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
escaped = data.gsub(char,char * 2)
|
|
51
|
+
|
|
52
|
+
return "#{char}#{escaped}#{char}"
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
#
|
|
56
|
+
# Unescapes a SQL String.
|
|
57
|
+
#
|
|
58
|
+
# @param [String] data
|
|
59
|
+
# The SQL string to unescape.
|
|
60
|
+
#
|
|
61
|
+
# @return [String]
|
|
62
|
+
# The unescaped SQL string value.
|
|
63
|
+
#
|
|
64
|
+
# @raise [ArgumentError]
|
|
65
|
+
# The String was not quoted with single, double or tick-mark quotes.
|
|
66
|
+
#
|
|
67
|
+
def self.unescape(data)
|
|
68
|
+
char = if (data[0] == "'" && data[-1] == "'") then "'"
|
|
69
|
+
elsif (data[0] == '"' && data[-1] == '"') then '"'
|
|
70
|
+
elsif (data[0] == '`' && data[-1] == '`') then '`'
|
|
71
|
+
else
|
|
72
|
+
raise(ArgumentError,"#{data.inspect} is not properly quoted")
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
return data[1..-2].gsub(char * 2,char)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
#
|
|
79
|
+
# Returns the SQL hex-string encoded form of the String.
|
|
80
|
+
#
|
|
81
|
+
# @param [String] data
|
|
82
|
+
#
|
|
83
|
+
# @return [String]
|
|
84
|
+
#
|
|
85
|
+
def self.encode(data)
|
|
86
|
+
return '' if data.empty?
|
|
87
|
+
|
|
88
|
+
hex_string = String.new('0x')
|
|
89
|
+
|
|
90
|
+
data.each_byte do |b|
|
|
91
|
+
hex_string << ('%.2x' % b)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
return hex_string
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
#
|
|
98
|
+
# Returns the SQL decoded form of the String.
|
|
99
|
+
#
|
|
100
|
+
# @param [String] data
|
|
101
|
+
# The SQL string to decode.
|
|
102
|
+
#
|
|
103
|
+
# @return [String]
|
|
104
|
+
# The decoded String.
|
|
105
|
+
#
|
|
106
|
+
def self.decode(data)
|
|
107
|
+
if (data =~ /^[0-9a-fA-F]{2,}$/ && (data.length % 2 == 0))
|
|
108
|
+
raw = String.new
|
|
109
|
+
|
|
110
|
+
data.scan(/../) do |hex_char|
|
|
111
|
+
raw << hex_char.to_i(16)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
return raw
|
|
115
|
+
else
|
|
116
|
+
unescape(data)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
require 'ronin/support/encoding/sql/core_ext'
|