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
|
@@ -1,24 +1,23 @@
|
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
begin
|
|
20
|
+
require 'openssl'
|
|
21
|
+
rescue ::LoadError
|
|
22
|
+
warn "WARNING: Ruby was not compiled with OpenSSL support"
|
|
24
23
|
end
|
|
@@ -0,0 +1,296 @@
|
|
|
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 <http://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/network/tcp/proxy'
|
|
20
|
+
require 'ronin/support/network/ssl'
|
|
21
|
+
|
|
22
|
+
module Ronin
|
|
23
|
+
module Support
|
|
24
|
+
module Network
|
|
25
|
+
module SSL
|
|
26
|
+
#
|
|
27
|
+
# The SSL Proxy allows for inspecting and manipulating SSL wrapped
|
|
28
|
+
# protocols.
|
|
29
|
+
#
|
|
30
|
+
# ## Example
|
|
31
|
+
#
|
|
32
|
+
# require 'ronin/support/network/ssl/proxy'
|
|
33
|
+
# require 'hexdump'
|
|
34
|
+
#
|
|
35
|
+
# Ronin::Support::Network::SSL::Proxy.start(port: 1337, server: ['www.wired.com', 443]) do |proxy|
|
|
36
|
+
# address = lambda { |socket|
|
|
37
|
+
# addrinfo = socket.peeraddr
|
|
38
|
+
#
|
|
39
|
+
# "#{addrinfo[3]}:#{addrinfo[1]}"
|
|
40
|
+
# }
|
|
41
|
+
# hex = Hexdump::Hexdump.new
|
|
42
|
+
#
|
|
43
|
+
# proxy.on_client_data do |client,server,data|
|
|
44
|
+
# puts "#{address[client]} -> #{proxy}"
|
|
45
|
+
# hex.dump(data)
|
|
46
|
+
# end
|
|
47
|
+
#
|
|
48
|
+
# proxy.on_client_connect do |client|
|
|
49
|
+
# puts "#{address[client]} -> #{proxy} [connected]"
|
|
50
|
+
# end
|
|
51
|
+
#
|
|
52
|
+
# proxy.on_client_disconnect do |client,server|
|
|
53
|
+
# puts "#{address[client]} <- #{proxy} [disconnected]"
|
|
54
|
+
# end
|
|
55
|
+
#
|
|
56
|
+
# proxy.on_server_data do |client,server,data|
|
|
57
|
+
# puts "#{address[client]} <- #{proxy}"
|
|
58
|
+
# hex.dump(data)
|
|
59
|
+
# end
|
|
60
|
+
#
|
|
61
|
+
# proxy.on_server_connect do |client,server|
|
|
62
|
+
# puts "#{address[client]} <- #{proxy} [connected]"
|
|
63
|
+
# end
|
|
64
|
+
#
|
|
65
|
+
# proxy.on_server_disconnect do |client,server|
|
|
66
|
+
# puts "#{address[client]} <- #{proxy} [disconnected]"
|
|
67
|
+
# end
|
|
68
|
+
# end
|
|
69
|
+
#
|
|
70
|
+
# ## Callbacks
|
|
71
|
+
#
|
|
72
|
+
# In addition to the events supported by the {Network::Proxy Proxy}
|
|
73
|
+
# base class, the SSL Proxy also supports the following callbacks.
|
|
74
|
+
#
|
|
75
|
+
# ### client_connect
|
|
76
|
+
#
|
|
77
|
+
# When a client connects to the proxy:
|
|
78
|
+
#
|
|
79
|
+
# on_client_connect do |client|
|
|
80
|
+
# puts "[connected] #{client.remote_address.ip_address}:#{client.remote_addre
|
|
81
|
+
# end
|
|
82
|
+
#
|
|
83
|
+
# ### client_disconnect
|
|
84
|
+
#
|
|
85
|
+
# When a client disconnects from the proxy:
|
|
86
|
+
#
|
|
87
|
+
# on_client_disconnect do |client,server|
|
|
88
|
+
# puts "[disconnected] #{client.remote_address.ip_address}:#{client.remote_ad
|
|
89
|
+
# end
|
|
90
|
+
#
|
|
91
|
+
# ### server_connect
|
|
92
|
+
#
|
|
93
|
+
# When the server accepts a connection from the proxy:
|
|
94
|
+
#
|
|
95
|
+
# on_server_connect do |client,server|
|
|
96
|
+
# puts "[connected] #{proxy}"
|
|
97
|
+
# end
|
|
98
|
+
#
|
|
99
|
+
# ### server_disconnect
|
|
100
|
+
#
|
|
101
|
+
# When the server closes a connection from the proxy.
|
|
102
|
+
#
|
|
103
|
+
# on_server_disconnect do |client,server|
|
|
104
|
+
# puts "[disconnected] #{proxy}"
|
|
105
|
+
# end
|
|
106
|
+
#
|
|
107
|
+
# ### connect
|
|
108
|
+
#
|
|
109
|
+
# Alias for {#on_server_connect}.
|
|
110
|
+
#
|
|
111
|
+
# ### disconnect
|
|
112
|
+
#
|
|
113
|
+
# Alias for {#on_client_disconnect}.
|
|
114
|
+
#
|
|
115
|
+
# @since 0.6.0
|
|
116
|
+
#
|
|
117
|
+
class Proxy < TCP::Proxy
|
|
118
|
+
|
|
119
|
+
# The SSL version to use.
|
|
120
|
+
#
|
|
121
|
+
# @return [1, 1.1, 1.2, String, Symbol, nil]
|
|
122
|
+
#
|
|
123
|
+
# @since 1.0.0
|
|
124
|
+
attr_reader :version
|
|
125
|
+
|
|
126
|
+
# The RSA key to use.
|
|
127
|
+
#
|
|
128
|
+
# @return [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil]
|
|
129
|
+
attr_accessor :key
|
|
130
|
+
|
|
131
|
+
# The path to the SSL `.key` file.
|
|
132
|
+
#
|
|
133
|
+
# @return [String, nil]
|
|
134
|
+
attr_accessor :key_file
|
|
135
|
+
|
|
136
|
+
# The X509 certificate to use.
|
|
137
|
+
#
|
|
138
|
+
# @return [Crypto::Cert, OpenSSL::X509::Certificate, nil]
|
|
139
|
+
attr_accessor :cert
|
|
140
|
+
|
|
141
|
+
# The path to the X509 `.crt` or `.pem` file.
|
|
142
|
+
#
|
|
143
|
+
# @return [String, nil]
|
|
144
|
+
attr_accessor :cert_file
|
|
145
|
+
|
|
146
|
+
# The SSL verify mode
|
|
147
|
+
#
|
|
148
|
+
# @return [Symbol, Boolean]
|
|
149
|
+
attr_accessor :verify
|
|
150
|
+
|
|
151
|
+
# Path to the CA certificate file or directory.
|
|
152
|
+
#
|
|
153
|
+
# @return [String]
|
|
154
|
+
attr_accessor :ca_bundle
|
|
155
|
+
|
|
156
|
+
#
|
|
157
|
+
# Creates a new SSL Proxy.
|
|
158
|
+
#
|
|
159
|
+
# @param [1, 1.1, 1.2, String, Symbol, nil] version
|
|
160
|
+
# The SSL version to use.
|
|
161
|
+
#
|
|
162
|
+
# @param [Crypto::Key::RSA, OpenSSL::PKey::RSA] key
|
|
163
|
+
# The SSL key.
|
|
164
|
+
#
|
|
165
|
+
# @param [String] key_file
|
|
166
|
+
# The path to the SSL `.key` file.
|
|
167
|
+
#
|
|
168
|
+
# @param [Crypto::Cert, OpenSSL::X509::Certificate] cert
|
|
169
|
+
# The SSL X509 certificate.
|
|
170
|
+
#
|
|
171
|
+
# @param [String] cert_file
|
|
172
|
+
# The path to the SSL `.crt` file.
|
|
173
|
+
#
|
|
174
|
+
# @param [Symbol, Boolean] verify
|
|
175
|
+
# The SSL verify mode. Must be one of:
|
|
176
|
+
#
|
|
177
|
+
# * `:none`
|
|
178
|
+
# * `:peer`
|
|
179
|
+
# * `:fail_if_no_peer_cert`
|
|
180
|
+
# * `:client_once`
|
|
181
|
+
# * `true` (alias for `:peer`)
|
|
182
|
+
# * `false` (alias for `:none`)
|
|
183
|
+
#
|
|
184
|
+
# @param [String, nil] ca_bundle
|
|
185
|
+
# Path to the CA certificate file or directory.
|
|
186
|
+
#
|
|
187
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
188
|
+
# Additional keyword arguments for {TCP::Proxy#initialize}.
|
|
189
|
+
#
|
|
190
|
+
# @see Network::Proxy#initialize
|
|
191
|
+
#
|
|
192
|
+
def initialize(version: nil,
|
|
193
|
+
key: SSL.key,
|
|
194
|
+
key_file: nil,
|
|
195
|
+
cert: SSL.cert,
|
|
196
|
+
cert_file: nil,
|
|
197
|
+
verify: :none,
|
|
198
|
+
ca_bundle: nil,
|
|
199
|
+
**kwargs,
|
|
200
|
+
&block)
|
|
201
|
+
@version = version
|
|
202
|
+
@key = key
|
|
203
|
+
@key_file = key_file
|
|
204
|
+
@cert = cert
|
|
205
|
+
@cert_file = cert_file
|
|
206
|
+
@verify = verify
|
|
207
|
+
@ca_bundle = ca_bundle
|
|
208
|
+
|
|
209
|
+
super(**kwargs,&block)
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
protected
|
|
213
|
+
|
|
214
|
+
#
|
|
215
|
+
# Sends data to a connection.
|
|
216
|
+
#
|
|
217
|
+
# @param [OpenSSL::SSL::SSLSocket] connection
|
|
218
|
+
# A SSL connection to write data to.
|
|
219
|
+
#
|
|
220
|
+
# @param [String] data
|
|
221
|
+
# The data to write.
|
|
222
|
+
#
|
|
223
|
+
# @api public
|
|
224
|
+
#
|
|
225
|
+
def send(connection,data)
|
|
226
|
+
connection.write(data)
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
#
|
|
230
|
+
# Receives data from a connection.
|
|
231
|
+
#
|
|
232
|
+
# @param [OpenSSL::SSL::SSLSocket] connection
|
|
233
|
+
# The SSL connection to receive data from.
|
|
234
|
+
#
|
|
235
|
+
# @return [String, nil]
|
|
236
|
+
# The received data.
|
|
237
|
+
#
|
|
238
|
+
# @api public
|
|
239
|
+
#
|
|
240
|
+
def recv(connection)
|
|
241
|
+
begin
|
|
242
|
+
connection.readpartial(@buffer_size)
|
|
243
|
+
rescue Errno::ECONNRESET, EOFError
|
|
244
|
+
''
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
#
|
|
249
|
+
# Accepts a client connection from the server socket.
|
|
250
|
+
#
|
|
251
|
+
# @return [OpenSSL::SSL::SSLSocket]
|
|
252
|
+
# The new SSL connection.
|
|
253
|
+
#
|
|
254
|
+
def accept_client_connection
|
|
255
|
+
client = super
|
|
256
|
+
context = SSL.context(version: @version,
|
|
257
|
+
key: @key,
|
|
258
|
+
key_file: @key_file,
|
|
259
|
+
cert: @cert,
|
|
260
|
+
cert_file: @cert_file,
|
|
261
|
+
verify: @verify)
|
|
262
|
+
|
|
263
|
+
ssl_socket = OpenSSL::SSL::SSLSocket.new(client,context)
|
|
264
|
+
ssl_socket.sync_close = true
|
|
265
|
+
|
|
266
|
+
begin
|
|
267
|
+
ssl_socket.accept
|
|
268
|
+
rescue OpenSSL::SSL::SSLError
|
|
269
|
+
return nil
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
return ssl_socket
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
#
|
|
276
|
+
# Opens a new connection to the server.
|
|
277
|
+
#
|
|
278
|
+
# @return [OpenSSL::SSL::SSLSocket]
|
|
279
|
+
# The new server connection.
|
|
280
|
+
#
|
|
281
|
+
def open_server_connection
|
|
282
|
+
server_socket = super
|
|
283
|
+
context = SSL.context(verify: @verify, ca_bundle: @ca_bundle)
|
|
284
|
+
|
|
285
|
+
ssl_socket = OpenSSL::SSL::SSLSocket.new(server_socket,context)
|
|
286
|
+
ssl_socket.sync_close = true
|
|
287
|
+
ssl_socket.connect
|
|
288
|
+
|
|
289
|
+
return ssl_socket
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
end
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
end
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/network/ssl/openssl'
|
|
20
|
+
require 'ronin/support/network/ssl/local_key'
|
|
21
|
+
require 'ronin/support/network/ssl/local_cert'
|
|
22
|
+
require 'ronin/support/network/ssl/proxy'
|
|
23
|
+
|
|
24
|
+
module Ronin
|
|
25
|
+
module Support
|
|
26
|
+
module Network
|
|
27
|
+
module SSL
|
|
28
|
+
# SSL/TLS versions
|
|
29
|
+
VERSIONS = {
|
|
30
|
+
1 => :TLSv1,
|
|
31
|
+
1.1 => :TLSv1_1,
|
|
32
|
+
1.2 => :TLSv1_2
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
# SSL verify modes
|
|
36
|
+
VERIFY = {
|
|
37
|
+
none: OpenSSL::SSL::VERIFY_NONE,
|
|
38
|
+
peer: OpenSSL::SSL::VERIFY_PEER,
|
|
39
|
+
fail_if_no_peer_cert: OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT,
|
|
40
|
+
client_once: OpenSSL::SSL::VERIFY_CLIENT_ONCE,
|
|
41
|
+
true => OpenSSL::SSL::VERIFY_PEER,
|
|
42
|
+
false => OpenSSL::SSL::VERIFY_NONE
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
#
|
|
46
|
+
# The default RSA key used for all SSL server sockets.
|
|
47
|
+
#
|
|
48
|
+
# @return [Crypto::Key::RSA]
|
|
49
|
+
# The default RSA key.
|
|
50
|
+
#
|
|
51
|
+
def self.key
|
|
52
|
+
@key ||= LocalKey.fetch
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
#
|
|
56
|
+
# Overrides the default RSA key.
|
|
57
|
+
#
|
|
58
|
+
# @param [Crypto::Key::RSA, OpenSSL::PKey::RSA] new_key
|
|
59
|
+
# The new RSA key.
|
|
60
|
+
#
|
|
61
|
+
# @return [Crypto::Key::RSA, OpenSSL::PKey::RSA]
|
|
62
|
+
# The new default RSA key.
|
|
63
|
+
#
|
|
64
|
+
def self.key=(new_key)
|
|
65
|
+
@key = new_key
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
#
|
|
69
|
+
# The default SSL certificate used for all SSL server sockets.
|
|
70
|
+
#
|
|
71
|
+
# @return [Crypto::Cert]
|
|
72
|
+
# The default SSL certificate.
|
|
73
|
+
#
|
|
74
|
+
def self.cert
|
|
75
|
+
@cert ||= LocalCert.fetch
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
#
|
|
79
|
+
# Overrides the default SSL certificate.
|
|
80
|
+
#
|
|
81
|
+
# @param [Crypto::Cert, OpenSSL::X509::Certificate] new_cert
|
|
82
|
+
# The new SSL certificate.
|
|
83
|
+
#
|
|
84
|
+
# @return [Crypto::Cert, OpenSSL::X509::Certificate]
|
|
85
|
+
# The new default SSL certificate.
|
|
86
|
+
#
|
|
87
|
+
def self.cert=(new_cert)
|
|
88
|
+
@cert = new_cert
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
#
|
|
92
|
+
# Creates a new SSL Context.
|
|
93
|
+
#
|
|
94
|
+
# @param [1, 1.1, 1.2, String, Symbol, nil] version
|
|
95
|
+
# The SSL version to use.
|
|
96
|
+
#
|
|
97
|
+
# @param [Symbol, Boolean] verify
|
|
98
|
+
# Specifies whether to verify the SSL certificate.
|
|
99
|
+
# May be one of the following:
|
|
100
|
+
#
|
|
101
|
+
# * `:none`
|
|
102
|
+
# * `:peer`
|
|
103
|
+
# * `:fail_if_no_peer_cert`
|
|
104
|
+
# * `:client_once`
|
|
105
|
+
#
|
|
106
|
+
# @param [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] key
|
|
107
|
+
# The RSA key to use for the SSL context.
|
|
108
|
+
#
|
|
109
|
+
# @param [String, nil] key_file
|
|
110
|
+
# The path to the RSA `.key` file.
|
|
111
|
+
#
|
|
112
|
+
# @param [Crypto::Cert, OpenSSL::X509::Certificate, nil] cert
|
|
113
|
+
# The X509 certificate to use for the SSL context.
|
|
114
|
+
#
|
|
115
|
+
# @param [String, nil] cert_file
|
|
116
|
+
# The path to the SSL `.crt` or `.pem` file.
|
|
117
|
+
#
|
|
118
|
+
# @param [String, nil] ca_bundle
|
|
119
|
+
# Path to the CA bundle file or directory.
|
|
120
|
+
#
|
|
121
|
+
# @return [OpenSSL::SSL::SSLContext]
|
|
122
|
+
# The newly created SSL Context.
|
|
123
|
+
#
|
|
124
|
+
# @raise [ArgumentError]
|
|
125
|
+
# `cert_file:` or `cert:` keyword arguments also require a `key_file:`
|
|
126
|
+
# or `key:` keyword argument.
|
|
127
|
+
#
|
|
128
|
+
# @api semipublic
|
|
129
|
+
#
|
|
130
|
+
# @since 1.0.0
|
|
131
|
+
#
|
|
132
|
+
def self.context(version: nil,
|
|
133
|
+
verify: :none,
|
|
134
|
+
key: nil,
|
|
135
|
+
key_file: nil,
|
|
136
|
+
cert: nil,
|
|
137
|
+
cert_file: nil,
|
|
138
|
+
ca_bundle: nil)
|
|
139
|
+
context = OpenSSL::SSL::SSLContext.new()
|
|
140
|
+
|
|
141
|
+
if version
|
|
142
|
+
context.ssl_version = VERSIONS.fetch(version,version)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
context.verify_mode = VERIFY[verify]
|
|
146
|
+
|
|
147
|
+
if (key_file || key) && (cert_file || cert)
|
|
148
|
+
context.key = if key_file then Crypto::Key::RSA.load_file(key_file)
|
|
149
|
+
else key
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
context.cert = if cert_file then Crypto::Cert.load_file(cert_file)
|
|
153
|
+
else cert
|
|
154
|
+
end
|
|
155
|
+
elsif (key_file || key) || (cert_file || cert)
|
|
156
|
+
raise(ArgumentError,"cert_file: and cert: keyword arguments also require a key_file: or key: keyword argument")
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
if ca_bundle
|
|
160
|
+
if File.file?(ca_bundle)
|
|
161
|
+
context.ca_file = ca_bundle
|
|
162
|
+
elsif File.directory?(ca_bundle)
|
|
163
|
+
context.ca_path = ca_bundle
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
return context
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|