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,670 @@
|
|
|
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/ssl/mixin'
|
|
20
|
+
|
|
21
|
+
module Ronin
|
|
22
|
+
module Support
|
|
23
|
+
module Network
|
|
24
|
+
module TLS
|
|
25
|
+
#
|
|
26
|
+
# Provides helper methods for communicating with TLS-enabled services.
|
|
27
|
+
#
|
|
28
|
+
module Mixin
|
|
29
|
+
include SSL::Mixin
|
|
30
|
+
|
|
31
|
+
#
|
|
32
|
+
# Creates a new TLS Context.
|
|
33
|
+
#
|
|
34
|
+
# @param [1, 1.1, 1.2, String, Symbol, nil] version
|
|
35
|
+
# The TLS version to use.
|
|
36
|
+
#
|
|
37
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
38
|
+
# Additional keyword arguments for {SSL.context}.
|
|
39
|
+
#
|
|
40
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
41
|
+
# Specifies whether to verify the SSL certificate.
|
|
42
|
+
# May be one of the following:
|
|
43
|
+
#
|
|
44
|
+
# * `:none`
|
|
45
|
+
# * `:peer`
|
|
46
|
+
# * `:fail_if_no_peer_cert`
|
|
47
|
+
# * `:client_once`
|
|
48
|
+
#
|
|
49
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
|
|
50
|
+
# The RSA key to use for the SSL context.
|
|
51
|
+
#
|
|
52
|
+
# @option kwargs [String] :key_file
|
|
53
|
+
# The path to the SSL `.key` file.
|
|
54
|
+
#
|
|
55
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
|
|
56
|
+
# The X509 certificate to use for the SSL context.
|
|
57
|
+
#
|
|
58
|
+
# @option kwargs [String] :cert_file
|
|
59
|
+
# The path to the SSL `.crt` file.
|
|
60
|
+
#
|
|
61
|
+
# @option kwargs [String] :ca_bundle
|
|
62
|
+
# Path to the CA certificate file or directory.
|
|
63
|
+
#
|
|
64
|
+
# @return [OpenSSL::SSL::SSLContext]
|
|
65
|
+
# The newly created SSL Context.
|
|
66
|
+
#
|
|
67
|
+
# @api semipublic
|
|
68
|
+
#
|
|
69
|
+
def tls_context(version: 1.2, **kwargs)
|
|
70
|
+
ssl_context(version: version, **kwargs)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
#
|
|
74
|
+
# Initiates an SSL session with an existing TCP socket.
|
|
75
|
+
#
|
|
76
|
+
# @param [TCPSocket] socket
|
|
77
|
+
# The existing TCP socket.
|
|
78
|
+
#
|
|
79
|
+
# @param [1, 1.1, 1.2, String, Symbol, nil] version
|
|
80
|
+
# The TLS version to use.
|
|
81
|
+
#
|
|
82
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
83
|
+
# Additional keyword arguments for {#ssl_context}.
|
|
84
|
+
#
|
|
85
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
86
|
+
# Specifies whether to verify the SSL certificate.
|
|
87
|
+
# May be one of the following:
|
|
88
|
+
#
|
|
89
|
+
# * `:none`
|
|
90
|
+
# * `:peer`
|
|
91
|
+
# * `:fail_if_no_peer_cert`
|
|
92
|
+
# * `:client_once`
|
|
93
|
+
#
|
|
94
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
|
|
95
|
+
# The RSA key to use for the SSL context.
|
|
96
|
+
#
|
|
97
|
+
# @option kwargs [String] :key_file
|
|
98
|
+
# The path to the SSL `.key` file.
|
|
99
|
+
#
|
|
100
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
|
|
101
|
+
# The X509 certificate to use for the SSL context.
|
|
102
|
+
#
|
|
103
|
+
# @option kwargs [String] :cert_file
|
|
104
|
+
# The path to the SSL `.crt` file.
|
|
105
|
+
#
|
|
106
|
+
# @option kwargs [String] :ca_bundle
|
|
107
|
+
# Path to the CA certificate file or directory.
|
|
108
|
+
#
|
|
109
|
+
# @return [OpenSSL::SSL::SSLSocket]
|
|
110
|
+
# the new SSL Socket.
|
|
111
|
+
#
|
|
112
|
+
# @api public
|
|
113
|
+
#
|
|
114
|
+
def tls_socket(socket, version: 1.2, **kwargs)
|
|
115
|
+
ssl_socket(socket,version: version, **kwargs)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
#
|
|
119
|
+
# Tests whether a remote SSLed TCP port is open.
|
|
120
|
+
#
|
|
121
|
+
# @param [String] host
|
|
122
|
+
# The host to connect to.
|
|
123
|
+
#
|
|
124
|
+
# @param [Integer] port
|
|
125
|
+
# The port to connect to.
|
|
126
|
+
#
|
|
127
|
+
# @param [1, 1.1, 1.2, String, Symbol, nil] version
|
|
128
|
+
# The TLS version to use.
|
|
129
|
+
#
|
|
130
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
131
|
+
# Additional keyword arguments for {#ssl_connect}.
|
|
132
|
+
#
|
|
133
|
+
# @option kwargs [String] :bind_host
|
|
134
|
+
# The local host to bind to.
|
|
135
|
+
#
|
|
136
|
+
# @option kwargs [Integer] :bind_port
|
|
137
|
+
# The local port to bind to.
|
|
138
|
+
#
|
|
139
|
+
# @option kwargs [Integer] :timeout (5)
|
|
140
|
+
# The maximum time to attempt connecting.
|
|
141
|
+
#
|
|
142
|
+
# @option options [Symbol, Boolean] :verify
|
|
143
|
+
# Specifies whether to verify the SSL certificate.
|
|
144
|
+
# May be one of the following:
|
|
145
|
+
#
|
|
146
|
+
# * `:none`
|
|
147
|
+
# * `:peer`
|
|
148
|
+
# * `:fail_if_no_peer_cert`
|
|
149
|
+
# * `:client_once`
|
|
150
|
+
#
|
|
151
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
|
|
152
|
+
# The RSA key to use for the SSL context.
|
|
153
|
+
#
|
|
154
|
+
# @option kwargs [String] :key_file
|
|
155
|
+
# The path to the SSL `.key` file.
|
|
156
|
+
#
|
|
157
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
|
|
158
|
+
# The X509 certificate to use for the SSL context.
|
|
159
|
+
#
|
|
160
|
+
# @option kwargs [String] :cert_file
|
|
161
|
+
# The path to the SSL `.crt` file.
|
|
162
|
+
#
|
|
163
|
+
# @option kwargs [String] :ca_bundle
|
|
164
|
+
# Path to the CA certificate file or directory.
|
|
165
|
+
#
|
|
166
|
+
# @return [Boolean, nil]
|
|
167
|
+
# Specifies whether the remote SSLed TCP port is open.
|
|
168
|
+
# If the connection was not accepted, `nil` will be returned.
|
|
169
|
+
#
|
|
170
|
+
# @example
|
|
171
|
+
# tls_open?('www.bankofamerica.com',443)
|
|
172
|
+
#
|
|
173
|
+
# @example Using a timeout:
|
|
174
|
+
# tls_open?('example.com',80, timeout: 5)
|
|
175
|
+
# # => nil
|
|
176
|
+
#
|
|
177
|
+
# @api public
|
|
178
|
+
#
|
|
179
|
+
def tls_open?(host,port, version: 1.2, **kwargs)
|
|
180
|
+
ssl_open?(host,port, version: version, **kwargs)
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
#
|
|
184
|
+
# Establishes a SSL connection.
|
|
185
|
+
#
|
|
186
|
+
# @param [String] host
|
|
187
|
+
# The host to connect to.
|
|
188
|
+
#
|
|
189
|
+
# @param [Integer] port
|
|
190
|
+
# The port to connect to.
|
|
191
|
+
#
|
|
192
|
+
# @param [1, 1.1, 1.2, String, Symbol, nil] version
|
|
193
|
+
# The TLS version to use.
|
|
194
|
+
#
|
|
195
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
196
|
+
# Additional keyword arguments for {#tls_socket}.
|
|
197
|
+
#
|
|
198
|
+
# @option kwargs [String] :bind_host
|
|
199
|
+
# The local host to bind to.
|
|
200
|
+
#
|
|
201
|
+
# @option kwargs [Integer] :bind_port
|
|
202
|
+
# The local port to bind to.
|
|
203
|
+
#
|
|
204
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
205
|
+
# Specifies whether to verify the SSL certificate.
|
|
206
|
+
# May be one of the following:
|
|
207
|
+
#
|
|
208
|
+
# * `:none`
|
|
209
|
+
# * `:peer`
|
|
210
|
+
# * `:fail_if_no_peer_cert`
|
|
211
|
+
# * `:client_once`
|
|
212
|
+
#
|
|
213
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
|
|
214
|
+
# The RSA key to use for the SSL context.
|
|
215
|
+
#
|
|
216
|
+
# @option kwargs [String] :key_file
|
|
217
|
+
# The path to the SSL `.key` file.
|
|
218
|
+
#
|
|
219
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
|
|
220
|
+
# The X509 certificate to use for the SSL context.
|
|
221
|
+
#
|
|
222
|
+
# @option kwargs [String] :cert_file
|
|
223
|
+
# The path to the SSL `.crt` file.
|
|
224
|
+
#
|
|
225
|
+
# @option kwargs [String] :ca_bundle
|
|
226
|
+
# Path to the CA certificate file or directory.
|
|
227
|
+
#
|
|
228
|
+
# @yield [tls_socket]
|
|
229
|
+
# The given block will be passed the new SSL socket. Once the block
|
|
230
|
+
# returns the SSL socket will be closed.
|
|
231
|
+
#
|
|
232
|
+
# @yieldparam [OpenSSL::SSL::SSLSocket] tls_socket
|
|
233
|
+
# The new SSL Socket.
|
|
234
|
+
#
|
|
235
|
+
# @return [OpenSSL::SSL::SSLSocket, nil]
|
|
236
|
+
# the new SSL Socket. If a block is given, then `nil` will be
|
|
237
|
+
# returned.
|
|
238
|
+
#
|
|
239
|
+
# @example
|
|
240
|
+
# socket = tls_connect('twitter.com',443)
|
|
241
|
+
#
|
|
242
|
+
# @example
|
|
243
|
+
# tls_connect('twitter.com',443) do |sock|
|
|
244
|
+
# sock.write("GET / HTTP/1.1\n\r\n\r")
|
|
245
|
+
#
|
|
246
|
+
# sock.each_line { |line| puts line }
|
|
247
|
+
# end
|
|
248
|
+
#
|
|
249
|
+
# @see http://rubydoc.info/stdlib/openssl/OpenSSL/SSL/SSLSocket
|
|
250
|
+
#
|
|
251
|
+
# @api public
|
|
252
|
+
#
|
|
253
|
+
def tls_connect(host,port, version: 1.2, **kwargs, &block)
|
|
254
|
+
ssl_connect(host,port, version: version, **kwargs, &block)
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
#
|
|
258
|
+
# Creates a new SSL connection and sends the given data.
|
|
259
|
+
#
|
|
260
|
+
# @param [String] data
|
|
261
|
+
# The data to send through the connection.
|
|
262
|
+
#
|
|
263
|
+
# @param [String] host
|
|
264
|
+
# The host to connect to.
|
|
265
|
+
#
|
|
266
|
+
# @param [Integer] port
|
|
267
|
+
# The port to connect to.
|
|
268
|
+
#
|
|
269
|
+
# @param [1, 1.1, 1.2, String, Symbol, nil] version
|
|
270
|
+
# The TLS version to use.
|
|
271
|
+
#
|
|
272
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
273
|
+
# Additional keyword arguments for {#tls_connect}.
|
|
274
|
+
#
|
|
275
|
+
# @option kwargs [String] :bind_host
|
|
276
|
+
# The local host to bind to.
|
|
277
|
+
#
|
|
278
|
+
# @option kwargs [Integer] :bind_port
|
|
279
|
+
# The local port to bind to.
|
|
280
|
+
#
|
|
281
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
282
|
+
# Specifies whether to verify the SSL certificate.
|
|
283
|
+
# May be one of the following:
|
|
284
|
+
#
|
|
285
|
+
# * `:none`
|
|
286
|
+
# * `:peer`
|
|
287
|
+
# * `:fail_if_no_peer_cert`
|
|
288
|
+
# * `:client_once`
|
|
289
|
+
#
|
|
290
|
+
# @yield [tls_socket]
|
|
291
|
+
# The given block will be passed the newly created SSL Socket.
|
|
292
|
+
#
|
|
293
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
|
|
294
|
+
# The RSA key to use for the SSL context.
|
|
295
|
+
#
|
|
296
|
+
# @option kwargs [String] :key_file
|
|
297
|
+
# The path to the SSL `.key` file.
|
|
298
|
+
#
|
|
299
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
|
|
300
|
+
# The X509 certificate to use for the SSL context.
|
|
301
|
+
#
|
|
302
|
+
# @option kwargs [String] :cert_file
|
|
303
|
+
# The path to the SSL `.crt` file.
|
|
304
|
+
#
|
|
305
|
+
# @option kwargs [String] :ca_bundle
|
|
306
|
+
# Path to the CA certificate file or directory.
|
|
307
|
+
#
|
|
308
|
+
# @yieldparam [OpenSSL::SSL::SSLSocket] tls_socket
|
|
309
|
+
# The newly created SSL Socket.
|
|
310
|
+
#
|
|
311
|
+
# @api public
|
|
312
|
+
#
|
|
313
|
+
def tls_connect_and_send(data,host,port, version: 1.2, **kwargs, &block)
|
|
314
|
+
ssl_connect_and_send(data,host,port, version: version, **kwargs, &block)
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
#
|
|
318
|
+
# Connects to the host and port and returns the server's certificate.
|
|
319
|
+
#
|
|
320
|
+
# @param [String] host
|
|
321
|
+
# The host to connect to.
|
|
322
|
+
#
|
|
323
|
+
# @param [Integer] port
|
|
324
|
+
# The port to connect to.
|
|
325
|
+
#
|
|
326
|
+
# @param [1, 1.1, 1.2, String, Symbol, nil] version
|
|
327
|
+
# The TLS version to use.
|
|
328
|
+
#
|
|
329
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
330
|
+
# Additional keyword arguments for {#tls_connect}.
|
|
331
|
+
#
|
|
332
|
+
# @option kwargs [String] :bind_host
|
|
333
|
+
# The local host to bind to.
|
|
334
|
+
#
|
|
335
|
+
# @option kwargs [Integer] :bind_port
|
|
336
|
+
# The local port to bind to.
|
|
337
|
+
#
|
|
338
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
339
|
+
# Specifies whether to verify the SSL certificate.
|
|
340
|
+
# May be one of the following:
|
|
341
|
+
#
|
|
342
|
+
# * `:none`
|
|
343
|
+
# * `:peer`
|
|
344
|
+
# * `:fail_if_no_peer_cert`
|
|
345
|
+
# * `:client_once`
|
|
346
|
+
#
|
|
347
|
+
# @yield [tls_socket]
|
|
348
|
+
# The given block will be passed the newly created SSL Socket.
|
|
349
|
+
#
|
|
350
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
|
|
351
|
+
# The RSA key to use for the SSL context.
|
|
352
|
+
#
|
|
353
|
+
# @option kwargs [String] :key_file
|
|
354
|
+
# The path to the SSL `.key` file.
|
|
355
|
+
#
|
|
356
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
|
|
357
|
+
# The X509 certificate to use for the SSL context.
|
|
358
|
+
#
|
|
359
|
+
# @option kwargs [String] :cert_file
|
|
360
|
+
# The path to the SSL `.crt` file.
|
|
361
|
+
#
|
|
362
|
+
# @option kwargs [String] :ca_bundle
|
|
363
|
+
# Path to the CA certificate file or directory.
|
|
364
|
+
#
|
|
365
|
+
# @return [OpenSSL::X509::Certificate]
|
|
366
|
+
# The server's certificate.
|
|
367
|
+
#
|
|
368
|
+
def tls_cert(host,port, version: 1.2, **kwargs)
|
|
369
|
+
ssl_cert(host,port, version: version, **kwargs)
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
#
|
|
373
|
+
# Reads the banner from the service running on the given host and
|
|
374
|
+
# port.
|
|
375
|
+
#
|
|
376
|
+
# @param [String] host
|
|
377
|
+
# The host to connect to.
|
|
378
|
+
#
|
|
379
|
+
# @param [Integer] port
|
|
380
|
+
# The port to connect to.
|
|
381
|
+
#
|
|
382
|
+
# @param [1, 1.1, 1.2, String, Symbol, nil] version
|
|
383
|
+
# The TLS version to use.
|
|
384
|
+
#
|
|
385
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
386
|
+
# Additional keyword arguments for {#tls_connect}.
|
|
387
|
+
#
|
|
388
|
+
# @option kwargs [String] :bind_host
|
|
389
|
+
# The local host to bind to.
|
|
390
|
+
#
|
|
391
|
+
# @option kwargs [Integer] :bind_port
|
|
392
|
+
# The local port to bind to.
|
|
393
|
+
#
|
|
394
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
395
|
+
# Specifies whether to verify the SSL certificate.
|
|
396
|
+
# May be one of the following:
|
|
397
|
+
#
|
|
398
|
+
# * `:none`
|
|
399
|
+
# * `:peer`
|
|
400
|
+
# * `:fail_if_no_peer_cert`
|
|
401
|
+
# * `:client_once`
|
|
402
|
+
#
|
|
403
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
|
|
404
|
+
# The RSA key to use for the SSL context.
|
|
405
|
+
#
|
|
406
|
+
# @option kwargs [String] :key_file
|
|
407
|
+
# The path to the SSL `.key` file.
|
|
408
|
+
#
|
|
409
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
|
|
410
|
+
# The X509 certificate to use for the SSL context.
|
|
411
|
+
#
|
|
412
|
+
# @option kwargs [String] :cert_file
|
|
413
|
+
# The path to the SSL `.crt` file.
|
|
414
|
+
#
|
|
415
|
+
# @option kwargs [String] :ca_bundle
|
|
416
|
+
# Path to the CA certificate file or directory.
|
|
417
|
+
#
|
|
418
|
+
# @yield [banner]
|
|
419
|
+
# If a block is given, it will be passed the grabbed banner.
|
|
420
|
+
#
|
|
421
|
+
# @yieldparam [String] banner
|
|
422
|
+
# The grabbed banner.
|
|
423
|
+
#
|
|
424
|
+
# @return [String]
|
|
425
|
+
# The grabbed banner.
|
|
426
|
+
#
|
|
427
|
+
# @example
|
|
428
|
+
# tls_banner('smtp.gmail.com',465)
|
|
429
|
+
# # => "220 mx.google.com ESMTP c20sm3096959rvf.1"
|
|
430
|
+
#
|
|
431
|
+
# @api public
|
|
432
|
+
#
|
|
433
|
+
def tls_banner(host,port, version: 1.2, **kwargs, &block)
|
|
434
|
+
ssl_banner(host,port, version: version, **kwargs, &block)
|
|
435
|
+
end
|
|
436
|
+
|
|
437
|
+
#
|
|
438
|
+
# Connects to a specified host and port, sends the given data and then
|
|
439
|
+
# closes the connection.
|
|
440
|
+
#
|
|
441
|
+
# @param [String] data
|
|
442
|
+
# The data to send through the connection.
|
|
443
|
+
#
|
|
444
|
+
# @param [String] host
|
|
445
|
+
# The host to connect to.
|
|
446
|
+
#
|
|
447
|
+
# @param [Integer] port
|
|
448
|
+
# The port to connect to.
|
|
449
|
+
#
|
|
450
|
+
# @param [1, 1.1, 1.2, String, Symbol, nil] version
|
|
451
|
+
# The TLS version to use.
|
|
452
|
+
#
|
|
453
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
454
|
+
# Additional keyword arguments for {#tls_connect}.
|
|
455
|
+
#
|
|
456
|
+
# @option kwargs [String] :bind_host
|
|
457
|
+
# The local host to bind to.
|
|
458
|
+
#
|
|
459
|
+
# @option kwargs [Integer] :bind_port
|
|
460
|
+
# The local port to bind to.
|
|
461
|
+
#
|
|
462
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
463
|
+
# Specifies whether to verify the SSL certificate.
|
|
464
|
+
# May be one of the following:
|
|
465
|
+
#
|
|
466
|
+
# * `:none`
|
|
467
|
+
# * `:peer`
|
|
468
|
+
# * `:fail_if_no_peer_cert`
|
|
469
|
+
# * `:client_once`
|
|
470
|
+
#
|
|
471
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key
|
|
472
|
+
# The RSA key to use for the SSL context.
|
|
473
|
+
#
|
|
474
|
+
# @option kwargs [String] :key_file
|
|
475
|
+
# The path to the SSL `.key` file.
|
|
476
|
+
#
|
|
477
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert
|
|
478
|
+
# The X509 certificate to use for the SSL context.
|
|
479
|
+
#
|
|
480
|
+
# @option kwargs [String] :cert_file
|
|
481
|
+
# The path to the SSL `.crt` file.
|
|
482
|
+
#
|
|
483
|
+
# @option kwargs [String] :ca_bundle
|
|
484
|
+
# Path to the CA certificate file or directory.
|
|
485
|
+
#
|
|
486
|
+
# @return [true]
|
|
487
|
+
# The data was successfully sent.
|
|
488
|
+
#
|
|
489
|
+
# @example
|
|
490
|
+
# buffer = "GET /#{'A' * 4096}\n\r"
|
|
491
|
+
# tls_send(buffer,'victim.com',443)
|
|
492
|
+
# # => true
|
|
493
|
+
#
|
|
494
|
+
# @api public
|
|
495
|
+
#
|
|
496
|
+
def tls_send(data,host,port, version: 1.2, **kwargs)
|
|
497
|
+
ssl_send(data,host,port, version: version, **kwargs)
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
#
|
|
501
|
+
# Accepts an SSL session from an existing TCP socket.
|
|
502
|
+
#
|
|
503
|
+
# @param [TCPSocket] socket
|
|
504
|
+
# The existing TCP socket.
|
|
505
|
+
#
|
|
506
|
+
# @param [1, 1.1, 1.2, String, Symbol, nil] version
|
|
507
|
+
# The TLS version to use.
|
|
508
|
+
#
|
|
509
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
510
|
+
# Additional keyword arguments for {#tls_socket}.
|
|
511
|
+
#
|
|
512
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
513
|
+
# Specifies whether to verify the SSL certificate.
|
|
514
|
+
# May be one of the following:
|
|
515
|
+
#
|
|
516
|
+
# * `:none`
|
|
517
|
+
# * `:peer`
|
|
518
|
+
# * `:fail_if_no_peer_cert`
|
|
519
|
+
# * `:client_once`
|
|
520
|
+
#
|
|
521
|
+
# @return [OpenSSL::SSL::SSLSocket]
|
|
522
|
+
# the new SSL Socket.
|
|
523
|
+
#
|
|
524
|
+
# @api public
|
|
525
|
+
#
|
|
526
|
+
def tls_server_socket(socket, version: 1.2, **kwargs)
|
|
527
|
+
ssl_server_socket(socket, version: version, **kwargs)
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
#
|
|
531
|
+
# Creates a new SSL socket listening on a given host and port,
|
|
532
|
+
# accepting clients in a loop.
|
|
533
|
+
#
|
|
534
|
+
# @param [1, 1.1, 1.2, String, Symbol, nil] version
|
|
535
|
+
# The TLS version to use.
|
|
536
|
+
#
|
|
537
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
538
|
+
# Additional keyword arguments for {#tls_server_socket}.
|
|
539
|
+
#
|
|
540
|
+
# @option kwargs [Integer] :port
|
|
541
|
+
# The local port to listen on.
|
|
542
|
+
#
|
|
543
|
+
# @option kwargs [String] :host
|
|
544
|
+
# The host to bind to.
|
|
545
|
+
#
|
|
546
|
+
# @option kwargs [Integer] :backlog (5)
|
|
547
|
+
# The maximum backlog of pending connections.
|
|
548
|
+
#
|
|
549
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
550
|
+
# Specifies whether to verify the SSL certificate.
|
|
551
|
+
# May be one of the following:
|
|
552
|
+
#
|
|
553
|
+
# * `:none`
|
|
554
|
+
# * `:peer`
|
|
555
|
+
# * `:fail_if_no_peer_cert`
|
|
556
|
+
# * `:client_once`
|
|
557
|
+
#
|
|
558
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key (Network::SSL.key)
|
|
559
|
+
# The RSA key to use for the SSL context.
|
|
560
|
+
#
|
|
561
|
+
# @option kwargs [String] :key_file
|
|
562
|
+
# The path to the SSL `.key` file.
|
|
563
|
+
#
|
|
564
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert (Network::SSL.cert)
|
|
565
|
+
# The X509 certificate to use for the SSL context.
|
|
566
|
+
#
|
|
567
|
+
# @option kwargs [String] :cert_file
|
|
568
|
+
# The path to the SSL `.crt` file.
|
|
569
|
+
#
|
|
570
|
+
# @option kwargs [String] :ca_bundle
|
|
571
|
+
# Path to the CA certificate file or directory.
|
|
572
|
+
#
|
|
573
|
+
# @yield [client]
|
|
574
|
+
# The given block will be passed the newly connected client.
|
|
575
|
+
# After the block has finished, the client will be closed.
|
|
576
|
+
#
|
|
577
|
+
# @yieldparam [OpenSSL::SSL::SSLSocket] client
|
|
578
|
+
# A newly connected client.
|
|
579
|
+
#
|
|
580
|
+
# @return [nil]
|
|
581
|
+
#
|
|
582
|
+
# @example
|
|
583
|
+
# # $ openssl genrsa -out ssl.key 1024
|
|
584
|
+
# # $ openssl req -new -key ssl.key -x509 -days 3653 -out ssl.crt
|
|
585
|
+
# # $ cat ssl.key ssl.crt > ssl.pem
|
|
586
|
+
# # $ chmod 600 ssl.key ssl.pem
|
|
587
|
+
# tls_server_loop(port: 1337, cert: 'ssl.crt', key: 'ssl.key') do |sock|
|
|
588
|
+
# sock.puts 'lol'
|
|
589
|
+
# end
|
|
590
|
+
#
|
|
591
|
+
# @api public
|
|
592
|
+
#
|
|
593
|
+
def tls_server_loop(version: 1.2, **kwargs, &block)
|
|
594
|
+
ssl_server_loop(version: 1.2, **kwargs, &block)
|
|
595
|
+
end
|
|
596
|
+
|
|
597
|
+
#
|
|
598
|
+
# Creates a new SSL socket listening on a given host and port,
|
|
599
|
+
# accepts only one client and then stops listening.
|
|
600
|
+
#
|
|
601
|
+
# @param [1, 1.1, 1.2, String, Symbol, nil] version
|
|
602
|
+
# The TLS version to use.
|
|
603
|
+
#
|
|
604
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
605
|
+
# Additional keyword arguments for {#tls_server_socket}.
|
|
606
|
+
#
|
|
607
|
+
# @option kwargs [Integer] :port
|
|
608
|
+
# The local port to listen on.
|
|
609
|
+
#
|
|
610
|
+
# @option kwargs [String] :host
|
|
611
|
+
# The host to bind to.
|
|
612
|
+
#
|
|
613
|
+
# @option kwargs [Symbol, Boolean] :verify
|
|
614
|
+
# Specifies whether to verify the SSL certificate.
|
|
615
|
+
# May be one of the following:
|
|
616
|
+
#
|
|
617
|
+
# * `:none`
|
|
618
|
+
# * `:peer`
|
|
619
|
+
# * `:fail_if_no_peer_cert`
|
|
620
|
+
# * `:client_once`
|
|
621
|
+
#
|
|
622
|
+
# @option kwargs [Crypto::Key::RSA, OpenSSL::PKey::RSA, nil] :key (Network::SSL.key)
|
|
623
|
+
# The RSA key to use for the SSL context.
|
|
624
|
+
#
|
|
625
|
+
# @option kwargs [String] :key_file
|
|
626
|
+
# The path to the SSL `.key` file.
|
|
627
|
+
#
|
|
628
|
+
# @option kwargs [Crypto::Cert, OpenSSL::X509::Certificate, nil] :cert (Network::SSL.cert)
|
|
629
|
+
# The X509 certificate to use for the SSL context.
|
|
630
|
+
#
|
|
631
|
+
# @option kwargs [String] :cert_file
|
|
632
|
+
# The path to the SSL `.crt` file.
|
|
633
|
+
#
|
|
634
|
+
# @option kwargs [String] :ca_bundle
|
|
635
|
+
# Path to the CA certificate file or directory.
|
|
636
|
+
#
|
|
637
|
+
# @example
|
|
638
|
+
# tls_accept(1337) do |client|
|
|
639
|
+
# client.puts 'lol'
|
|
640
|
+
# end
|
|
641
|
+
#
|
|
642
|
+
# @yield [client]
|
|
643
|
+
# The given block will be passed the newly connected client.
|
|
644
|
+
# After the block has finished, both the client and the server will
|
|
645
|
+
# be closed.
|
|
646
|
+
#
|
|
647
|
+
# @yieldparam [OpenSSL::SSL::SSLSocket] client
|
|
648
|
+
# The newly connected client.
|
|
649
|
+
#
|
|
650
|
+
# @return [nil]
|
|
651
|
+
#
|
|
652
|
+
# @example
|
|
653
|
+
# # $ openssl genrsa -out ssl.key 1024
|
|
654
|
+
# # $ openssl req -new -key ssl.key -x509 -days 3653 -out ssl.crt
|
|
655
|
+
# # $ cat ssl.key ssl.crt > ssl.pem
|
|
656
|
+
# # $ chmod 600 ssl.key ssl.pem
|
|
657
|
+
# tls_accept(port: 1337, cert: 'ssl.crt', key: 'ssl.key') do |client|
|
|
658
|
+
# client.puts 'lol'
|
|
659
|
+
# end
|
|
660
|
+
#
|
|
661
|
+
# @api public
|
|
662
|
+
#
|
|
663
|
+
def tls_accept(version: 1.2, **kwargs, &block)
|
|
664
|
+
ssl_accept(version: version, **kwargs, &block)
|
|
665
|
+
end
|
|
666
|
+
end
|
|
667
|
+
end
|
|
668
|
+
end
|
|
669
|
+
end
|
|
670
|
+
end
|