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