Sha256: 47371373522b23370eee5cd8efee3049e9254f37fac410df28e41c4bd7ce36d4

Contents?: true

Size: 1.59 KB

Versions: 8

Compression:

Stored size: 1.59 KB

Contents

module WPScan
  module Finders
    module Users
      # Author Posts
      class AuthorPosts < CMSScanner::Finders::Finder
        # @param [ Hash ] opts
        #
        # @return [ Array<User> ]
        def passive(opts = {})
          found_by_msg = 'Author Posts - %s (Passive Detection)'

          usernames(opts).reduce([]) do |a, e|
            a << WPScan::User.new(
              e[0],
              found_by: format(found_by_msg, e[1]),
              confidence: e[2]
            )
          end
        end

        # @param [ Hash ] opts
        #
        # @return [ Array<Array>> ]
        def usernames(_opts = {})
          found = potential_usernames(target.homepage_res)

          return found unless found.empty?

          target.homepage_res.html.css('header.entry-header a').each do |post_url_node|
            url = post_url_node['href']

            next if url.nil? || url.empty?

            found += potential_usernames(Browser.get(url))
          end

          found.compact.uniq
        end

        # @param [ Typhoeus::Response ] res
        #
        # @return [ Array<Array> ]
        def potential_usernames(res)
          usernames = []

          target.in_scope_urls(res, '//a', %w[href]) do |url, node|
            uri = Addressable::URI.parse(url)

            if uri.path =~ %r{/author/([^/\b]+)/?\z}i
              usernames << [Regexp.last_match[1], 'Author Pattern', 100]
            elsif uri.query =~ /author=[0-9]+/
              usernames << [node.text.to_s.strip, 'Display Name', 30]
            end
          end

          usernames.uniq
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
wpscan-3.2.1 app/finders/users/author_posts.rb
wpscan-3.2.0 app/finders/users/author_posts.rb
wpscan-3.1.0 app/finders/users/author_posts.rb
wpscan-3.0.8 app/finders/users/author_posts.rb
wpscan-3.0.7 app/finders/users/author_posts.rb
wpscan-3.0.6 app/finders/users/author_posts.rb
wpscan-3.0.5 app/finders/users/author_posts.rb
wpscan-3.0.4 app/finders/users/author_posts.rb