module PWN::Plugins::TransparentBrowser
def self.authors
def self.authors st.pentest@0dayinc.com>
def self.close(opts = {})
def self.close(opts = {}) [:browser_obj] [:tor_obj].nil? r_obj[:tor_obj] r.stop(tor_obj: browser_obj[:tor_obj]) [:browser].to_s.include?('RestClient') ser unless this_browser_obj.nil? (thus the &) wser]&.close => e
def self.find_element_by_text(opts = {})
def self.find_element_by_text(opts = {}) [:browser_obj] .to_s rowser_obj[:browser].elements.select do |element| text h do |element_found| {element_found.html}\n\n\n") => e
def self.help
def self.help {self}.open( :firefox|:chrome|:headless_chrome|:headless_firefox|:rest|:websocket, al scheme://proxy_host:port || tor', 'optional - boolean (defaults to false)' 1.public_methods **************************************** action Only works w/ Chrome ommands can be found here: devtools.github.io/devtools-protocol/ er_obj1.driver.devtools blic_methods stance_variables stance_variable_get('@messages') d('Tracing.start') d('Tracing.requestMemoryDump') d('Tracing.end') stance_variable_get('@messages') d('Network.enable') evtools.instance_variable_get('@messages').last if devtools.instance_variable_get('@messages').last['method'] == 'Network.webSocketFrameReceived' p d('Network.disable') and Sending JavaScript to Console d('Runtime.enable') d('Console.enable') d('DOM.enable') d('Page.enable') d('Log.enable') d('Debugger.enable') d('Debugger.pause') cmd('Console.clearMessages') cmd('Log.clear') = [] g_event(:console) { |event| console_events.push(event) } cmd('Debugger.stepInto') #{step}\" = devtools.send_cmd('DOM.getDocument') ocument:\\n\#{this_document}\\n\\n\\n\" { 'for(var pop_var in window) { if (window.hasOwnProperty(pop_var) && window[pop_var] != null) console.log(pop_var + \" = \" + window[pop_var]); }' send_cmd('Runtime.evaluate', **console_cmd) 0 .each do |event| rgs Response Length: \#{console_events.length}\" _digest = OpenSSL::Digest::SHA256.hexdigest( ts.inspect Events Array SHA256 Digest: \#{console_events_digest}\" 0 \n\" tep in \" to(1) {|n| print \"\#{n} \"; sleep 1 } d('Debugger.disable') d('Log.disable') d('Page.disable') d('DOM.disable') d('Console.disable') d('Runtime.disable') s Examples **************************************** {self}.linkout( required - browser_obj returned from #open method)' {self}.find_element_by_text( required - browser_obj returned from #open method)', d - text to search for in the DOM' human( red - string to type as human', at: 'optional - float timing in between keypress (defaults to 0.09)' r_obj1.text_field(name: \"search\").send_keys(char) } {self}.close( required - browser_obj returned from #open method)'
def self.linkout(opts = {})
def self.linkout(opts = {}) [:browser_obj] er].links.each do |link| {link.text} => #{link.href}\n\n\n") unless link.text == '' => e
def self.open(opts = {})
def self.open(opts = {}) s[:browser_type] y].to_s unless opts[:proxy].nil? 'tor' lugins::Tor.start //#{tor_obj[:ip]}:#{tor_obj[:port]}" _obj] = tor_obj s] ? (with_devtools = true) : (with_devtools = false) he default timeout from 30 seconds to 15 min for slow sites out = 900 elenium::WebDriver::Firefox::Profile.new ssembly Verbosity vascript.options.wasm_verbose'] = true de in ~/Downloads owser.download.folderList'] = 1 owser.helperApps.neverAsk.saveToDisk'] = 'application/pdf' x's built-in PDF viewer fjs.disabled'] = true Acrobat PDF preview plugin ugin.scan.plid.all'] = false ugin.scan.Acrobat'] = '99.0' st proxy capabilities are enabled twork.proxy.no_proxies_on'] = '' to run a bit longer dom.max_chrome_script_run_time'] = 180 dom.max_script_run_time'] = 180 r cache owser.cache.disk.enable'] = false owser.cache.disk_cache_ssl.enable'] = false owser.cache.memory.enable'] = false owser.cache.offline.enable'] = false vtools.cache.disabled'] = true m.caches.enabled'] = false m::WebDriver::Remote::Capabilities.firefox secureCerts] = true network.proxy.type'] = 1 network.proxy.allow_hijacking_localhost'] = true ['network.proxy.socks_version'] = 5 ['network.proxy.socks'] = tor_obj[:ip] ['network.proxy.socks_port'] = tor_obj[:port] ['network.proxy.ftp'] = URI(proxy).host ['network.proxy.ftp_port'] = URI(proxy).port ['network.proxy.http'] = URI(proxy).host ['network.proxy.http_port'] = URI(proxy).port ['network.proxy.ssl'] = URI(proxy).host ['network.proxy.ssl_port'] = URI(proxy).port tools') if with_devtools um::WebDriver::Firefox::Options.new(args: args, accept_insecure_certs: true) = this_profile ium::WebDriver.for(:firefox, capabilities: options) m::WebDriver.for(:firefox, options: options) wser] = Watir::Browser.new(driver) elenium::WebDriver::Chrome::Profile.new wnload.prompt_for_download'] = false wnload.default_directory'] = '~/Downloads' -start-maximized') -disable-notifications') "--host-resolver-rules='MAP * 0.0.0.0 , EXCLUDE #{tor_obj[:ip]}'") if tor_obj "--proxy-server=#{proxy}") '--auto-open-devtools-for-tabs') '--disable-hang-monitor') um::WebDriver::Chrome::Options.new( , e_certs: true = this_profile ium::WebDriver.for(:chrome, capabilities: options) m::WebDriver.for(:chrome, options: options) wser] = Watir::Browser.new(driver) eadless_firefox elenium::WebDriver::Firefox::Profile.new ssembly Verbosity vascript.options.wasm_verbose'] = true de in ~/Downloads owser.download.folderList'] = 1 owser.helperApps.neverAsk.saveToDisk'] = 'application/pdf' x's built-in PDF viewer fjs.disabled'] = true Acrobat PDF preview plugin ugin.scan.plid.all'] = false ugin.scan.Acrobat'] = '99.0' st proxy capabilities are enabled twork.proxy.no_proxies_on'] = '' to run a bit longer dom.max_chrome_script_run_time'] = 180 dom.max_script_run_time'] = 180 r cache owser.cache.disk.enable'] = false owser.cache.disk_cache_ssl.enable'] = false owser.cache.memory.enable'] = false owser.cache.offline.enable'] = false vtools.cache.disabled'] = true m.caches.enabled'] = false m::WebDriver::Remote::Capabilities.firefox secureCerts] = true network.proxy.type'] = 1 network.proxy.allow_hijacking_localhost'] = true ['network.proxy.socks_version'] = 5 ['network.proxy.socks'] = tor_obj[:ip] ['network.proxy.socks_port'] = tor_obj[:port] ['network.proxy.ftp'] = URI(proxy).host ['network.proxy.ftp_port'] = URI(proxy).port ['network.proxy.http'] = URI(proxy).host ['network.proxy.http_port'] = URI(proxy).port ['network.proxy.ssl'] = URI(proxy).host ['network.proxy.ssl_port'] = URI(proxy).port um::WebDriver::Firefox::Options.new(args: ['-headless'], accept_insecure_certs: true) = this_profile m::WebDriver.for(:firefox, options: options) wser] = Watir::Browser.new(driver) ome elenium::WebDriver::Chrome::Profile.new wnload.prompt_for_download'] = false wnload.default_directory'] = '~/Downloads' -headless') -start-maximized') -disable-notifications') "--host-resolver-rules='MAP * 0.0.0.0 , EXCLUDE #{tor_obj[:ip]}'") if tor_obj "--proxy-server=#{proxy}") um::WebDriver::Chrome::Options.new( , e_certs: true = this_profile m::WebDriver.for(:chrome, options: options) wser] = Watir::Browser.new(driver) wser] = RestClient cks_server = tor_obj[:ip] cks_port = tor_obj[:port] :browser].proxy = proxy cks_server = tor_obj[:ip] cks_port = tor_obj[:port] origin: proxy } erify_peer: false } rowser] = Faye::WebSocket::Client.new( pts, xy_opts rowser] = Faye::WebSocket::Client.new('') wser_type only supports :firefox, :chrome, :headless, :rest, or :websocket' => e
def self.type_as_human(opts = {})
def self.type_as_human(opts = {}) ing].to_s if opts[:rand_sleep_float] opts[:rand_sleep_float].to_f else 0.09 end o |char| d(rand_sleep_float) => e