<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                **注意: 這個文檔可能需要審查** 一個數據存儲選項是用戶可以設置的變量的一個類型,允許metasploit的各種組件在使用時更具有配置性.例子,在msfconsole,你能設置ConsoleLogging選項來記錄所有控制臺的輸入輸出的所有日志 -- 在滲透過程中方便文檔記錄的一種方法.當你載入一個模塊,這個mixin或模塊會注冊更多選項.一些常見的有:用于服務器exploit或輔助模塊的 RHOST 和 RPORT ,客戶端模塊的SRVHOST等等.準確找出可以設置的數據存儲選項的最佳方法是通過使用以下命令 * ```show options``` - Shows you all the basic options. * ```show advanced``` - Shows you all the advanced options. * ```show missing``` - Shows you all the required options you have not configured. * ```set``` - Shows you everything. Obviously you also use this command to set an option. ### 選項源: ModuleDataStore, active_module, session, and framework **用戶如何查看數據儲存選項:** 在用戶方面,數據儲存選項 像全局或者模塊級別:全局 意味全部模塊都能使用該選項.可以使用```setg```命令來設置.模塊級別意味著只有你當前正在使用的模塊會記住儲存選項,沒有其他的能記住.如果先加載模塊,則需要設置模塊級別選項,然后使用```set```命令,像下面這樣: ``` msf > use exploit/windows/smb/ms08_067_netapi msf exploit(ms08_067_netapi) > set rhost 10.0.1.3 rhost => 10.0.1.3 ``` **metasploit開發者如何查看數據儲存選項** 在開發方面,事情有點瘋狂.數據存儲選項實際上可以在至少四個不同的來源中找到:the ModuleDataStore object, active_module, session object, or the framework object. 如果你只是進行模塊開發.你能信任的最好的源是ModuleDataStore對象.這個對象有一個特定的加載順序,然后把所需的選項交給你.如果這個選項可以在模塊的數據存儲中找到,它會給你這個選項。如果沒有找到,它從一個框架給你一個.以下是如何讀取模塊中的數據存儲選項的例子 ```ruby current_host = datastore['RHOST'] ``` 如果你的開發工作在模塊領域之外,那么很有可能你甚至沒有ModuleDataStore對象。但是在一些情況,你仍然可以從驅動程序讀取[active_module accessor](https://github.com/rapid7/metasploit-framework/blob/master/lib/msf/ui/console/driver.rb#L607) .或者如果你可以訪問[ModuleCommandDispatcher](https://github.com/rapid7/metasploit-framework/blob/master/lib/msf/ui/console/module_command_dispatcher.rb#L28),有一個一個給你相同東西的```mod```方法.有時mixin會在派發模塊的時候會通過 ```run_simple```方法進行傳遞.比如,你可以看這個[Msf::Ui::Console::CommandDispatcher::Auxiliary](https://github.com/rapid7/metasploit-framework/blob/master/lib/msf/ui/console/command_dispatcher/auxiliary.rb)類 在一些情況就像在post exploit運行腳本,你可能沒有 ModuleDataStore 或者 active_module,但是你應該仍然有一個session對象.應該有一個```exploit_datastore``` 給你所有的數據儲存選項 ```ruby session.exploit_datastore ``` 如果你無權訪問模塊或者session對象,最后的源顯然是這個framework對象.并且這個framework對象總是存在.否則,像我們之前說的,如果用戶設置一個 module-level 選項 沒有其他的組件可以看到他,這引入框架對象 ```ruby framework.datastore ``` 所以現在你知道數據儲存選項的多個來源.希望在這一點上,你清楚的認識到不是所有的源必然分享所有的東西.如果你嘗試所有東西,像一個生成規則,這應該是你的載入順序 1. Try from the ModuleDataStore 2. Try from active_module 3. Try from session 4. Try from framework ### 核心選項類型 所有核心數據儲存選項類型是定義在[option_container.rb](https://github.com/rapid7/metasploit-framework/blob/master/lib/msf/core/option_container.rb) 文件.你應該總是挑選最合適的一個,因為每個都有自己的輸入驗證 那么你在數據注冊階段初始化一個選項,它應該遵循以下格式 ```ruby OptSomething.new(option_name, [boolean, description, value]) ``` * **option_name** -選項的名字 * **boolean** - 第一個屬性,true的意思是這是一個必選的 false的意思是這是一個可選的 * **description** - 關于這個選項的短描述 * **value** - 一個默認值,注意如果第一個屬性是false,你不需要提供這個值,它將會自動填充nil 現在讓我們討論關于什么類是可用的 * **OptString** - 通常用于字符串選項。如果輸入以“file://”開頭,則OptString也會自動假定這是一個文件,并從中讀取。但是,在發生這種情況時沒有文件路徑驗證,所以如果要加載文件,則應該使用OptPath,然后自己讀取該文件。代碼示例: ```ruby OptString.new('MYTEST', [ true, 'Set a MYTEST option', 'This is a default value' ]) ``` * **OptRaw** 實際上它的功能與OptString完全相同 * **OptBool** - bool選項它將驗證輸入是true或者false.例如y, yes, n, no, 0, 1, 代碼示例 ```ruby OptBool.new('BLAH', [ true, 'Set a BLAH option', false ]) ``` * **OptEnum** - 基本上這將限制輸入到特定的選項。例如,如果您希望輸入是`apple`或者`orange`,而不是其他的.那么OptEnum就是您的選擇。代碼示例: ```ruby # Choices are: apple or range, defaults to apple OptEnum.new('FRUIT', [ true, 'Set a fruit', 'apple', ['apple', 'orange']]) ``` * **OptPort** -對于輸入它意味著是用作端口號。這個數字應該在0 - 65535之間。代碼示例: ```ruby OptPort.new('RPORT', [ true, 'Set a port', 21 ]) ``` * **OptAddress** 作為IPv4地址的輸入。代碼示例: ```ruby OptAddress.new('IP', [ true, 'Set an IP', '10.0.1.3' ]) ``` * **OptAddressRange** 作為IPv4地址的輸入,例如:10.0.1.1-10.0.1.20或10.0.1.1/24。您也可以提供文件路徑而不是范圍,它會自動將該文件視為IP列表。或者,如果你使用rand:3語法,其中3意味著3次,它會為你生成3個隨機IP。代碼示例: ```ruby OptAddressRange.new('Range', [ true, 'Set an IP range', '10.0.1.3-10.0.1.23' ]) ``` * **OptPath** 如果你的數據儲存選項要求一個本地文件路徑.請使用此選項。 ```ruby OptPath.new('FILE', [ true, 'Load a local file' ]) ``` * **OptInt** 它可以是一個16進制值或者10進制 ```ruby OptInt.new('FILE', [ true, 'A hex or decimal', 1024 ]) ``` * **OptRegexp** 是一個正則表達式數據存儲選項。 ```ruby OptRegexp.new('PATTERN', [true, 'Match a name', '^alien']), ``` **Other types:** 在某些情況下,可能沒有適合您的數據存儲選項類型。最好的例子是URL:即使沒有OptUrl這樣的東西,你可以做的是使用OptString類型,然后在你的模塊中做一些驗證,如下所示: ```ruby def valid?(input) if input =~ /^http:\/\/.+/i return true else # Here you can consider raising OptionValidateError return false end end if valid?(datastore['URL']) # We can do something with the URL else # Not the format we're looking for. Refuse to do anything. end ``` ### register_options 方法 這```register_options```方法可以注冊多個基本數據存儲選項。基本數據存儲選項是必須配置的選項,例如服務器端漏洞中的RHOST選項。或者它是非常常用的,例如登錄模塊中的各種用戶名/密碼選項。 以下是在模塊中注冊多個數據存儲選項的示例: ```ruby register_options( [ OptString.new('SUBJECT', [ true, 'Set a subject' ]), OptString.new('MESSAGE', [ true, 'Set a message' ]) ], self.class) ``` ### register_advanced_options 方法 這個```register_advanced_options```方法 以注冊多個高級數據存儲選項。高級數據存儲選項是在使用模塊之前不需要用戶配置的選項。例如,代理選項幾乎總是被視為“高級”。但是,當然,這也意味著大多數用戶會覺得難以配置。 注冊高級選項的示例: ```ruby register_advanced_options( [ OptInt.new('TIMEOUT', [ true, 'Set a timeout, in seconds', 60 ]) ], self.class) ``` ### 更改數據存儲選項的默認值 當一個數據存儲選項已經被一個mixin注冊時,仍然有辦法改變模塊的默認值。您可以使用```register_options```方法,也可以在模塊的元數據中添加一個DefaultOptions鍵。 #### 使用register_options更改默認值: 使用register_options其中一個優點是,如果數據存儲選項是高級的,這就允許它在基本選項菜單上,這意味著當人們在msfconsole上“show options”時,該選項將會在那里。您還可以更改選項說明,以及此方法是否必須。 #### 使用DefaultOptions更改默認值: 當Metasploit初始化一個模塊時,將會調用`import_defaults`方法。此方法將更新所有現有的數據存儲選項(這就是為什么`register_options`可以用來更新默認值),然后它將專門檢查模塊元數據中的DefaultOptions鍵,并再次更新。 下面是一個使用DefaultOptions鍵的exploit模塊初始化的例子: ```ruby def initialize(info={}) super(update_info(info, 'Name' => "Module name", 'Description' => %q{ This is an example of setting the default value of RPORT using the DefaultOptions key }, 'License' => MSF_LICENSE, 'Author' => [ 'Name' ], 'References' => [ [ 'URL', '' ] ], 'Platform' => 'win', 'Targets' => [ [ 'Windows', { 'Ret' => 0x41414141 } ] ], 'Payload' => { 'BadChars' => "\x00" }, 'DefaultOptions' => { 'RPORT' => 8080 }, 'Privileged' => false, 'DisclosureDate' => "", 'DefaultTarget' => 0)) end ``` ### deregister_options 方法 `deregister_options`方法可以注銷基本或高級選項。用法非常簡單: ```ruby deregister_options('OPTION1', 'OPTION2', 'OPTION3') ``` ### 在運行時改變數據存儲選項 目前,在運行時修改數據存儲選項最安全的方法是重寫一個方法。例如,一些mixins像這樣檢索RPORT選項: ```ruby def rport datastore['RPORT'] end ``` 在這種情況下,你可以從模塊中覆蓋這個rport方法,并返回一個不同的值 ```ruby def rport 80 end ``` 這樣,當一個mixin想要這個信息的時候,最終的值是80,而不是實際的值`datastore['RPORT']` ### 理想的數據存儲命名 正常選項總是大寫,高級選項是駝峰式,規避選項是前綴::駝峰式
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看