📚

ペネトレーション基礎

2022/10/18に公開

ペネトレーション

フロー

ペネトレーションは以下のような流れに沿って行います(linuxの場合)

列挙

ポートスキャン

対象のマシンがどのポートを開いるかを調査し、侵入の手がかりを得る

ディレクトリ探索

管理者ログイン画面や情報があるディレクトリ/ファイルがあるか探索する

サブドメイン探索

管理者ログイン画面や別のドメインのサイトがあるか探索する

脆弱性の調査

対象サービス/アプリケーションのバージョンに脆弱性がないか調査する

WEB診断

バージョン調査

SQLインジェクション

XSS

CSRF

ディレクトリトラバーサル

ファイルアップロードによる脆弱性

ファジング

ブルートフォース

コマンドインジェクション

攻撃

リバースシェル

コマンドインジェクションなどにより、リバースシェルを取得する

SSH

ディレクトリトラバーサルや SQL インジェクションによる認証情報の取得

metasploit

脆弱性を利用した exploit を行う

権限昇格

sudo

sudo の設定不備を活用し、権限昇格を狙う

パスの指定不備

絶対パスを使用しないコマンドの指定スクリプトを悪用する

database

データベースにアクセスし、権限昇格につながりそうな情報を探す

cron ジョブの悪用

定期的に root 権限で実行されるスクリプトを悪用する

他にもOSやフレームワークに応じた対応がありますが、基本的には上記のように進めていきます

列挙

ポートスキャン

ポートスキャンでは、主に nmap を使用し、どのポートを開いているかを調査します

┌──(kali㉿kali)-[~/Desktop/OpenSource]
└─$ sudo nmap -Pn -n -v --reason -sS -p- --min-rate=1000 -A 10.10.11.164 -oN nmap.log
PORT     STATE    SERVICE REASON         VERSION
22/tcp   open     ssh     syn-ack ttl 63 OpenSSH 7.6p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 1e:59:05:7c:a9:58:c9:23:90:0f:75:23:82:3d:05:5f (RSA)
|   256 48:a8:53:e7:e0:08:aa:1d:96:86:52:bb:88:56:a0:b7 (ECDSA)
|_  256 02:1f:97:9e:3c:8e:7a:1c:7c:af:9d:5a:25:4b:b8:c8 (ED25519)
80/tcp   open     http    syn-ack ttl 62 Werkzeug/2.1.2 Python/3.10.3
| fingerprint-strings: 
|   GetRequest: 
|     HTTP/1.1 200 OK
|     Server: Werkzeug/2.1.2 Python/3.10.3
| http-methods: 
|_  Supported Methods: GET HEAD OPTIONS
|_http-server-header: Werkzeug/2.1.2 Python/3.10.3
|_http-title: upcloud - Upload files for Free!
3000/tcp filtered ppp     no-response

例えば、対象が 10.10.11.164 である場合、nmap を実行することで、22、80、3000番が空いていることがわかりました。同時に、バージョンも出力されています。
nmap の結果を受け、WEB にアクセスしたり、バージョンの脆弱性を探していきます

ディレクトリ探索

ディレクトリ探索では、gobuster を使用していきます

┌──(kali㉿kali)-[~/Desktop/OpenSource]
└─$ gobuster dir -u http://10.10.11.164/ -w /usr/share/wordlists/dirb/common.txt -o gobuster_dir.log 2>/dev/null
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.11.164/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.1.0
[+] Timeout:                 10s
===============================================================
2022/10/13 15:24:39 Starting gobuster in directory enumeration mode
===============================================================
/console              (Status: 200) [Size: 1563]
/download             (Status: 200) [Size: 2489147]
===============================================================
2022/10/13 15:29:55 Finished
===============================================================

対象のアドレスに対して、ワードリストに書かれている文字列を使用しアクセスします。200番が返ってくると存在するページとみなします。
特に情報がない場合もありますが、たまに管理者ログインページなどが見つかる場合もあります。

サブドメイン探索

こちらでも、gobuster を使用していきます。

┌──(kali㉿kali)-[~/Desktop/Shoppy]
└─$ gobuster vhost -u http://shoppy.htb/ -w /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt -t 150 2>/dev/null -o gobuster_vhost.log 
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:          http://shoppy.htb/
[+] Method:       GET
[+] Threads:      150
[+] Wordlist:     /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt
[+] User Agent:   gobuster/3.1.0
[+] Timeout:      10s
===============================================================
2022/10/07 15:18:33 Starting gobuster in VHOST enumeration mode
===============================================================
Found: mattermost.shoppy.htb (Status: 200) [Size: 3122]
===============================================================
2022/10/07 15:20:51 Finished
===============================================================

gobuster では、ディレクトリ探索の際に使用した dir を vhost に変更するだけで、サブドメインの探索が行えます。サブドメインを探索する目的は、ディレクトリ探索と似ています。管理者用のドメインを発見できることもあります。また、新たなサブドメインが見つかった場合は、そのサブドメインに対してディレクトリ探索を行う場合もあります。

脆弱性の調査

脆弱性の調査は、Google などの検索エンジンを使用するか、コマンドを使用することも出来ます

┌──(kali㉿kali)-[~/Desktop/Love]
└─$ searchsploit Voting System
--------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                               |  Path
--------------------------------------------------------------------------------------------- ---------------------------------
Online Voting System - Authentication Bypass                                                 | php/webapps/43967.py
Online Voting System 1.0 - Authentication Bypass (SQLi)                                      | php/webapps/50075.txt
Online Voting System 1.0 - Remote Code Execution (Authenticated)                             | php/webapps/50076.txt
Online Voting System 1.0 - SQLi (Authentication Bypass) + Remote Code Execution (RCE)        | php/webapps/50088.py
Online Voting System Project in PHP - 'username' Persistent Cross-Site Scripting             | multiple/webapps/49159.txt
Voting System 1.0 - Authentication Bypass (SQLI)                                             | php/webapps/49843.txt
Voting System 1.0 - File Upload RCE (Authenticated Remote Code Execution)                    | php/webapps/49445.py
Voting System 1.0 - Remote Code Execution (Unauthenticated)                                  | php/webapps/49846.txt
Voting System 1.0 - Time based SQLI  (Unauthenticated SQL injection)                         | php/webapps/49817.txt
WordPress Plugin Poll_ Survey_ Questionnaire and Voting system 1.5.2 - 'date_answers' Blind  | php/webapps/50052.txt
--------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

searchsploit は、脆弱性がある場合、それに対応するコードを提供してくれるので、非常に優秀です。-m を指定し、ファイル名を後に付けるだけで、ローカルにインストールできます。

WEB診断

WEB の攻撃手法は様々なものがあります

ログイン画面や検索画面を発見

SQLインジェクションを試す

'or'1=1 のような文字列を入力してみる

入力がそのまま出力されていそうな画面を発見

XSSを試す

<scirpt>alert(1)</script> を入力し、挙動を確認

リクエストパラメータを発見

入力を変更し、おかしな動作をしないか試す

1 を 2 に変更してみることで、違った出力が確認できるか試す

ファイルがアップロードできる画面を発見

ファイルアップロードの脆弱性がないかを調査する

PHP ファイルのアップロードによるコマンド実行などを試す

パスを指定し、ファイルが出力されていそうな画面/機能を発見

ディレクトリトラバーサルにより、重要なファイルを出力できないか試す

login/../../../../etc/passwd のようなパスを指定し、ファイルにアクセスできるか試す

コマンドが実行されていそうな機能を発見

セミコロン(;)を使用し、コマンドを追加で実行できないか試す

mail;id のような入力をし、idコマンドの出力が現れていないか試す

ここに挙げているだけでは、まだまだ足りませんが、基本的で大切なものです。
詳しい攻撃手法は、教科書を見たり、下の実際の攻略記事を見ることで、イメージしてみてください
また、わからないことがあれば、チャットにて質問してください。

使用しているツールや環境

◯ Kali Linux
◯ Brup Suite

最後に

今回紹介したのは、ほんの一部ですが、ペネトレーションの際には欠かせない大切なことです。権限昇格や攻撃の詳細に関しては、進捗に応じて、また共有用の記事を書いていこうと考えているので、まずは列挙の段階から手をつけていくことをお勧めします。

実際の攻略記事

私が実際に攻略し、まとめた記事を共有しておきます。
一つの基準としてみてみてください。
https://zenn.dev/sho00/articles/41f13017ca4777
https://zenn.dev/sho00/articles/982df794f28dd1

Discussion