ペネトレーション基礎
ペネトレーション
フロー
ペネトレーションは以下のような流れに沿って行います(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
最後に
今回紹介したのは、ほんの一部ですが、ペネトレーションの際には欠かせない大切なことです。権限昇格や攻撃の詳細に関しては、進捗に応じて、また共有用の記事を書いていこうと考えているので、まずは列挙の段階から手をつけていくことをお勧めします。
実際の攻略記事
私が実際に攻略し、まとめた記事を共有しておきます。
一つの基準としてみてみてください。
Discussion