# -*- coding: binary -*- # # A helper module for using and referencing coming user agent strings. # module Rex::UserAgent # # Taken from https://www.whatismybrowser.com/guides/the-latest-user-agent/ # COMMON_AGENTS = [ # Chrome 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36', # Edge 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.47', # Safari 'Mozilla/5.0 (iPad; CPU OS 17_0_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Mobile/15E148 Safari/604.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_0) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Safari/605.1.15', # Firefox 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14.0; rv:109.0) Gecko/20100101 Firefox/118.0' ] # # A randomly-selected agent that will be consistent for the duration of metasploit running # def self.session_agent if @@session_agent @@session_agent else @@session_agent = self.random end end @@session_agent = nil # # Pick a random agent from the common agent list. # def self.random COMMON_AGENTS.sample end # # Choose the agent with the shortest string (for use in payloads) # def self.shortest @@shortest_agent ||= COMMON_AGENTS.min { |a, b| a.size <=> b.size } end # # Choose the most frequent user agent # def self.most_common COMMON_AGENTS[0] end end