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,190 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
module Ronin
|
|
20
|
+
module Support
|
|
21
|
+
module Network
|
|
22
|
+
module SMTP
|
|
23
|
+
#
|
|
24
|
+
# Represents an Email to be sent over {SMTP}.
|
|
25
|
+
#
|
|
26
|
+
class Email
|
|
27
|
+
|
|
28
|
+
# The CR-LF String
|
|
29
|
+
CRLF = "\n\r"
|
|
30
|
+
|
|
31
|
+
# Sender of the email
|
|
32
|
+
#
|
|
33
|
+
# @return [String]
|
|
34
|
+
attr_accessor :from
|
|
35
|
+
|
|
36
|
+
# Recipient of the email
|
|
37
|
+
#
|
|
38
|
+
# @return [Array<#to_s>, String]
|
|
39
|
+
attr_accessor :to
|
|
40
|
+
|
|
41
|
+
# Subject of the email
|
|
42
|
+
#
|
|
43
|
+
# @return [String]
|
|
44
|
+
attr_accessor :subject
|
|
45
|
+
|
|
46
|
+
# Date of the email
|
|
47
|
+
#
|
|
48
|
+
# @return [String, Time]
|
|
49
|
+
attr_accessor :date
|
|
50
|
+
|
|
51
|
+
# Unique message-id string
|
|
52
|
+
#
|
|
53
|
+
# @return [String]
|
|
54
|
+
attr_accessor :message_id
|
|
55
|
+
|
|
56
|
+
# Additional headers
|
|
57
|
+
#
|
|
58
|
+
# @return [Hash{String => String}]
|
|
59
|
+
attr_reader :headers
|
|
60
|
+
|
|
61
|
+
# Body of the email
|
|
62
|
+
#
|
|
63
|
+
# @return [String, Array<String>]
|
|
64
|
+
attr_accessor :body
|
|
65
|
+
|
|
66
|
+
#
|
|
67
|
+
# Creates a new Email object.
|
|
68
|
+
#
|
|
69
|
+
# @param [String] from
|
|
70
|
+
# The address the email is from.
|
|
71
|
+
#
|
|
72
|
+
# @param [Array<#to_s>, String] to
|
|
73
|
+
# The address that the email should be sent to.
|
|
74
|
+
#
|
|
75
|
+
# @param [String] subject
|
|
76
|
+
# The subject of the email.
|
|
77
|
+
#
|
|
78
|
+
# @param [String] message_id
|
|
79
|
+
# Message-ID of the email.
|
|
80
|
+
#
|
|
81
|
+
# @param [String, Time] date
|
|
82
|
+
# The date the email was sent on.
|
|
83
|
+
#
|
|
84
|
+
# @param [Hash<String => String}] headers
|
|
85
|
+
# Additional headers.
|
|
86
|
+
#
|
|
87
|
+
# @param [String, Array<String>] body
|
|
88
|
+
# The body of the email.
|
|
89
|
+
#
|
|
90
|
+
# @yield [email]
|
|
91
|
+
# If a block is given, it will be passed the newly created email
|
|
92
|
+
# object.
|
|
93
|
+
#
|
|
94
|
+
# @yieldparam [Email] email
|
|
95
|
+
# The newly created email object.
|
|
96
|
+
#
|
|
97
|
+
# @api public
|
|
98
|
+
#
|
|
99
|
+
def initialize(from: nil,
|
|
100
|
+
to: nil,
|
|
101
|
+
subject: nil,
|
|
102
|
+
date: Time.now,
|
|
103
|
+
message_id: nil,
|
|
104
|
+
headers: nil,
|
|
105
|
+
body: nil)
|
|
106
|
+
@from = from
|
|
107
|
+
@to = to
|
|
108
|
+
@subject = subject
|
|
109
|
+
@date = date
|
|
110
|
+
@message_id = message_id
|
|
111
|
+
|
|
112
|
+
@headers = {}
|
|
113
|
+
@headers.merge!(headers) if headers
|
|
114
|
+
|
|
115
|
+
@body = []
|
|
116
|
+
|
|
117
|
+
if body
|
|
118
|
+
case body
|
|
119
|
+
when Array
|
|
120
|
+
@body += body
|
|
121
|
+
else
|
|
122
|
+
@body << body
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
yield self if block_given?
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
#
|
|
130
|
+
# Formats the email into a SMTP message.
|
|
131
|
+
#
|
|
132
|
+
# @return [String]
|
|
133
|
+
# Properly formatted SMTP message.
|
|
134
|
+
#
|
|
135
|
+
# @see https://rubydoc.info/stdlib/net/Net/SMTP
|
|
136
|
+
#
|
|
137
|
+
# @api public
|
|
138
|
+
#
|
|
139
|
+
def to_s
|
|
140
|
+
address = lambda { |info|
|
|
141
|
+
case info
|
|
142
|
+
when Array
|
|
143
|
+
"#{info[0]} <#{info[1]}>"
|
|
144
|
+
else
|
|
145
|
+
info
|
|
146
|
+
end
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
message = []
|
|
150
|
+
|
|
151
|
+
if @from
|
|
152
|
+
message << "From: #{@from}"
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
if @to
|
|
156
|
+
message << case @to
|
|
157
|
+
when Array
|
|
158
|
+
"To: #{@to.join(', ')}"
|
|
159
|
+
else
|
|
160
|
+
"To: #{@to}"
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
if @subject
|
|
165
|
+
message << "Subject: #{@subject}"
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
if @date
|
|
169
|
+
message << "Date: #{@date}"
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
if @message_id
|
|
173
|
+
message << "Message-Id: <#{@message_id}>"
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
@headers.each do |name,value|
|
|
177
|
+
message << "#{name}: #{value}"
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
message << ''
|
|
181
|
+
message += @body
|
|
182
|
+
|
|
183
|
+
return message.join(CRLF)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
end
|
|
@@ -0,0 +1,290 @@
|
|
|
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/smtp/email'
|
|
20
|
+
require 'ronin/support/network/dns/idn'
|
|
21
|
+
require 'ronin/support/network/ssl/mixin'
|
|
22
|
+
|
|
23
|
+
begin
|
|
24
|
+
require 'net/smtp'
|
|
25
|
+
rescue LoadError => error
|
|
26
|
+
warn "ronin/network/smtp requires the net-smtp gem listed in the Gemfile."
|
|
27
|
+
raise(error)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
module Ronin
|
|
31
|
+
module Support
|
|
32
|
+
module Network
|
|
33
|
+
module SMTP
|
|
34
|
+
#
|
|
35
|
+
# Provides helper methods for communicating with SMTP services.
|
|
36
|
+
#
|
|
37
|
+
module Mixin
|
|
38
|
+
include SSL::Mixin
|
|
39
|
+
|
|
40
|
+
# Default SMTP port
|
|
41
|
+
DEFAULT_PORT = 25
|
|
42
|
+
|
|
43
|
+
#
|
|
44
|
+
# Creates a properly formatted email.
|
|
45
|
+
#
|
|
46
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
47
|
+
# Additional keyword arguments for
|
|
48
|
+
# {Network::SMTP::Email#initialize}.
|
|
49
|
+
#
|
|
50
|
+
# @yield [email]
|
|
51
|
+
# If a block is given, it will be passed the newly created
|
|
52
|
+
# {Network::SMTP::Email} object.
|
|
53
|
+
#
|
|
54
|
+
# @yieldparam [Email] email
|
|
55
|
+
# The new Email object.
|
|
56
|
+
#
|
|
57
|
+
# @return [String]
|
|
58
|
+
# Formatted SMTP email.
|
|
59
|
+
#
|
|
60
|
+
# @see Email#initialize
|
|
61
|
+
#
|
|
62
|
+
# @api public
|
|
63
|
+
#
|
|
64
|
+
def self.message(**kwargs,&block)
|
|
65
|
+
Email.new(**kwargs,&block).to_s
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
#
|
|
69
|
+
# Creates a new email message.
|
|
70
|
+
#
|
|
71
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
72
|
+
# Additional keyword arguments for
|
|
73
|
+
# {Network::SMTP::Email#initialize}.
|
|
74
|
+
#
|
|
75
|
+
# @yield [email]
|
|
76
|
+
# The given block will be passed the new email.
|
|
77
|
+
#
|
|
78
|
+
# @yieldparam [Email] email
|
|
79
|
+
# The new email.
|
|
80
|
+
#
|
|
81
|
+
# @return [Email]
|
|
82
|
+
# the new email message object.
|
|
83
|
+
#
|
|
84
|
+
# @see Email#initialize
|
|
85
|
+
#
|
|
86
|
+
# @api public
|
|
87
|
+
#
|
|
88
|
+
def smtp_message(**kwargs,&block)
|
|
89
|
+
Email.new(**kwargs,&block)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
#
|
|
93
|
+
# Creates a connection to the SMTP server.
|
|
94
|
+
#
|
|
95
|
+
# @param [String] host
|
|
96
|
+
# The host to connect to.
|
|
97
|
+
#
|
|
98
|
+
# @param [String] user
|
|
99
|
+
# The user-name to authenticate with.
|
|
100
|
+
#
|
|
101
|
+
# @param [String] password
|
|
102
|
+
# The password to authenticate with.
|
|
103
|
+
#
|
|
104
|
+
# @param [Integer] port
|
|
105
|
+
# The port to connect to.
|
|
106
|
+
#
|
|
107
|
+
# @param [Boolean, Hash] ssl
|
|
108
|
+
# Additional SSL options.
|
|
109
|
+
#
|
|
110
|
+
# @option ssl [Boolean] :verify
|
|
111
|
+
# Specifies that the SSL certificate should be verified.
|
|
112
|
+
#
|
|
113
|
+
# @option ssl [String] :certs
|
|
114
|
+
# The path to the file containing CA certs of the server.
|
|
115
|
+
#
|
|
116
|
+
# @param [String] helo
|
|
117
|
+
# The HELO domain.
|
|
118
|
+
#
|
|
119
|
+
# @param [:login, :plain, :cram_md5] auth
|
|
120
|
+
# The type of authentication to use. Can be either `:login`,
|
|
121
|
+
# `:plain`, or `:cram_md5`.
|
|
122
|
+
#
|
|
123
|
+
# @yield [smtp]
|
|
124
|
+
# If a block is given, it will be passed an SMTP session object.
|
|
125
|
+
# Once the block returns the SMTP session will be closed.
|
|
126
|
+
#
|
|
127
|
+
# @yieldparam [Net::SMTP] smtp
|
|
128
|
+
# The SMTP session.
|
|
129
|
+
#
|
|
130
|
+
# @return [Net::SMTP, nil]
|
|
131
|
+
# The SMTP session. If a block is given, then `nil` will be
|
|
132
|
+
# returned.
|
|
133
|
+
#
|
|
134
|
+
# @example
|
|
135
|
+
# smtp_connect('www.example.com', user: 'joe')
|
|
136
|
+
#
|
|
137
|
+
# @example
|
|
138
|
+
# smtp_connect('www.example.com', user: 'joe') do |smtp|
|
|
139
|
+
# # ...
|
|
140
|
+
# end
|
|
141
|
+
#
|
|
142
|
+
# @api public
|
|
143
|
+
#
|
|
144
|
+
def smtp_connect(host, user: ,
|
|
145
|
+
password: , port: DEFAULT_PORT,
|
|
146
|
+
ssl: nil,
|
|
147
|
+
helo: 'localhost',
|
|
148
|
+
auth: :login)
|
|
149
|
+
host = DNS::IDN.to_ascii(host)
|
|
150
|
+
user = user.to_s
|
|
151
|
+
password = password.to_s
|
|
152
|
+
|
|
153
|
+
case ssl
|
|
154
|
+
when Hash
|
|
155
|
+
ssl = true
|
|
156
|
+
context = ssl_context(ssl)
|
|
157
|
+
when TrueClass
|
|
158
|
+
ssl = true
|
|
159
|
+
context = ssl_context
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
smtp = Net::SMTP.new(host,port)
|
|
163
|
+
smtp.enable_starttls(context) if ssl
|
|
164
|
+
smtp.start(helo,user,password,auth)
|
|
165
|
+
|
|
166
|
+
if block_given?
|
|
167
|
+
yield smtp
|
|
168
|
+
smtp.finish
|
|
169
|
+
else
|
|
170
|
+
return smtp
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
#
|
|
175
|
+
# Connects to an SMTP server and sends a message.
|
|
176
|
+
#
|
|
177
|
+
# @param [String] host
|
|
178
|
+
# The host to connect to.
|
|
179
|
+
#
|
|
180
|
+
# @param [Integer] port
|
|
181
|
+
# The port to connect to.
|
|
182
|
+
#
|
|
183
|
+
# @param [String] user
|
|
184
|
+
# The user to authenticate as.
|
|
185
|
+
#
|
|
186
|
+
# @param [String] password
|
|
187
|
+
# The password to authenticate with.
|
|
188
|
+
#
|
|
189
|
+
# @param [Boolean, Hash] ssl
|
|
190
|
+
# Additional SSL options.
|
|
191
|
+
#
|
|
192
|
+
# @option ssl [Boolean] :verify
|
|
193
|
+
# Specifies that the SSL certificate should be verified.
|
|
194
|
+
#
|
|
195
|
+
# @option ssl [String] :certs
|
|
196
|
+
# The path to the file containing CA certs of the server.
|
|
197
|
+
#
|
|
198
|
+
# @param [String] helo
|
|
199
|
+
# The HELO domain.
|
|
200
|
+
#
|
|
201
|
+
# @param [:login, :plain, :cram_md5] auth
|
|
202
|
+
# The type of authentication to use. Can be either `:login`,
|
|
203
|
+
# `:plain`, or `:cram_md5`.
|
|
204
|
+
#
|
|
205
|
+
# @param [String] from
|
|
206
|
+
# The address the email is from.
|
|
207
|
+
#
|
|
208
|
+
# @param [Array, String] to
|
|
209
|
+
# The address that the email should be sent to.
|
|
210
|
+
#
|
|
211
|
+
# @param [String] subject
|
|
212
|
+
# The subject of the email.
|
|
213
|
+
#
|
|
214
|
+
# @param [String] message_id
|
|
215
|
+
# Message-ID of the email.
|
|
216
|
+
#
|
|
217
|
+
# @param [String, Time] date
|
|
218
|
+
# The date the email was sent on.
|
|
219
|
+
#
|
|
220
|
+
# @param [Hash<String => String}] headers
|
|
221
|
+
# Additional headers.
|
|
222
|
+
#
|
|
223
|
+
# @param [String, Array<String>] body
|
|
224
|
+
# The body of the email.
|
|
225
|
+
#
|
|
226
|
+
# @yield [email]
|
|
227
|
+
# The given block will be passed the new email to be sent.
|
|
228
|
+
#
|
|
229
|
+
# @yieldparam [SMTP::Email] email
|
|
230
|
+
# The new email to be sent.
|
|
231
|
+
#
|
|
232
|
+
# @see #smtp_connect
|
|
233
|
+
#
|
|
234
|
+
# @example
|
|
235
|
+
# smtp_send_message 'www.example.com',
|
|
236
|
+
# to: 'joe@example.com',
|
|
237
|
+
# from: 'eve@example.com',
|
|
238
|
+
# subject: 'Hello',
|
|
239
|
+
# message_id: 'XXXX',
|
|
240
|
+
# body: 'Hello'
|
|
241
|
+
#
|
|
242
|
+
# @example Using the block:
|
|
243
|
+
# smtp_send_message('www.example.com') do |email|
|
|
244
|
+
# email.to = 'joe@example.com'
|
|
245
|
+
# email.from 'eve@example.com'
|
|
246
|
+
# email.subject = 'Hello'
|
|
247
|
+
# email.message_id = 'XXXXXXXXXX'
|
|
248
|
+
# email.body << 'Hello!'
|
|
249
|
+
# end
|
|
250
|
+
#
|
|
251
|
+
# @since 0.2.0
|
|
252
|
+
#
|
|
253
|
+
# @api public
|
|
254
|
+
#
|
|
255
|
+
def smtp_send_message(host, user: ,
|
|
256
|
+
password: ,
|
|
257
|
+
# smtp options
|
|
258
|
+
port: DEFAULT_PORT,
|
|
259
|
+
ssl: nil,
|
|
260
|
+
helo: 'localhost',
|
|
261
|
+
auth: :login,
|
|
262
|
+
# email options
|
|
263
|
+
from: nil,
|
|
264
|
+
to: nil,
|
|
265
|
+
subject: nil,
|
|
266
|
+
date: Time.now,
|
|
267
|
+
message_id: nil,
|
|
268
|
+
headers: nil,
|
|
269
|
+
body: nil,
|
|
270
|
+
&block)
|
|
271
|
+
email = smtp_message(
|
|
272
|
+
to: to,
|
|
273
|
+
subject: subject,
|
|
274
|
+
date: date,
|
|
275
|
+
message_id: message_id,
|
|
276
|
+
headers: headers,
|
|
277
|
+
body: body,
|
|
278
|
+
&block
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
smtp_connect(host,user,password,
|
|
282
|
+
port: port, ssl: ssl, helo: helo, auth: auth) do |smtp|
|
|
283
|
+
smtp.send_message(email.to_s, email.from, email.to)
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
end
|
|
287
|
+
end
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
end
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
#
|
|
2
|
-
# Copyright (c) 2006-
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
3
4
|
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
# Ronin Support is free software: you can redistribute it and/or modify
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
7
6
|
# it under the terms of the GNU Lesser General Public License as published
|
|
8
7
|
# by the Free Software Foundation, either version 3 of the License, or
|
|
9
8
|
# (at your option) any later version.
|
|
10
9
|
#
|
|
11
|
-
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
12
11
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
12
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
13
|
# GNU Lesser General Public License for more details.
|
|
15
14
|
#
|
|
16
15
|
# You should have received a copy of the GNU Lesser General Public License
|
|
17
|
-
# along with
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
18
17
|
#
|
|
19
18
|
|
|
20
|
-
require 'ronin/
|
|
19
|
+
require 'ronin/support/network/smtp/email'
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-support is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-support is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/support/home'
|
|
20
|
+
require 'ronin/support/network/ip'
|
|
21
|
+
require 'ronin/support/crypto/cert'
|
|
22
|
+
require 'ronin/support/network/ssl/local_key'
|
|
23
|
+
|
|
24
|
+
require 'fileutils'
|
|
25
|
+
|
|
26
|
+
module Ronin
|
|
27
|
+
module Support
|
|
28
|
+
module Network
|
|
29
|
+
module SSL
|
|
30
|
+
#
|
|
31
|
+
# Represents the certificate used for local SSL server sockets.
|
|
32
|
+
#
|
|
33
|
+
# @api private
|
|
34
|
+
#
|
|
35
|
+
module LocalCert
|
|
36
|
+
# The cached `~/.local/share/ronin/ronin-support/ssl.crt`.
|
|
37
|
+
PATH = File.join(Home::LOCAL_SHARE_DIR,'ronin','ronin-support','ssl.crt')
|
|
38
|
+
|
|
39
|
+
#
|
|
40
|
+
# Generates a new self-signed SSL certificate using the
|
|
41
|
+
# {LocalKey local key} and saves it to `~/.local/share/ronin/ssl.crt`.
|
|
42
|
+
#
|
|
43
|
+
# @return [Crypto::Cert]
|
|
44
|
+
# The newly generated certificate.
|
|
45
|
+
#
|
|
46
|
+
# @note
|
|
47
|
+
# The file will be created with chmod umask of `0644`
|
|
48
|
+
# (aka `-rw-r--r--`).
|
|
49
|
+
#
|
|
50
|
+
def self.generate
|
|
51
|
+
cert = Crypto::Cert.generate(
|
|
52
|
+
key: LocalKey.fetch,
|
|
53
|
+
subject: {
|
|
54
|
+
common_name: 'localhost',
|
|
55
|
+
organization: 'ronin-rb',
|
|
56
|
+
organizational_unit: 'ronin-support',
|
|
57
|
+
},
|
|
58
|
+
extensions: {
|
|
59
|
+
'subjectAltName' => subject_alt_name
|
|
60
|
+
}
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
FileUtils.mkdir_p(File.dirname(PATH))
|
|
64
|
+
FileUtils.touch(PATH)
|
|
65
|
+
FileUtils.chmod(0644,PATH)
|
|
66
|
+
|
|
67
|
+
cert.save(PATH)
|
|
68
|
+
return cert
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
#
|
|
72
|
+
# Loads the local certificate from `~/.local/share/ronin/ssl.crt`.
|
|
73
|
+
#
|
|
74
|
+
# @return [Crypto::Cert]
|
|
75
|
+
# The loaded certificate.
|
|
76
|
+
#
|
|
77
|
+
def self.load
|
|
78
|
+
Crypto::Cert.load_file(PATH)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
#
|
|
82
|
+
# Fetches the default SSL certificate used for all SSL server sockets.
|
|
83
|
+
#
|
|
84
|
+
# @return [Crypto::Cert]
|
|
85
|
+
# The default SSL certificate.
|
|
86
|
+
#
|
|
87
|
+
def self.fetch
|
|
88
|
+
if File.file?(PATH) then load
|
|
89
|
+
else generate
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
private
|
|
94
|
+
|
|
95
|
+
#
|
|
96
|
+
# The value for the `subjectAltName` extension.
|
|
97
|
+
#
|
|
98
|
+
# @return [String]
|
|
99
|
+
#
|
|
100
|
+
def self.subject_alt_name
|
|
101
|
+
string = String.new("DNS: localhost")
|
|
102
|
+
|
|
103
|
+
# append the additional local IP addresses
|
|
104
|
+
IP.local_addresses.each do |address|
|
|
105
|
+
string << ", IP: #{address}"
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
return string
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
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/home'
|
|
20
|
+
require 'ronin/support/crypto/key/rsa'
|
|
21
|
+
|
|
22
|
+
require 'fileutils'
|
|
23
|
+
|
|
24
|
+
module Ronin
|
|
25
|
+
module Support
|
|
26
|
+
module Network
|
|
27
|
+
module SSL
|
|
28
|
+
#
|
|
29
|
+
# Represents the RSA signing key used for local SSL server sockets.
|
|
30
|
+
#
|
|
31
|
+
# @api private
|
|
32
|
+
#
|
|
33
|
+
module LocalKey
|
|
34
|
+
# The cached `~/.local/share/ronin/ssl.key` file.
|
|
35
|
+
PATH = File.join(Home::LOCAL_SHARE_DIR,'ronin','ronin-support','ssl.key')
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
# Generates a new RSA key and saves it to
|
|
39
|
+
# `~/.local/share/ronin/ssl.key`.
|
|
40
|
+
#
|
|
41
|
+
# @return [Crypto::Key::RSA]
|
|
42
|
+
# The newly generated key.
|
|
43
|
+
#
|
|
44
|
+
# @note
|
|
45
|
+
# The file will be created with a chmod umask of `0640`
|
|
46
|
+
# (aka `-rw-r-----`).
|
|
47
|
+
#
|
|
48
|
+
def self.generate
|
|
49
|
+
key = Crypto::Key::RSA.generate
|
|
50
|
+
|
|
51
|
+
FileUtils.mkdir_p(File.dirname(PATH))
|
|
52
|
+
FileUtils.touch(PATH)
|
|
53
|
+
FileUtils.chmod(0640,PATH)
|
|
54
|
+
|
|
55
|
+
key.save(PATH)
|
|
56
|
+
return key
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
#
|
|
60
|
+
# Loads the RSA key from `~/.local/share/ronin/ssl.key`.
|
|
61
|
+
#
|
|
62
|
+
# @return [Crypto::Key::RSA]
|
|
63
|
+
# The loaded RSA key.
|
|
64
|
+
#
|
|
65
|
+
def self.load
|
|
66
|
+
Crypto::Key::RSA.load_file(PATH)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
#
|
|
70
|
+
# The default RSA key used for all SSL server sockets.
|
|
71
|
+
#
|
|
72
|
+
# @return [Crypto::Key::RSA]
|
|
73
|
+
# The default RSA key.
|
|
74
|
+
#
|
|
75
|
+
def self.fetch
|
|
76
|
+
if File.file?(PATH) then load
|
|
77
|
+
else generate
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|