Class: Msf::EvasionDriver
- Inherits:
- 
      Object
      
        - Object
- Msf::EvasionDriver
 
- Defined in:
- lib/msf/core/evasion_driver.rb
Instance Attribute Summary collapse
- 
  
    
      #evasion  ⇒ Object 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    :nodoc:. 
- 
  
    
      #force_wait_for_session  ⇒ Object 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    :nodoc:. 
- 
  
    
      #job_id  ⇒ Object 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    The identifier of the job this evasion module is launched as, if it’s run as a job. 
- 
  
    
      #payload  ⇒ Object 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    :nodoc:. 
- 
  
    
      #semaphore  ⇒ Object 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    To synchronize threads cleaning up the evasion. 
- 
  
    
      #session  ⇒ Object 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    :nodoc:. 
- 
  
    
      #use_job  ⇒ Object 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    :nodoc:. 
Instance Method Summary collapse
- 
  
    
      #compatible_payload?(payload)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    Checks to see if the supplied payload is compatible with the current evasion module. 
- 
  
    
      #initialize(framework)  ⇒ EvasionDriver 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    Initializes the evasion driver using the supplied framework instance. 
- 
  
    
      #job_cleanup_proc(ctx)  ⇒ Object 
    
    
  
  
  
  
  protected
  
  
  
  
    Clean up the evasion after the job completes. 
- 
  
    
      #job_run_proc(ctx)  ⇒ Object 
    
    
  
  
  
  
  protected
  
  
  
  
    Job run proc, sets up the eevasion and kicks it off. 
- #run ⇒ Object
- #target_idx ⇒ Object
- #target_idx=(target_idx) ⇒ Object
- #validate ⇒ Object
Constructor Details
#initialize(framework) ⇒ EvasionDriver
Initializes the evasion driver using the supplied framework instance.
| 10 11 12 13 14 15 16 17 | # File 'lib/msf/core/evasion_driver.rb', line 10 def initialize(framework) self.payload = nil self.evasion = nil self.use_job = false self.job_id = nil self.force_wait_for_session = false self.semaphore = Mutex.new end | 
Instance Attribute Details
#evasion ⇒ Object
:nodoc:
| 94 95 96 | # File 'lib/msf/core/evasion_driver.rb', line 94 def evasion @evasion end | 
#force_wait_for_session ⇒ Object
:nodoc:
| 102 103 104 | # File 'lib/msf/core/evasion_driver.rb', line 102 def force_wait_for_session @force_wait_for_session end | 
#job_id ⇒ Object
The identifier of the job this evasion module is launched as, if it’s run as a job.
| 101 102 103 | # File 'lib/msf/core/evasion_driver.rb', line 101 def job_id @job_id end | 
#payload ⇒ Object
:nodoc:
| 95 96 97 | # File 'lib/msf/core/evasion_driver.rb', line 95 def payload @payload end | 
#semaphore ⇒ Object
To synchronize threads cleaning up the evasion
| 106 107 108 | # File 'lib/msf/core/evasion_driver.rb', line 106 def semaphore @semaphore end | 
#session ⇒ Object
:nodoc:
| 103 104 105 | # File 'lib/msf/core/evasion_driver.rb', line 103 def session @session end | 
#use_job ⇒ Object
:nodoc:
| 96 97 98 | # File 'lib/msf/core/evasion_driver.rb', line 96 def use_job @use_job end | 
Instance Method Details
#compatible_payload?(payload) ⇒ Boolean
Checks to see if the supplied payload is compatible with the current evasion module. Assumes that target_idx is valid.
| 40 41 42 | # File 'lib/msf/core/evasion_driver.rb', line 40 def compatible_payload?(payload) !evasion.compatible_payloads.find { |refname, _| refname == payload.refname }.nil? end | 
#job_cleanup_proc(ctx) ⇒ Object (protected)
Clean up the evasion after the job completes.
| 125 126 127 128 129 | # File 'lib/msf/core/evasion_driver.rb', line 125 def job_cleanup_proc(ctx) evasion, payload = ctx evasion.framework.events.on_module_complete(evasion) semaphore.synchronize { evasion.cleanup } end | 
#job_run_proc(ctx) ⇒ Object (protected)
Job run proc, sets up the eevasion and kicks it off.
| 113 114 115 116 117 118 119 120 | # File 'lib/msf/core/evasion_driver.rb', line 113 def job_run_proc(ctx) evasion, payload = ctx evasion.setup evasion.framework.events.on_module_run(evasion) # Launch the evasion module evasion.run end | 
#run ⇒ Object
| 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | # File 'lib/msf/core/evasion_driver.rb', line 69 def run # First thing's first -- validate the state. Make sure all requirement # parameters are set, including those that are derived from the # datastore. validate() # Explicitly clear the module's job_id in case it was set in a previous # run evasion.job_id = nil # Generate the encoded version of the supplied payload on the # evasion module instance evasion.generate_payload(payload) # No need to copy since we aren't creating a job. We wait until # they're finished running to do anything else with them, so # nothing should be able to modify their datastore or other # settings until after they're done. ctx = [ evasion, payload ] job_run_proc(ctx) job_cleanup_proc(ctx) end | 
#target_idx ⇒ Object
| 31 32 33 | # File 'lib/msf/core/evasion_driver.rb', line 31 def target_idx @target_idx end | 
#target_idx=(target_idx) ⇒ Object
| 19 20 21 22 23 24 25 26 27 28 29 | # File 'lib/msf/core/evasion_driver.rb', line 19 def target_idx=(target_idx) if (target_idx) # Make sure the target index is valid if (target_idx >= evasion.targets.length) raise Rex::ArgumentError, "Invalid target index.", caller end end # Set the active target @target_idx = target_idx end | 
#validate ⇒ Object
| 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | # File 'lib/msf/core/evasion_driver.rb', line 44 def validate if (payload == nil) raise MissingPayloadError, "A payload has not been selected.", caller end # Make sure the payload is compatible after all unless compatible_payload?(payload) raise IncompatiblePayloadError.new(payload.refname), "#{payload.refname} is not a compatible payload.", caller end # Associate the payload instance with the evasion payload.assoc_exploit = evasion # Finally, validate options on the evasion module to ensure that things # are ready to operate as they should. evasion..validate(evasion.datastore) # Validate the payload's options. The payload's datastore is # most likely shared against the evasion's datastore, but in case it # isn't. payload..validate(payload.datastore) return true end |