From c6de8c1a0da1245cc0c7c1c50bd8db949dd70c60 Mon Sep 17 00:00:00 2001 From: "a.m.saafan@gmail.com" Date: Tue, 27 Sep 2011 13:25:02 +0000 Subject: [PATCH] Added Play Sound module. Also, added support for WEBrick custom MIME types. Fixes issue 51 . git-svn-id: https://beef.googlecode.com/svn/trunk@1312 b87d56ec-f9c0-11de-8c8a-61c5e9addfc9 --- core/ruby.rb | 1 + core/ruby/patches/webrick/httputils.rb | 33 ++++++++++++++++++ extensions/demos/html/sound.wav | Bin 0 -> 6742 bytes modules/browser/play_sound/command.js | 45 +++++++++++++++++++++++++ modules/browser/play_sound/config.yaml | 25 ++++++++++++++ modules/browser/play_sound/module.rb | 40 ++++++++++++++++++++++ 6 files changed, 144 insertions(+) create mode 100644 core/ruby/patches/webrick/httputils.rb create mode 100644 extensions/demos/html/sound.wav create mode 100644 modules/browser/play_sound/command.js create mode 100644 modules/browser/play_sound/config.yaml create mode 100644 modules/browser/play_sound/module.rb diff --git a/core/ruby.rb b/core/ruby.rb index de1c81e27..f04f14978 100644 --- a/core/ruby.rb +++ b/core/ruby.rb @@ -28,6 +28,7 @@ require 'core/ruby/patches/webrick/cookie' require 'core/ruby/patches/webrick/genericserver' require 'core/ruby/patches/webrick/httpresponse' require 'core/ruby/patches/webrick/httpservlet/filehandler.rb' +require 'core/ruby/patches/webrick/httputils.rb' # @note Patching DataMapper Data Objects Adapter (dm-do-adapter) require 'core/ruby/patches/dm-do-adapter/adapter.rb' diff --git a/core/ruby/patches/webrick/httputils.rb b/core/ruby/patches/webrick/httputils.rb new file mode 100644 index 000000000..24348f945 --- /dev/null +++ b/core/ruby/patches/webrick/httputils.rb @@ -0,0 +1,33 @@ +# +# httputils.rb -- HTTPUtils Module +# +# Author: IPR -- Internet Programming with Ruby -- writers +# Copyright (c) 2000, 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou +# Copyright (c) 2002 Internet Programming with Ruby writers. All rights +# reserved. +# +# $IPR: httputils.rb,v 1.34 2003/06/05 21:34:08 gotoyuzo Exp $ + + +module WEBrick + + module HTTPUtils + + # Add support for additional mime types + def mime_type(filename, mime_tab) + suffix1 = (/\.(\w+)$/ =~ filename && $1.downcase) + suffix2 = (/\.(\w+)\.[\w\-]+$/ =~ filename && $1.downcase) + + # Add support for additional mime types + supported_mime_types = { + 'wav' => 'audio/x-wav' + } + + mime_tab.merge!(supported_mime_types) + + mime_tab[suffix1] || mime_tab[suffix2] || "application/octet-stream" + end + module_function :mime_type + + end +end diff --git a/extensions/demos/html/sound.wav b/extensions/demos/html/sound.wav new file mode 100644 index 0000000000000000000000000000000000000000..e77a4fb067525b20d04925c46fcacb70408644ba GIT binary patch literal 6742 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 hrFuqJVGo=ONlJ"); + + beef.net.send("<%= @command_url %>", <%= @command_id %>, "Sound Played"); +}); diff --git a/modules/browser/play_sound/config.yaml b/modules/browser/play_sound/config.yaml new file mode 100644 index 000000000..d7a3d362c --- /dev/null +++ b/modules/browser/play_sound/config.yaml @@ -0,0 +1,25 @@ +# +# Copyright 2011 Wade Alcorn wade@bindshell.net +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +beef: + module: + Play_sound: + enable: true + category: "Browser" + name: "Play Sound" + description: "Play a sound on the hooked browser." + authors: ["Saafan"] + target: + working: ["All"] diff --git a/modules/browser/play_sound/module.rb b/modules/browser/play_sound/module.rb new file mode 100644 index 000000000..a9cce080f --- /dev/null +++ b/modules/browser/play_sound/module.rb @@ -0,0 +1,40 @@ +# +# Copyright 2011 Wade Alcorn wade@bindshell.net +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +class Play_sound < BeEF::Core::Command + + # set and return all options for this module + def self.options + configuration = BeEF::Core::Configuration.instance + + sound_file_url = "http://#{configuration.get("beef.http.host")}:#{configuration.get("beef.http.port")}/demos/sound.wav" + + return [{ + 'name' => 'sound_file_uri', + 'description' => 'The web accessable uri for the wave sound file', + 'ui_label' => 'Sound File Path', + 'value' => sound_file_url, + 'width' => '300px' + }] + end + + def post_execute + content = {} + content['result'] = @datastore['result'] + + save content + end + +end